From a07a1138a8cf8ad1029845dfe4cfdf5a0a36e670 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Fri, 8 Jun 2012 11:31:05 +0200
Subject: [PATCH 2/4] camerabin: Add a camerabin_create_view_finder_caps()
helper function
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
gst/camerabin/gstcamerabin.c | 72 +++++++++++++++++++++++-------------------
1 file changed, 40 insertions(+), 32 deletions(-)
diff --git a/gst/camerabin/gstcamerabin.c b/gst/camerabin/gstcamerabin.c
index 8a36970..3f87ff9 100644
--- a/gst/camerabin/gstcamerabin.c
+++ b/gst/camerabin/gstcamerabin.c
@@ -505,22 +505,15 @@ GST_BOILERPLATE_FULL (GstCameraBin, gst_camerabin, GstPipeline,
*/
/*
- * camerabin_setup_src_elements:
+ * camerabin_create_view_finder_caps:
* @camera: camerabin object
*
- * This function updates camerabin capsfilters according
- * to fps, resolution and zoom that have been configured
- * to camerabin.
+ * This function creates new view_finder_caps, according to
+ * fps and resolution that have been configured to camerabin.
*/
-static void
-camerabin_setup_src_elements (GstCameraBin * camera)
+static GstCaps *camerabin_create_view_finder_caps (GstCameraBin * camera)
{
GstStructure *st;
- GstCaps *new_caps;
- gboolean detect_framerate = FALSE;
-
- /* clear video update status */
- camera->video_capture_caps_update = FALSE;
if (!camera->view_finder_caps) {
st = gst_structure_from_string (CAMERABIN_DEFAULT_VF_CAPS, NULL);
@@ -529,39 +522,54 @@ camerabin_setup_src_elements (GstCameraBin * camera)
0));
}
- gst_camerabin_monitor_video_source_properties (camera);
-
if (camera->app_width > 0 && camera->app_height > 0) {
gst_structure_set (st,
"width", G_TYPE_INT, camera->app_width,
"height", G_TYPE_INT, camera->app_height, NULL);
}
- if (camera->app_fps_n > 0 && camera->app_fps_d > 0) {
- if (camera->night_mode) {
- GST_INFO_OBJECT (camera, "night mode, lowest allowed fps will be forced");
- camera->pre_night_fps_n = camera->app_fps_n;
- camera->pre_night_fps_d = camera->app_fps_d;
- detect_framerate = TRUE;
- } else {
- gst_structure_set (st,
- "framerate", GST_TYPE_FRACTION, camera->app_fps_n,
- camera->app_fps_d, NULL);
- new_caps = gst_caps_new_full (st, NULL);
- }
+ if (!camera->night_mode && camera->app_fps_n > 0 && camera->app_fps_d > 0) {
+ gst_structure_set (st,
+ "framerate", GST_TYPE_FRACTION, camera->app_fps_n,
+ camera->app_fps_d, NULL);
} else {
- GST_DEBUG_OBJECT (camera, "no framerate specified");
- detect_framerate = TRUE;
- }
-
- if (detect_framerate) {
- GST_DEBUG_OBJECT (camera, "detecting allowed framerate");
/* Remove old framerate if any */
if (gst_structure_has_field (st, "framerate")) {
gst_structure_remove_field (st, "framerate");
}
- new_caps = gst_caps_new_full (st, NULL);
+ }
+
+ /* The returned caps take ownership of the structure st */
+ return gst_caps_new_full (st, NULL);
+}
+/*
+ * camerabin_setup_src_elements:
+ * @camera: camerabin object
+ *
+ * This function updates camerabin capsfilters according
+ * to fps, resolution and zoom that have been configured
+ * to camerabin.
+ */
+static void
+camerabin_setup_src_elements (GstCameraBin * camera)
+{
+ GstCaps *new_caps;
+
+ /* clear video update status */
+ camera->video_capture_caps_update = FALSE;
+
+ gst_camerabin_monitor_video_source_properties (camera);
+
+ new_caps = camerabin_create_view_finder_caps (camera);
+
+ if (camera->night_mode || camera->app_fps_n <= 0 || camera->app_fps_d <= 0) {
+ if (camera->night_mode) {
+ GST_INFO_OBJECT (camera, "night mode, lowest allowed fps will be forced");
+ camera->pre_night_fps_n = camera->app_fps_n;
+ camera->pre_night_fps_d = camera->app_fps_d;
+ }
+ GST_DEBUG_OBJECT (camera, "detecting allowed framerate");
/* Set allowed framerate for the resolution */
gst_camerabin_set_allowed_framerate (camera, new_caps);
}
--
1.7.10.2