aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>2010-09-14 14:38:17 +0800
committerSjoerd Simons <sjoerd.simons@collabora.co.uk>2010-09-14 14:38:17 +0800
commit9d7af3cbb13bb74ccc28427a7261be514f7cb241 (patch)
treeb2ce90eed594106bc733e2f1824e9149d2cfad6a
parentb28a581a457842fb703b3ed85110e1e4c68f3707 (diff)
downloadgsoc2013-empathy-9d7af3cbb13bb74ccc28427a7261be514f7cb241.tar
gsoc2013-empathy-9d7af3cbb13bb74ccc28427a7261be514f7cb241.tar.gz
gsoc2013-empathy-9d7af3cbb13bb74ccc28427a7261be514f7cb241.tar.bz2
gsoc2013-empathy-9d7af3cbb13bb74ccc28427a7261be514f7cb241.tar.lz
gsoc2013-empathy-9d7af3cbb13bb74ccc28427a7261be514f7cb241.tar.xz
gsoc2013-empathy-9d7af3cbb13bb74ccc28427a7261be514f7cb241.tar.zst
gsoc2013-empathy-9d7af3cbb13bb74ccc28427a7261be514f7cb241.zip
Change videosrc element ordering
GStreamers basetransform has a nasty issue where its caps negotiation doesn't keep the ordering of caps when unioning, as a result of this linking the pipeline as "<src> ! videoscale ! colorspace ! video/x-raw-yuv" means at the <src> element yuv is no longer preferred. Changing the pipeline to be "<src> ! colorspace ! videoscale ! video/x-raw-yuv" forces the videoscale to only negotiate video/x-raw-yuv, which in turns ensures the colorspace and <src> element pick the right colorspace. In combination with emulated formats in v4l2src picking the wrong colorspace causes quite a performance hit (the src would do a color conversion in libv4l, while the colorspace element would later convert it back to a colorspace actually native to the src device!)
-rw-r--r--libempathy-gtk/empathy-video-src.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/libempathy-gtk/empathy-video-src.c b/libempathy-gtk/empathy-video-src.c
index 9c7b28fd2..5c865daaa 100644
--- a/libempathy-gtk/empathy-video-src.c
+++ b/libempathy-gtk/empathy-video-src.c
@@ -147,9 +147,21 @@ empathy_video_src_init (EmpathyGstVideoSrc *obj)
g_free (str);
if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
+ element, "ffmpegcolorspace")) == NULL)
+ g_error ("Failed to add \"ffmpegcolorspace\" (gst-plugins-base missing?)");
+
+ if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
element, "videoscale")) == NULL)
g_error ("Failed to add \"videoscale\", (gst-plugins-base missing?)");
+ if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
+ element, "capsfilter")) == NULL)
+ g_error (
+ "Failed to add \"capsfilter\" (gstreamer core elements missing?)");
+
+ g_object_set (G_OBJECT (element), "caps", caps, NULL);
+
+
/* optionally add postproc_tmpnoise to improve the performance of encoders */
element_back = element;
if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
@@ -159,17 +171,6 @@ empathy_video_src_init (EmpathyGstVideoSrc *obj)
element = element_back;
}
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- element, "ffmpegcolorspace")) == NULL)
- g_error ("Failed to add \"ffmpegcolorspace\" (gst-plugins-base missing?)");
-
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- element, "capsfilter")) == NULL)
- g_error (
- "Failed to add \"capsfilter\" (gstreamer core elements missing?)");
-
- g_object_set (G_OBJECT (element), "caps", caps, NULL);
-
src = gst_element_get_static_pad (element, "src");
g_assert (src != NULL);