From 8701b32d15dca588bccca5d8c0586826fbbcb09e Mon Sep 17 00:00:00 2001 From: Matthias Vogelgesang Date: Thu, 12 Apr 2012 17:45:27 +0200 Subject: Allocate memory only when size has changed --- src/cameras/uca-pco-camera.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) (limited to 'src/cameras/uca-pco-camera.c') diff --git a/src/cameras/uca-pco-camera.c b/src/cameras/uca-pco-camera.c index 850f3a6..fa97fb6 100644 --- a/src/cameras/uca-pco-camera.c +++ b/src/cameras/uca-pco-camera.c @@ -289,25 +289,30 @@ static void uca_pco_camera_start_recording(UcaCamera *camera, GError **error) */ guint16 roi[4] = {0}; err = pco_get_roi(priv->pco, roi); - priv->frame_width = roi[2] - roi[0] + 1; - priv->frame_height = roi[3] - roi[1] + 1; - priv->num_bytes = 2; + guint frame_width = roi[2] - roi[0] + 1; + guint frame_height = roi[3] - roi[1] + 1; - Fg_setParameter(priv->fg, FG_WIDTH, &priv->frame_width, priv->fg_port); - Fg_setParameter(priv->fg, FG_HEIGHT, &priv->frame_height, priv->fg_port); + if (priv->frame_width != frame_width || priv->frame_height != frame_height || priv->fg_mem == NULL) { + priv->frame_width = frame_width; + priv->frame_height = frame_height; + priv->num_bytes = 2; - if (priv->fg_mem) - Fg_FreeMemEx(priv->fg, priv->fg_mem); + Fg_setParameter(priv->fg, FG_WIDTH, &priv->frame_width, priv->fg_port); + Fg_setParameter(priv->fg, FG_HEIGHT, &priv->frame_height, priv->fg_port); - const guint num_buffers = 2; - priv->fg_mem = Fg_AllocMemEx(priv->fg, - num_buffers * priv->frame_width * priv->frame_height * sizeof(uint16_t), num_buffers); + if (priv->fg_mem) + Fg_FreeMemEx(priv->fg, priv->fg_mem); - 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; + const guint num_buffers = 2; + priv->fg_mem = Fg_AllocMemEx(priv->fg, + num_buffers * priv->frame_width * priv->frame_height * sizeof(uint16_t), 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 ((priv->camera_description->camera_type == CAMERATYPE_PCO_DIMAX_STD) || -- cgit v1.2.3