decodebin2: improve autoplugging
authorWim Taymans <wim.taymans@collabora.co.uk>
Wed, 16 Jun 2010 17:15:20 +0000 (19:15 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Wed, 16 Jun 2010 17:17:05 +0000 (19:17 +0200)
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

index e7013376abb4796093ad7fe8493a249e9711a4c0..5a08dba446a3aaff9e30f99bd8c81bfc9ef809ab 100644 (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);