inputselector: set output caps before pushing
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 3 Nov 2009 17:08:05 +0000 (18:08 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Fri, 31 Dec 2010 00:53:50 +0000 (00:53 +0000)
Set the output caps on the srcpad before pushing the buffer because else core
will do a rather expensive check to see if we can actually accept those caps on
the srcpad.

Merged from gst-plugins-base, bdfb4b46d746ef298fcf44260879c342af4cafa3.

plugins/elements/gstinputselector.c

index 95c711f..a957fda 100644 (file)
@@ -561,6 +561,7 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
   GstClockTime end_time, duration;
   GstSegment *seg;
   GstEvent *close_event = NULL, *start_event = NULL;
+  GstCaps *caps;
 
   sel = GST_INPUT_SELECTOR (gst_pad_get_parent (pad));
   selpad = GST_SELECTOR_PAD_CAST (pad);
@@ -647,6 +648,11 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
   GST_DEBUG_OBJECT (pad, "Forwarding buffer %p from pad %s:%s", buf,
       GST_DEBUG_PAD_NAME (pad));
 
+  if ((caps = GST_BUFFER_CAPS (buf))) {
+    if (GST_PAD_CAPS (sel->srcpad) != caps)
+      gst_pad_set_caps (sel->srcpad, caps);
+  }
+
   res = gst_pad_push (sel->srcpad, buf);
 
 done: