summaryrefslogtreecommitdiff
path: root/ext/opus/gstopusdec.c
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-03-23 12:07:52 +0100
committerSebastian Dröge <sebastian@centricular.com>2015-03-23 12:09:09 +0100
commitc2f38cd0547c54018e819291c4877183113ddafc (patch)
treee0ae274547216b2c4cef73e0b6fee6f1112c151c /ext/opus/gstopusdec.c
parentbb5b0f2d127b14f8d80c6df041ea37e6fd1f0475 (diff)
downloadgstreamer-plugins-bad-c2f38cd0547c54018e819291c4877183113ddafc.tar.gz
opusdec: Reset the decoder if the caps change
Diffstat (limited to 'ext/opus/gstopusdec.c')
-rw-r--r--ext/opus/gstopusdec.c13
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) &&