From e97ce527b0c73db98fa471c6877a048505f32c9e Mon Sep 17 00:00:00 2001 From: Martijn Braam Date: Thu, 20 Jul 2023 18:27:17 +0200 Subject: [PATCH] Pause frame processing when window is not active --- src/io_pipeline.c | 6 ++++++ src/main.c | 9 ++++++++- src/main.h | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/io_pipeline.c b/src/io_pipeline.c index 78db658..3cd6729 100644 --- a/src/io_pipeline.c +++ b/src/io_pipeline.c @@ -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(); diff --git a/src/main.c b/src/main.c index d9dd2c7..9d67181 100644 --- a/src/main.c +++ b/src/main.c @@ -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( diff --git a/src/main.h b/src/main.h index 27f1a6c..f6730f6 100644 --- a/src/main.h +++ b/src/main.h @@ -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(); \ No newline at end of file