diff options
author | blake tregre <blake@oblong.com> | 2011-10-31 18:58:34 -0700 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2012-03-17 14:24:51 -0700 |
commit | 18475dd0c229aa23a52add001f3d829cf0eb62ba (patch) | |
tree | ff21e4d33a887ccf59bb37ea546f35621e85e1c5 /sys | |
parent | 409e8dcc903be14dc4254b8106d50635044b8fd9 (diff) | |
download | gstreamer-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.cpp | 32 |
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 |