gst/gstghostpad.c: Filter the proxied caps against the padtemplate if we have one.
authormrcgran <mrc.gran@gmail.com>
Mon, 2 Oct 2006 10:06:17 +0000 (10:06 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Mon, 2 Oct 2006 10:06:17 +0000 (10:06 +0000)
Original commit message from CVS:
Patch by: mrcgran <mrc.gran at gmail dot com>
* gst/gstghostpad.c: (gst_proxy_pad_do_getcaps):
Filter the proxied caps against the padtemplate if we have one.
* gst/gstquery.c: (gst_query_new_segment):
Add include for gstinfo.h so that compilation with
-DGST_DISABLE_GST_DEBUG works again. Fixes #358436.

ChangeLog
gst/gstghostpad.c
gst/gstquery.c

index bb7e02d1da28cdf3e5464ef6fcc463407a927703..198cf57401dd233ef98dfac48b17cb74cbd4db3e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2006-10-02  Wim Taymans  <wim@fluendo.com>
+
+       Patch by: mrcgran <mrc.gran at gmail dot com>
+
+       * gst/gstghostpad.c: (gst_proxy_pad_do_getcaps):
+       Filter the proxied caps against the padtemplate if we have one.
+
+       * gst/gstquery.c: (gst_query_new_segment):
+       Add include for gstinfo.h so that compilation with
+       -DGST_DISABLE_GST_DEBUG works again. Fixes #358436.
+
 2006-10-02  Wim Taymans  <wim@fluendo.com>
 
        Patch by: Alessandro Decina  <alessandro at nnva org>
index 50c1474e13cf733b82b23ceda75c99eeb5b1d4e9..90af4c98868bf56d25d7ab9fd1c7f1ff765c8a6a 100644 (file)
@@ -45,6 +45,7 @@
  */
 
 #include "gst_private.h"
+#include "gstinfo.h"
 
 #include "gstghostpad.h"
 
@@ -218,16 +219,30 @@ gst_proxy_pad_do_getcaps (GstPad * pad)
 {
   GstPad *target = gst_proxy_pad_get_target (pad);
   GstCaps *res;
+  GstPadTemplate *templ = GST_PAD_PAD_TEMPLATE (pad);
 
   if (target) {
     /* if we have a real target, proxy the call */
-    GST_DEBUG_OBJECT (pad, "get caps of target");
     res = gst_pad_get_caps (target);
     gst_object_unref (target);
-  } else {
-    GstPadTemplate *templ = GST_PAD_PAD_TEMPLATE (pad);
 
-    /* else, if we have a template, use that */
+    GST_DEBUG_OBJECT (pad, "get caps of target: %" GST_PTR_FORMAT, res);
+
+    /* filter against the template */
+    if (templ && res) {
+      GstCaps *filt, *tmp;
+
+      filt = GST_PAD_TEMPLATE_CAPS (templ);
+      if (filt) {
+        tmp = gst_caps_intersect (filt, res);
+        gst_caps_unref (res);
+        res = tmp;
+        GST_DEBUG_OBJECT (pad,
+            "filtered against template gives %" GST_PTR_FORMAT, res);
+      }
+    }
+  } else {
+    /* else, if we have a template, use its caps. */
     if (templ) {
       res = GST_PAD_TEMPLATE_CAPS (templ);
       GST_DEBUG_OBJECT (pad,
index 4b7ca5771155edb569abcadf58d6567ede6b466d..f03a9e5724e2575e66ce2ce1127877022fcf122e 100644 (file)
  * Last reviewed on 2006-02-14 (0.10.4)
  */
 
-#include "gst_private.h"
 #include <string.h>
+
+#include "gst_private.h"
+#include "gstinfo.h"
 #include "gstquery.h"
 #include "gstvalue.h"
 #include "gstenumtypes.h"