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:36 +0200 |
commit | d1a08af605ed350adc7fffbbd5422a26590ba090 (patch) | |
tree | 59f11f84b26eebafcbee7113fbf256d97dbfe4e4 | |
parent | cdfc05ec4d9abb4403aa0a33f95702c5c6dcc053 (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 e8908a1dc..53d1aa125 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; |