decodebin2: improve autoplugging

Use the pad caps when they are available to continue the autoplugging. If the
pad caps are set, they are fixed and then we can directly continue autoplugging.
This commit is contained in:
Wim Taymans 2010-06-16 19:15:20 +02:00
parent c2fc44d0ec
commit 6d2621d02c

View file

@ -1972,7 +1972,19 @@ pad_added_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain)
GST_DEBUG_OBJECT (pad, "pad added, chain:%p", chain);
caps = gst_pad_get_caps_reffed (pad);
/* first check the pad caps, if this is set, we are positively sure it is
* fixed and exactly what the element will produce. */
GST_OBJECT_LOCK (pad);
if ((caps = GST_PAD_CAPS (pad)))
gst_caps_ref (caps);
GST_OBJECT_UNLOCK (pad);
/* then use the getcaps function if we don't have caps. These caps might not
* be fixed in some cases, in which case analyze_new_pad will set up a
* notify::caps signal to continue autoplugging. */
if (caps == NULL)
caps = gst_pad_get_caps_reffed (pad);
analyze_new_pad (dbin, element, pad, caps, chain);
if (caps)
gst_caps_unref (caps);