sys/: Check the caps against our xcontext caps.
authorJulien Moutte <julien@moutte.net>
Mon, 24 Oct 2005 17:04:01 +0000 (17:04 +0000)
committerJulien Moutte <julien@moutte.net>
Mon, 24 Oct 2005 17:04:01 +0000 (17:04 +0000)
Original commit message from CVS:
2005-10-24  Julien MOUTTE  <julien@moutte.net>

* sys/ximage/ximagesink.c: (gst_ximagesink_setcaps):
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps): Check
the caps against our xcontext caps.

ChangeLog
sys/ximage/ximagesink.c
sys/xvimage/xvimagesink.c

index 1164257..d827777 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-24  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_setcaps):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps): Check
+       the caps against our xcontext caps.
+
 2005-10-24  Wim Taymans  <wim@fluendo.com>
 
        * gst-libs/gst/audio/gstbaseaudiosink.c:
index 099acfc..1eafe6c 100644 (file)
@@ -1053,6 +1053,7 @@ gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
   GstXImageSink *ximagesink;
   gboolean ret = TRUE;
   GstStructure *structure;
+  GstCaps *intersection;
   const GValue *par;
   gint new_width, new_height;
 
@@ -1065,6 +1066,15 @@ gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
       "sinkconnect possible caps %" GST_PTR_FORMAT " with given caps %"
       GST_PTR_FORMAT, ximagesink->xcontext->caps, caps);
 
+  intersection = gst_caps_intersect (ximagesink->xcontext->caps, caps);
+  GST_DEBUG_OBJECT (ximagesink, "intersection returned %" GST_PTR_FORMAT,
+      intersection);
+  if (gst_caps_is_empty (intersection)) {
+    return FALSE;
+  }
+
+  gst_caps_unref (intersection);
+
   structure = gst_caps_get_structure (caps, 0);
 
 /* We used to only get the new width and height if we don't 
index e422ed3..c911afc 100644 (file)
@@ -1300,6 +1300,7 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
 {
   GstXvImageSink *xvimagesink;
   GstStructure *structure;
+  GstCaps *intersection;
   guint32 im_format = 0;
   gboolean ret;
   gint video_width, video_height;
@@ -1315,6 +1316,15 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
       "In setcaps. Possible caps %" GST_PTR_FORMAT ", setting caps %"
       GST_PTR_FORMAT, xvimagesink->xcontext->caps, caps);
 
+  intersection = gst_caps_intersect (xvimagesink->xcontext->caps, caps);
+  GST_DEBUG_OBJECT (xvimagesink, "intersection returned %" GST_PTR_FORMAT,
+      intersection);
+  if (gst_caps_is_empty (intersection)) {
+    return FALSE;
+  }
+
+  gst_caps_unref (intersection);
+
   structure = gst_caps_get_structure (caps, 0);
   ret = gst_structure_get_int (structure, "width", &video_width);
   ret &= gst_structure_get_int (structure, "height", &video_height);