diff options
-rw-r--r-- | bin/gui/control.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/bin/gui/control.c b/bin/gui/control.c index 1e67265..2532832 100644 --- a/bin/gui/control.c +++ b/bin/gui/control.c @@ -21,6 +21,7 @@ #include <gdk/gdkkeysyms.h> #include <math.h> #include <cairo.h> +#include <string.h> #include "config.h" #include "uca-camera.h" @@ -110,7 +111,7 @@ typedef struct { static UcaPluginManager *plugin_manager; static gsize mem_size = 2048; -static void update_pixbuf (ThreadData *data); +static void update_pixbuf (ThreadData *data, gpointer buffer); static void up_and_down_scale (ThreadData *data, gpointer buffer) @@ -301,7 +302,7 @@ up_and_down_scale (ThreadData *data, gpointer buffer) } static void -get_statistics (ThreadData *data, gdouble *mean, gdouble *sigma, guint *_max, guint *_min) +get_statistics (ThreadData *data, gdouble *mean, gdouble *sigma, guint *_max, guint *_min, gpointer buffer) { gdouble sum = 0.0; gdouble squared_sum = 0.0; @@ -310,7 +311,7 @@ get_statistics (ThreadData *data, gdouble *mean, gdouble *sigma, guint *_max, gu guint n = data->width * data->height; if (data->pixel_size == 1) { - guint8 *input = (guint8 *) uca_ring_buffer_peek_pointer (data->buffer); + guint8 *input = (guint8 *) buffer; for (gint i = 0; i < n; i++) { guint8 val = input[i]; @@ -326,7 +327,7 @@ get_statistics (ThreadData *data, gdouble *mean, gdouble *sigma, guint *_max, gu } } else { - guint16 *input = (guint16 *) uca_ring_buffer_peek_pointer (data->buffer); + guint16 *input = (guint16 *) buffer; for (gint i = 0; i < n; i++) { guint16 val = input[i]; @@ -519,7 +520,7 @@ on_button_release (GtkWidget *event_box, GdkEventMotion *event, ThreadData *data data->adj_width = data->to_x - data->from_x; data->adj_height = data->to_y - data->from_y; - update_pixbuf (data); + update_pixbuf (data, uca_ring_buffer_peek_pointer (data->buffer)); } static gboolean @@ -539,7 +540,7 @@ on_expose (GtkWidget *event_box, GdkEventExpose *event, ThreadData *data) } static void -update_pixbuf (ThreadData *data) +update_pixbuf (ThreadData *data, gpointer buffer) { gchar string[32]; gdouble mean; @@ -574,7 +575,7 @@ update_pixbuf (ThreadData *data) height = data->display_height; } - get_statistics (data, &mean, &sigma, &max, &min); + get_statistics (data, &mean, &sigma, &max, &min, buffer); g_snprintf (string, 32, "\u03bc = %3.2f", mean); gtk_label_set_text (data->mean_label, string); @@ -708,7 +709,7 @@ preview_frames (void *args) gdk_threads_enter (); - update_pixbuf (data); + update_pixbuf (data, data->shadow); egg_histogram_view_update (EGG_HISTOGRAM_VIEW (data->histogram_view), data->shadow); if ((data->ev_x >= 0) && (data->ev_y >= 0) && (data->ev_y <= data->display_height) && (data->ev_x <= data->display_width)) { @@ -721,10 +722,13 @@ preview_frames (void *args) up_and_down_scale (data, data->shadow); gdk_threads_enter (); - update_pixbuf (data); + update_pixbuf (data, data->shadow); gdk_threads_leave (); + gpointer buffer = uca_ring_buffer_get_write_pointer (data->buffer); + memcpy (buffer, data->shadow, uca_ring_buffer_get_block_size (data->buffer)); g_free (data->shadow); + return NULL; } @@ -816,7 +820,7 @@ update_current_frame (ThreadData *data) egg_histogram_view_update (EGG_HISTOGRAM_VIEW (data->histogram_view), buffer); up_and_down_scale (data, buffer); - update_pixbuf (data); + update_pixbuf (data, buffer); } static void @@ -1010,13 +1014,13 @@ update_zoomed_pixbuf (ThreadData *data) { if (data->state == RUNNING) { up_and_down_scale (data, uca_ring_buffer_peek_pointer (data->buffer)); - update_pixbuf (data); + update_pixbuf (data, uca_ring_buffer_peek_pointer (data->buffer)); update_pixbuf_dimensions (data); } else { update_pixbuf_dimensions (data); up_and_down_scale (data, uca_ring_buffer_peek_pointer (data->buffer)); - update_pixbuf (data); + update_pixbuf (data, uca_ring_buffer_peek_pointer (data->buffer)); } } @@ -1083,7 +1087,7 @@ on_colormap_changed (GtkComboBox *widget, ThreadData *data) update_pixbuf_dimensions (data); up_and_down_scale (data, uca_ring_buffer_peek_pointer (data->buffer)); - update_pixbuf (data); + update_pixbuf (data, uca_ring_buffer_peek_pointer (data->buffer)); } static void |