diff options
author | Mihael Koep <koep@schneide.com> | 2012-10-25 17:47:14 +0200 |
---|---|---|
committer | Mihael Koep <koep@schneide.com> | 2012-10-25 17:47:14 +0200 |
commit | 620871c0c8e742af5f55ae9a2d6fe2066aa35193 (patch) | |
tree | 74e6c4568338d81c8074eb39139cdd5acc721fdc /tools/gui/control.c | |
parent | 9c6732c05f35bb06f92593b46990473aa7a0f799 (diff) | |
parent | f68bda1ebebcf589fdab832abfecf997b7f223a6 (diff) | |
download | libuca-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.c | 42 |
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); |