From 65662c89978df493c2005c87bcd375db9178b51b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 23 Mar 2015 12:07:52 +0100 Subject: opusdec: Reset the decoder if the caps change --- ext/opus/gstopusdec.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c index 2b7bcb283..7cffd175b 100644 --- a/ext/opus/gstopusdec.c +++ b/ext/opus/gstopusdec.c @@ -541,9 +541,22 @@ gst_opus_dec_set_format (GstAudioDecoder * bdec, GstCaps * caps) gboolean ret = TRUE; GstStructure *s; const GValue *streamheader; + GstCaps *old_caps; GST_DEBUG_OBJECT (dec, "set_format: %" GST_PTR_FORMAT, caps); + if ((old_caps = gst_pad_get_current_caps (GST_AUDIO_DECODER_SINK_PAD (bdec)))) { + if (gst_caps_is_equal (caps, old_caps)) { + gst_caps_unref (old_caps); + GST_DEBUG_OBJECT (dec, "caps didn't change"); + goto done; + } + + GST_DEBUG_OBJECT (dec, "caps have changed, resetting decoder"); + gst_opus_dec_reset (dec); + gst_caps_unref (old_caps); + } + s = gst_caps_get_structure (caps, 0); if ((streamheader = gst_structure_get_value (s, "streamheader")) && G_VALUE_HOLDS (streamheader, GST_TYPE_ARRAY) && -- cgit v1.2.1