summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2014-02-13 14:54:34 +0100
committerMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2014-02-14 16:17:16 +0100
commit961e60a89bc60e760707892539ccd7c6d283ef01 (patch)
tree6e002e95258e4e736c58f5187ff93cf83579541b /bin
parentf15d21389a81f8df36b00113aed5c81d27143861 (diff)
downloaduca-961e60a89bc60e760707892539ccd7c6d283ef01.tar.gz
uca-961e60a89bc60e760707892539ccd7c6d283ef01.tar.bz2
uca-961e60a89bc60e760707892539ccd7c6d283ef01.tar.xz
uca-961e60a89bc60e760707892539ccd7c6d283ef01.zip
Fix #28: Add buffered recording to base class
This change adds new properties ::buffered and ::num-buffers to the base class. If ::buffered is TRUE, uca_camera_start_recording will spawn a new thread which will call the camera-specific grab. Any call to uca_camera_grab will return the next item from the ring buffer.
Diffstat (limited to 'bin')
-rw-r--r--bin/gui/control.c2
-rw-r--r--bin/tools/grab.c1
2 files changed, 3 insertions, 0 deletions
diff --git a/bin/gui/control.c b/bin/gui/control.c
index d4191a1..b02c42d 100644
--- a/bin/gui/control.c
+++ b/bin/gui/control.c
@@ -752,6 +752,7 @@ record_frames (gpointer args)
buffer = uca_ring_buffer_get_write_pointer (data->buffer);
uca_camera_grab (data->camera, buffer, NULL);
+ uca_ring_buffer_write_advance (data->buffer);
if (error == NULL) {
n_frames++;
@@ -949,6 +950,7 @@ download_frames (ThreadData *data)
while (error == NULL) {
buffer = uca_ring_buffer_get_write_pointer (data->buffer);
uca_camera_grab (data->camera, buffer, &error);
+ uca_ring_buffer_write_advance (data->buffer);
gdk_threads_enter ();
gtk_adjustment_set_value (data->download_adjustment, current_frame++);
diff --git a/bin/tools/grab.c b/bin/tools/grab.c
index a3dd544..11f8a83 100644
--- a/bin/tools/grab.c
+++ b/bin/tools/grab.c
@@ -170,6 +170,7 @@ record_frames (UcaCamera *camera, Options *opts)
gdouble elapsed;
uca_camera_grab (camera, uca_ring_buffer_get_write_pointer (buffer), &error);
+ uca_ring_buffer_write_advance (buffer);
if (error != NULL)
return error;