From 21a9a8985163c6cdadb673af369401f974a8afe9 Mon Sep 17 00:00:00 2001 From: Vivia Nikolaidou Date: Wed, 1 Feb 2017 15:13:32 +0200 Subject: [PATCH] decklinkaudiosrc: Fix get_caps returning EMPTY If get_caps is called before negotiation, channels_found will be 0 and therefore won't intersect with the template caps. https://bugzilla.gnome.org/show_bug.cgi?id=778028 --- sys/decklink/gstdecklinkaudiosrc.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp index 93e16d168c..1fc1a696ca 100644 --- a/sys/decklink/gstdecklinkaudiosrc.cpp +++ b/sys/decklink/gstdecklinkaudiosrc.cpp @@ -429,9 +429,17 @@ gst_decklink_audio_src_get_caps (GstBaseSrc * bsrc, GstCaps * filter) GstCaps *channel_filter, *templ; templ = gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD (bsrc)); - channel_filter = - gst_caps_new_simple ("audio/x-raw", "channels", G_TYPE_INT, - self->channels_found, NULL); + if (self->channels_found > 0) { + channel_filter = + gst_caps_new_simple ("audio/x-raw", "channels", G_TYPE_INT, + self->channels_found, NULL); + } else if (self->channels > 0) { + channel_filter = + gst_caps_new_simple ("audio/x-raw", "channels", G_TYPE_INT, + self->channels, NULL); + } else { + channel_filter = gst_caps_new_empty_simple ("audio/x-raw"); + } caps = gst_caps_intersect (channel_filter, templ); gst_caps_unref (channel_filter); gst_caps_unref (templ);