From 0d48f7353286e06a18fbf1965829ee18fceeabd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommi=20My=C3=B6h=C3=A4nen?= Date: Thu, 27 Aug 2009 14:35:26 +0300 Subject: [PATCH] camerabin: handle preview-caps only in image mode and only when they change This prevents camerabin to create preview pipeline every time when application re-sets the same caps again. --- gst/camerabin/gstcamerabin.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/gst/camerabin/gstcamerabin.c b/gst/camerabin/gstcamerabin.c index 6d02850389..40ba83714a 100644 --- a/gst/camerabin/gstcamerabin.c +++ b/gst/camerabin/gstcamerabin.c @@ -2891,11 +2891,23 @@ gst_camerabin_set_property (GObject * object, guint prop_id, } break; case ARG_PREVIEW_CAPS: - GST_OBJECT_LOCK (camera); - gst_caps_replace (&camera->preview_caps, - (GstCaps *) gst_value_get_caps (value)); - GST_OBJECT_UNLOCK (camera); - gst_camerabin_preview_create_pipeline (camera); + /* Currently camerabin only provides preview for images, so we don't + * even handle video mode */ + if (camera->mode == MODE_IMAGE) { + GstCaps *new_caps = NULL; + + new_caps = (GstCaps *) gst_value_get_caps (value); + GST_DEBUG_OBJECT (camera, + "setting preview caps: %" GST_PTR_FORMAT " -> %" GST_PTR_FORMAT, + camera->preview_caps, new_caps); + + if (!gst_caps_is_equal (camera->preview_caps, new_caps)) { + GST_OBJECT_LOCK (camera); + gst_caps_replace (&camera->preview_caps, new_caps); + GST_OBJECT_UNLOCK (camera); + gst_camerabin_preview_create_pipeline (camera); + } + } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);