diff options
author | Vivia Nikolaidou <vivia@toolsonair.com> | 2016-10-21 14:01:11 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-11-01 19:39:36 +0200 |
commit | ab991db7edb0cc63ee4ee2a6da8487d9561942b8 (patch) | |
tree | b2f9e286db776055177b0eab10dfa64859ff3ebe /sys | |
parent | 9a2df5dc3b72470b2f7fdc7961be93a08bbc3971 (diff) | |
download | gstreamer-plugins-bad-ab991db7edb0cc63ee4ee2a6da8487d9561942b8.tar.gz |
decklinkaudiosrc: Ignore channel-mask when checking set_caps compatibility
channel-mask doesn't matter in decklinkaudiosrc, and differences in it
can cause caps negotiations to fail without a real reason.
https://bugzilla.gnome.org/show_bug.cgi?id=773313
Diffstat (limited to 'sys')
-rw-r--r-- | sys/decklink/gstdecklinkaudiosrc.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp index 5024bb558..b14c5d469 100644 --- a/sys/decklink/gstdecklinkaudiosrc.cpp +++ b/sys/decklink/gstdecklinkaudiosrc.cpp @@ -278,14 +278,24 @@ gst_decklink_audio_src_set_caps (GstBaseSrc * bsrc, GstCaps * caps) GST_DEBUG_OBJECT (self, "Setting caps %" GST_PTR_FORMAT, caps); if ((current_caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (bsrc)))) { + GstCaps *curcaps_cp; + GstStructure *cur_st, *caps_st; + GST_DEBUG_OBJECT (self, "Pad already has caps %" GST_PTR_FORMAT, caps); - if (!gst_caps_is_equal (caps, current_caps)) { - GST_ERROR_OBJECT (self, "New caps are not equal to old caps"); + curcaps_cp = gst_caps_make_writable (current_caps); + cur_st = gst_caps_get_structure (curcaps_cp, 0); + caps_st = gst_caps_get_structure (caps, 0); + gst_structure_remove_field (cur_st, "channel-mask"); + + if (!gst_structure_can_intersect (caps_st, cur_st)) { + GST_ERROR_OBJECT (self, "New caps are not compatible with old caps"); gst_caps_unref (current_caps); + gst_caps_unref (curcaps_cp); return FALSE; } else { gst_caps_unref (current_caps); + gst_caps_unref (curcaps_cp); return TRUE; } } |