From d69cf5631a422b4b09d830ed04f8bf2f1dfcde89 Mon Sep 17 00:00:00 2001 From: Julien Moutte Date: Mon, 24 Oct 2005 17:04:01 +0000 Subject: [PATCH] sys/: Check the caps against our xcontext caps. Original commit message from CVS: 2005-10-24 Julien MOUTTE * sys/ximage/ximagesink.c: (gst_ximagesink_setcaps): * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps): Check the caps against our xcontext caps. --- ChangeLog | 6 ++++++ sys/ximage/ximagesink.c | 10 ++++++++++ sys/xvimage/xvimagesink.c | 10 ++++++++++ 3 files changed, 26 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1164257..d827777 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-10-24 Julien MOUTTE + + * 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 * gst-libs/gst/audio/gstbaseaudiosink.c: diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c index 099acfc..1eafe6c 100644 --- a/sys/ximage/ximagesink.c +++ b/sys/ximage/ximagesink.c @@ -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 diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index e422ed3..c911afc 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -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); -- 2.7.4