summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2015-06-03 18:30:03 +0200
committerMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2015-06-03 16:26:11 +0200
commitebad530a9c393cfe34a6cbd6e6b35bc3785268dc (patch)
treeb39302259b469352c19fb53976711bd5e4dfa896 /plugins
parenta15af9875a325e82b86d20d6cfb9d15fdaffb634 (diff)
downloaduca-ebad530a9c393cfe34a6cbd6e6b35bc3785268dc.tar.gz
uca-ebad530a9c393cfe34a6cbd6e6b35bc3785268dc.tar.bz2
uca-ebad530a9c393cfe34a6cbd6e6b35bc3785268dc.tar.xz
uca-ebad530a9c393cfe34a6cbd6e6b35bc3785268dc.zip
pco: allocate memory also when just reading out
Diffstat (limited to 'plugins')
-rw-r--r--plugins/pco/uca-pco-camera.c58
1 files changed, 35 insertions, 23 deletions
diff --git a/plugins/pco/uca-pco-camera.c b/plugins/pco/uca-pco-camera.c
index 7c06345..c8a814b 100644
--- a/plugins/pco/uca-pco-camera.c
+++ b/plugins/pco/uca-pco-camera.c
@@ -441,6 +441,36 @@ is_type (UcaPcoCameraPrivate *priv, int type)
return priv->description->type == type;
}
+static gboolean
+check_and_resize_memory (UcaPcoCameraPrivate *priv, GError **error)
+{
+ const guint num_buffers = 2;
+
+ if (priv->frame_width != priv->roi_width || priv->frame_height != priv->roi_height || priv->fg_mem == NULL) {
+ guint fg_width = is_edge (priv) ? 2 * priv->roi_width : priv->roi_width;
+
+ priv->frame_width = priv->roi_width;
+ priv->frame_height = priv->roi_height;
+ priv->buffer_size = 2 * priv->frame_width * priv->frame_height;
+
+ Fg_setParameter (priv->fg, FG_WIDTH, &fg_width, priv->fg_port);
+ Fg_setParameter (priv->fg, FG_HEIGHT, &priv->frame_height, priv->fg_port);
+
+ if (priv->fg_mem)
+ Fg_FreeMemEx (priv->fg, priv->fg_mem);
+
+ priv->fg_mem = Fg_AllocMemEx (priv->fg, num_buffers * priv->buffer_size, num_buffers);
+
+ if (priv->fg_mem == NULL) {
+ g_set_error (error, UCA_PCO_CAMERA_ERROR, UCA_PCO_CAMERA_ERROR_FG_INIT,
+ "%s", Fg_getLastErrorDescription(priv->fg));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
static void
uca_pco_camera_start_recording (UcaCamera *camera, GError **error)
{
@@ -497,29 +527,8 @@ uca_pco_camera_start_recording (UcaCamera *camera, GError **error)
/* if (pco_set_binning(priv->pco, priv->binning_h, priv->binning_v) != PCO_NOERROR) */
/* g_warning("Cannot set binning\n"); */
- if (priv->frame_width != priv->roi_width || priv->frame_height != priv->roi_height || priv->fg_mem == NULL) {
- guint fg_width = is_edge (priv) ? 2 * priv->roi_width : priv->roi_width;
-
- priv->frame_width = priv->roi_width;
- priv->frame_height = priv->roi_height;
- priv->buffer_size = 2 * priv->frame_width * priv->frame_height;
-
- Fg_setParameter(priv->fg, FG_WIDTH, &fg_width, priv->fg_port);
- Fg_setParameter(priv->fg, FG_HEIGHT, &priv->frame_height, priv->fg_port);
-
- if (priv->fg_mem)
- Fg_FreeMemEx(priv->fg, priv->fg_mem);
-
- const guint num_buffers = 2;
- priv->fg_mem = Fg_AllocMemEx(priv->fg, num_buffers * priv->buffer_size, num_buffers);
-
- if (priv->fg_mem == NULL) {
- g_set_error(error, UCA_PCO_CAMERA_ERROR, UCA_PCO_CAMERA_ERROR_FG_INIT,
- "%s", Fg_getLastErrorDescription(priv->fg));
- g_object_unref(camera);
- return;
- }
- }
+ if (!check_and_resize_memory (priv, error))
+ return;
if (transfer_async)
setup_fg_callback (camera);
@@ -585,6 +594,9 @@ uca_pco_camera_start_readout(UcaCamera *camera, GError **error)
* edge.
*/
+ if (!check_and_resize_memory (priv, error))
+ return;
+
err = pco_get_num_images (priv->pco, priv->active_segment, &priv->num_recorded_images);
CHECK_AND_RETURN_ON_PCO_ERROR (err);