From 6d2621d02c8469132244d7b57ba3e28ddecffed2 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 16 Jun 2010 19:15:20 +0200 Subject: 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. --- gst/playback/gstdecodebin2.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index e7013376a..5a08dba44 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -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); -- cgit v1.2.3