diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-04-18 09:54:25 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-04-18 09:58:54 +0200 |
commit | f0c2a700af8c68eddc82ae8fb76680dc6aa020cc (patch) | |
tree | 9927895c31ea894d48d7ef2f3073b4a956a4b97b | |
parent | 0c06d4164fb9fba2b30553fcb8636c0126224d9c (diff) |
audiodecoder: Ignore caps events if the input caps did not change
-rw-r--r-- | gst-libs/gst/audio/gstaudiodecoder.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index e0c2f40fc..999bc77a4 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -181,7 +181,9 @@ enum typedef struct _GstAudioDecoderContext { - /* input */ + /* last negotiated input caps */ + GstCaps *input_caps; + /* (output) audio format */ GstAudioInfo info; gboolean output_format_changed; @@ -490,6 +492,8 @@ gst_audio_decoder_reset (GstAudioDecoder * dec, gboolean full) if (dec->priv->ctx.allocator) gst_object_unref (dec->priv->ctx.allocator); dec->priv->ctx.allocator = NULL; + + gst_caps_replace (&dec->priv->ctx.input_caps, NULL); } g_queue_foreach (&dec->priv->frames, (GFunc) gst_buffer_unref, NULL); @@ -705,6 +709,13 @@ gst_audio_decoder_sink_setcaps (GstAudioDecoder * dec, GstCaps * caps) GST_DEBUG_OBJECT (dec, "caps: %" GST_PTR_FORMAT, caps); GST_AUDIO_DECODER_STREAM_LOCK (dec); + + if (dec->priv->ctx.input_caps + && gst_caps_is_equal (dec->priv->ctx.input_caps, caps)) { + GST_DEBUG_OBJECT (dec, "Caps did not change, not setting again"); + goto done; + } + /* NOTE pbutils only needed here */ /* TODO maybe (only) upstream demuxer/parser etc should handle this ? */ #if 0 @@ -719,6 +730,10 @@ gst_audio_decoder_sink_setcaps (GstAudioDecoder * dec, GstCaps * caps) if (klass->set_format) res = klass->set_format (dec, caps); + if (res) + gst_caps_replace (&dec->priv->ctx.input_caps, caps); + +done: GST_AUDIO_DECODER_STREAM_UNLOCK (dec); return res; |