From a07a1138a8cf8ad1029845dfe4cfdf5a0a36e670 Mon Sep 17 00:00:00 2001 From: Hans de Goede 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 --- 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