summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorblake tregre <blake@oblong.com>2011-10-31 18:58:34 -0700
committerDavid Schleef <ds@schleef.org>2012-03-17 14:24:51 -0700
commit18475dd0c229aa23a52add001f3d829cf0eb62ba (patch)
treeff21e4d33a887ccf59bb37ea546f35621e85e1c5 /sys
parent409e8dcc903be14dc4254b8106d50635044b8fd9 (diff)
downloadgstreamer-plugins-bad-18475dd0c229aa23a52add001f3d829cf0eb62ba.tar.gz
decklinksrc: make sure we can accept caps before returning true
caps are determined by the plugin's properties, so we should check the incoming caps to see if they agree. Fixes: #667722.
Diffstat (limited to 'sys')
-rw-r--r--sys/decklink/gstdecklinksrc.cpp32
1 files changed, 27 insertions, 5 deletions
diff --git a/sys/decklink/gstdecklinksrc.cpp b/sys/decklink/gstdecklinksrc.cpp
index d2025a3a9..9fa07176a 100644
--- a/sys/decklink/gstdecklinksrc.cpp
+++ b/sys/decklink/gstdecklinksrc.cpp
@@ -819,28 +819,39 @@ static gboolean
gst_decklink_src_audio_src_setcaps (GstPad * pad, GstCaps * caps)
{
GstDecklinkSrc *decklinksrc;
+ GstCaps *pad_caps;
+ gboolean can_intersect;
decklinksrc = GST_DECKLINK_SRC (gst_pad_get_parent (pad));
+ pad_caps = gst_pad_get_caps_reffed (pad);
+ can_intersect = gst_caps_can_intersect (pad_caps, caps);
+ gst_caps_unref (pad_caps);
+
GST_DEBUG_OBJECT (decklinksrc, "setcaps");
gst_object_unref (decklinksrc);
- return TRUE;
+ return can_intersect;
}
static gboolean
gst_decklink_src_audio_src_acceptcaps (GstPad * pad, GstCaps * caps)
{
GstDecklinkSrc *decklinksrc;
+ GstCaps *pad_caps;
+ gboolean can_intersect;
decklinksrc = GST_DECKLINK_SRC (gst_pad_get_parent (pad));
- GST_DEBUG_OBJECT (decklinksrc, "acceptcaps");
+ pad_caps = gst_pad_get_caps_reffed (pad);
+ can_intersect = gst_caps_can_intersect (pad_caps, caps);
+ gst_caps_unref (pad_caps);
+ GST_DEBUG_OBJECT (decklinksrc, "acceptcaps");
gst_object_unref (decklinksrc);
- return TRUE;
+ return can_intersect;
}
static void
@@ -1011,28 +1022,39 @@ static gboolean
gst_decklink_src_video_src_setcaps (GstPad * pad, GstCaps * caps)
{
GstDecklinkSrc *decklinksrc;
+ GstCaps *mode_caps;
+ gboolean can_intersect;
decklinksrc = GST_DECKLINK_SRC (gst_pad_get_parent (pad));
GST_DEBUG_OBJECT (decklinksrc, "setcaps");
+ mode_caps = gst_decklink_mode_get_caps (decklinksrc->mode);
+ can_intersect = gst_caps_can_intersect (mode_caps, caps);
+ gst_caps_unref (mode_caps);
gst_object_unref (decklinksrc);
- return TRUE;
+ return can_intersect;
}
static gboolean
gst_decklink_src_video_src_acceptcaps (GstPad * pad, GstCaps * caps)
{
GstDecklinkSrc *decklinksrc;
+ GstCaps *mode_caps;
+ gboolean can_intersect;
+
decklinksrc = GST_DECKLINK_SRC (gst_pad_get_parent (pad));
GST_DEBUG_OBJECT (decklinksrc, "acceptcaps");
+ mode_caps = gst_decklink_mode_get_caps (decklinksrc->mode);
+ can_intersect = gst_caps_can_intersect (mode_caps, caps);
+ gst_caps_unref (mode_caps);
gst_object_unref (decklinksrc);
- return TRUE;
+ return can_intersect;
}
static void