gstpad: Assume pads are compatible if we don't have templates
authorEdward Hervey <bilboed@bilboed.com>
Tue, 20 Jul 2010 18:49:12 +0000 (20:49 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Tue, 20 Jul 2010 18:52:35 +0000 (20:52 +0200)
This is the same behaviour as if we had a pad template caps of
GST_CAPS_ANY on any of the pads (i.e. the actual check will be done
during caps negotiation).

gst/gstpad.c

index 14aebc9..ae742c1 100644 (file)
@@ -1796,12 +1796,16 @@ gst_pad_link_check_compatible_unlocked (GstPad * src, GstPad * sink,
     srccaps = gst_pad_get_caps_unlocked (src);
     sinkcaps = gst_pad_get_caps_unlocked (sink);
   } else {
-    if (GST_PAD_PAD_TEMPLATE (src))
-      srccaps =
-          gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (src)));
-    if (GST_PAD_PAD_TEMPLATE (sink))
-      sinkcaps =
-          gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (sink)));
+    /* If one of the two pads doesn't have a template, consider the intersection
+     * as valid.*/
+    if (G_UNLIKELY ((GST_PAD_PAD_TEMPLATE (src) == NULL)
+            || (GST_PAD_PAD_TEMPLATE (sink) == NULL))) {
+      compatible = TRUE;
+      goto done;
+    }
+    srccaps = gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (src)));
+    sinkcaps =
+        gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (sink)));
   }
 
   GST_CAT_DEBUG (GST_CAT_CAPS, "src caps %" GST_PTR_FORMAT, srccaps);