inputselector: set output caps before pushing
authorWim Taymans <wim.taymans@collabora.co.uk>
Wed, 21 Oct 2009 20:24:29 +0000 (16:24 -0400)
committerWim Taymans <wim@metal.(none)>
Wed, 21 Oct 2009 20:24:29 +0000 (16:24 -0400)
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.

gst/playback/gstinputselector.c

index 546656a..c0b96aa 100644 (file)
@@ -562,6 +562,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);
@@ -648,6 +649,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: