diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-03-23 12:07:52 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-03-23 12:09:09 +0100 |
commit | c2f38cd0547c54018e819291c4877183113ddafc (patch) | |
tree | e0ae274547216b2c4cef73e0b6fee6f1112c151c | |
parent | bb5b0f2d127b14f8d80c6df041ea37e6fd1f0475 (diff) |
opusdec: Reset the decoder if the caps change
-rw-r--r-- | ext/opus/gstopusdec.c | 13 |
1 files changed, 13 insertions, 0 deletions
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) && |