summaryrefslogtreecommitdiffstats
path: root/bin/gui/control.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/gui/control.c')
-rw-r--r--bin/gui/control.c30
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