summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2013-04-18 09:54:25 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2013-04-18 09:58:54 +0200
commitf0c2a700af8c68eddc82ae8fb76680dc6aa020cc (patch)
tree9927895c31ea894d48d7ef2f3073b4a956a4b97b
parent0c06d4164fb9fba2b30553fcb8636c0126224d9c (diff)
audiodecoder: Ignore caps events if the input caps did not change
-rw-r--r--gst-libs/gst/audio/gstaudiodecoder.c17
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;