[cheese/wip/hans-fixes: 1/35] cheese-camera: Add a capsfilter to our video-source bin
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cheese/wip/hans-fixes: 1/35] cheese-camera: Add a capsfilter to our video-source bin
- Date: Fri, 14 Jun 2013 22:23:46 +0000 (UTC)
commit aa51cfc303d9ef13822659bd308337590cd4f24a
Author: Hans de Goede <hdegoede redhat com>
Date: Mon Jun 10 19:48:47 2013 +0200
cheese-camera: Add a capsfilter to our video-source bin
This serves 2 purposes:
1) It forces gstreamer to actually run the video source at the configured
resolution, rather then say run it at 1600x1200 @ 5 fps and downscale
that to 800x600 (still at 5 fps), as gstreamer opts to do with my
Logitech Webcam Pro 9000, when left to its own auto negotiate code.
2) By greatly reducing the amount of advertised caps (this cam supports lots
of different resolutions at many different framerates per resolution), it
avoids a caps intersect "explosion", reducing the pipeline caps negotiation
on my core i5 @ 3.1Ghz from aprox 1.1 sec to aprox 350 ms (*).
*) When combined with later patches in this patchset which also limit the
framerates in the filtered caps.
Signed-off-by: Hans de Goede <hdegoede redhat com>
libcheese/cheese-camera.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
---
diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c
index a78affd..c42d896 100644
--- a/libcheese/cheese-camera.c
+++ b/libcheese/cheese-camera.c
@@ -417,7 +417,7 @@ cheese_camera_set_camera_source (CheeseCamera *camera)
}
camera_input = g_strdup_printf (
- "%s name=video_source device=%s",
+ "%s name=video_source device=%s ! capsfilter name=video_source_filter",
cheese_camera_device_get_src (selected_camera),
cheese_camera_device_get_device_node (selected_camera));
@@ -762,7 +762,8 @@ cheese_camera_set_new_caps (CheeseCamera *camera)
if (!gst_caps_is_empty (caps))
{
- GST_INFO_OBJECT (camera, "SETTING caps%" GST_PTR_FORMAT, caps);
+ GST_INFO_OBJECT (camera, "SETTING caps %" GST_PTR_FORMAT, caps);
+ g_object_set (gst_bin_get_by_name (GST_BIN (priv->video_source), "video_source_filter"), "caps", caps,
NULL);
g_object_set (priv->camerabin, "viewfinder-caps", caps, NULL);
}
gst_caps_unref (caps);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]