Pause frame processing when window is not active

This commit is contained in:
Martijn Braam
2023-07-20 18:27:17 +02:00
parent 6e8293116b
commit e97ce527b0
3 changed files with 16 additions and 1 deletions

View File

@@ -2,6 +2,7 @@
#include "camera.h"
#include "flash.h"
#include "main.h"
#include "pipeline.h"
#include "process_pipeline.h"
#include "state.h"
@@ -240,6 +241,11 @@ update_controls()
static void
on_frame(MPBuffer buffer, void *_data)
{
// Don't process frame when the window is not active
if (!check_window_active()) {
return;
}
// Only update controls right after a frame was captured
update_controls();

View File

@@ -55,6 +55,7 @@ static char last_path[260] = "";
static MPZBarScanResult *zbar_result = NULL;
// Widgets
GtkWidget *window;
GtkWidget *preview;
GtkWidget *main_stack;
GtkWidget *open_last_stack;
@@ -90,6 +91,12 @@ remap(int value, int input_min, int input_max, int output_min, int output_max)
return (int)result;
}
bool
check_window_active()
{
return gtk_window_is_active(GTK_WINDOW(window));
}
static void
update_io_pipeline()
{
@@ -1126,7 +1133,7 @@ activate(GtkApplication *app, gpointer data)
GtkBuilder *builder = gtk_builder_new_from_resource(
"/org/postmarketos/Megapixels/camera.ui");
GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
iso_button =
GTK_WIDGET(gtk_builder_get_object(builder, "iso-controls-button"));
shutter_button = GTK_WIDGET(

View File

@@ -31,3 +31,5 @@ void mp_main_capture_completed(GdkTexture *thumb, const char *fname);
void mp_main_set_zbar_result(MPZBarScanResult *result);
int remap(int value, int input_min, int input_max, int output_min, int output_max);
bool check_window_active();