From 28e64d10312d9df97ba609ee9ca871595fff8db2 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 10 Jun 2013 17:00:42 +0200 Subject: [PATCH] wrappercamerabinsrc: Add video-source-filter during construction By adding the video-source-filter during construction time, rather then patching it in later (*), we can greatly reduce the amount of caps involved in negotation, speeding up pipeline creation. I wrote this while working on speeding up the startup of cheese. My cheese has been modified to add a capsfilter, filtering for only the configured resolution, with that cheese patch + this patch, the pipeline creation time goes from aprox 1.1 seconds to aprox 350ms. This is with a Logitech 9000 pro camera, which supports lots of different resolutions at many different framerates per resolution, causing a caps "explosion" if not filtered. *) Note the code for this is left in, as it is still necessary if the video-source-filter is changed between a stop + re-start. https://bugzilla.gnome.org/show_bug.cgi?id=701953 --- gst/camerabin2/gstwrappercamerabinsrc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c index 3f94428e20..2e3dda64fd 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.c +++ b/gst/camerabin2/gstwrappercamerabinsrc.c @@ -552,6 +552,16 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc) "src-videoconvert")) goto done; + if (self->app_vid_filter) { + self->video_filter = gst_object_ref (self->app_vid_filter); + + if (!gst_camerabin_add_element (cbin, self->video_filter)) + goto done; + if (!gst_camerabin_create_and_add_element (cbin, "videoconvert", + "filter-videoconvert")) + goto done; + } + if (!(self->src_filter = gst_camerabin_create_and_add_element (cbin, "capsfilter", "src-capsfilter")))