summaryrefslogtreecommitdiffstats
path: root/tools/gui/control.c
diff options
context:
space:
mode:
authorMihael Koep <koep@schneide.com>2012-10-25 17:47:14 +0200
committerMihael Koep <koep@schneide.com>2012-10-25 17:47:14 +0200
commit620871c0c8e742af5f55ae9a2d6fe2066aa35193 (patch)
tree74e6c4568338d81c8074eb39139cdd5acc721fdc /tools/gui/control.c
parent9c6732c05f35bb06f92593b46990473aa7a0f799 (diff)
parentf68bda1ebebcf589fdab832abfecf997b7f223a6 (diff)
downloadlibuca-620871c0c8e742af5f55ae9a2d6fe2066aa35193.tar.gz
libuca-620871c0c8e742af5f55ae9a2d6fe2066aa35193.tar.bz2
libuca-620871c0c8e742af5f55ae9a2d6fe2066aa35193.tar.xz
libuca-620871c0c8e742af5f55ae9a2d6fe2066aa35193.zip
Merge remote branch 'origin/master' into dexela
Diffstat (limited to 'tools/gui/control.c')
-rw-r--r--tools/gui/control.c42
1 files changed, 32 insertions, 10 deletions
diff --git a/tools/gui/control.c b/tools/gui/control.c
index 877473e..f74e0f1 100644
--- a/tools/gui/control.c
+++ b/tools/gui/control.c
@@ -91,7 +91,8 @@ convert_grayscale_to_rgb (ThreadData *data, gpointer buffer)
gint offset = y * stride * data->width;
for (gint x = 0; x < data->display_width; x++, offset += stride) {
- guchar val = (guchar) ((input[offset] - min) * factor);
+ gdouble dval = (input[offset] - min) * factor;
+ guchar val = (guchar) CLAMP(dval, 0.0, 255.0);
output[i++] = val;
output[i++] = val;
@@ -106,7 +107,8 @@ convert_grayscale_to_rgb (ThreadData *data, gpointer buffer)
gint offset = y * stride * data->width;
for (gint x = 0; x < data->display_width; x++, offset += stride) {
- guchar val = (guchar) ((input[offset] - min) * factor);
+ gdouble dval = (input[offset] - min) * factor;
+ guchar val = (guchar) CLAMP(dval, 0.0, 255.0);
output[i++] = val;
output[i++] = val;
@@ -138,24 +140,38 @@ update_pixbuf_dimensions (ThreadData *data)
gtk_image_set_from_pixbuf (GTK_IMAGE (data->image), data->pixbuf);
}
+static void
+print_and_free_error (GError **error)
+{
+ g_printerr ("%s\n", (*error)->message);
+ g_error_free (*error);
+ *error = NULL;
+}
+
static gpointer
preview_frames (void *args)
{
ThreadData *data = (ThreadData *) args;
gint counter = 0;
+ GError *error = NULL;;
while (data->state == RUNNING) {
gpointer buffer;
buffer = ring_buffer_get_current_pointer (data->buffer);
- uca_camera_grab (data->camera, &buffer, NULL);
- convert_grayscale_to_rgb (data, buffer);
+ uca_camera_grab (data->camera, &buffer, &error);
- gdk_threads_enter ();
- update_pixbuf (data);
- gdk_threads_leave ();
+ if (error == NULL) {
+ convert_grayscale_to_rgb (data, buffer);
+
+ gdk_threads_enter ();
+ update_pixbuf (data);
+ gdk_threads_leave ();
- counter++;
+ counter++;
+ }
+ else
+ print_and_free_error (&error);
}
return NULL;
}
@@ -166,6 +182,7 @@ record_frames (gpointer args)
ThreadData *data;
gpointer buffer;
guint n_frames = 0;
+ GError *error = NULL;
data = (ThreadData *) args;
ring_buffer_reset (data->buffer);
@@ -173,8 +190,13 @@ record_frames (gpointer args)
while (data->state == RECORDING) {
buffer = ring_buffer_get_current_pointer (data->buffer);
uca_camera_grab (data->camera, &buffer, NULL);
- ring_buffer_proceed (data->buffer);
- n_frames++;
+
+ if (error == NULL) {
+ ring_buffer_proceed (data->buffer);
+ n_frames++;
+ }
+ else
+ print_and_free_error (&error);
}
n_frames = ring_buffer_get_num_blocks (data->buffer);