pad: don't intersect with any in proxy_pad_get_caps
authorStefan Kost <ensonic@users.sf.net>
Thu, 1 Oct 2009 14:39:45 +0000 (17:39 +0300)
committerStefan Kost <ensonic@users.sf.net>
Wed, 7 Oct 2009 07:59:54 +0000 (10:59 +0300)
We initialize the caps with any and if a pad has NULL caps, just skip it instead
of intersecting with any. Also add branch prediction here.

gst/gstutils.c

index 0897432..dc9b793 100644 (file)
@@ -2630,16 +2630,16 @@ static gboolean
 intersect_caps_func (GstPad * pad, GValue * ret, GstPad * orig)
 {
   /* skip the pad, the request came from */
-  if (pad != orig) {
+  if (G_UNLIKELY (pad != orig)) {
     GstCaps *peercaps, *existing;
 
     existing = g_value_get_pointer (ret);
     peercaps = gst_pad_peer_get_caps (pad);
-    if (peercaps == NULL)
-      peercaps = gst_caps_new_any ();
-    g_value_set_pointer (ret, gst_caps_intersect (existing, peercaps));
-    gst_caps_unref (existing);
-    gst_caps_unref (peercaps);
+    if (G_UNLIKELY (peercaps)) {
+      g_value_set_pointer (ret, gst_caps_intersect (existing, peercaps));
+      gst_caps_unref (existing);
+      gst_caps_unref (peercaps);
+    }
   }
   gst_object_unref (pad);
   return TRUE;