From 420e2298294e30a53642962c55ed2d133339e876 Mon Sep 17 00:00:00 2001 From: Sebastian Dröge Date: Thu, 12 Sep 2013 09:42:36 +0200 Subject: audioencoder/decoder: Mark pads as requiring reconfiguration again if negotiation fails Otherwise we might end up in non-optimal configuration, especially when a flush happened during reconfiguration. --- gst-libs/gst/audio/gstaudiodecoder.c | 2 ++ gst-libs/gst/audio/gstaudioencoder.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index 443621dfe..d4e158660 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -1036,6 +1036,7 @@ gst_audio_decoder_finish_frame (GstAudioDecoder * dec, GstBuffer * buf, (GST_AUDIO_INFO_IS_VALID (&ctx->info) && gst_pad_check_reconfigure (dec->srcpad)))) { if (!gst_audio_decoder_negotiate (dec)) { + gst_pad_mark_reconfigure (dec->srcpad); if (GST_PAD_IS_FLUSHING (dec->srcpad)) ret = GST_FLOW_FLUSHING; else @@ -3001,6 +3002,7 @@ gst_audio_decoder_allocate_output_buffer (GstAudioDecoder * dec, gsize size) && gst_pad_check_reconfigure (dec->srcpad)))) { if (!gst_audio_decoder_negotiate (dec)) { GST_INFO_OBJECT (dec, "Failed to negotiate, fallback allocation"); + gst_pad_mark_reconfigure (dec->srcpad); goto fallback; } } diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c index 576dafd9e..375de507d 100644 --- a/gst-libs/gst/audio/gstaudioencoder.c +++ b/gst-libs/gst/audio/gstaudioencoder.c @@ -627,6 +627,7 @@ gst_audio_encoder_finish_frame (GstAudioEncoder * enc, GstBuffer * buf, if (G_UNLIKELY (ctx->output_caps_changed || gst_pad_check_reconfigure (enc->srcpad))) { if (!gst_audio_encoder_negotiate (enc)) { + gst_pad_mark_reconfigure (enc->srcpad); if (GST_PAD_IS_FLUSHING (enc->srcpad)) ret = GST_FLOW_FLUSHING; else @@ -2714,6 +2715,7 @@ gst_audio_encoder_allocate_output_buffer (GstAudioEncoder * enc, gsize size) && gst_pad_check_reconfigure (enc->srcpad)))) { if (!gst_audio_encoder_negotiate (enc)) { GST_INFO_OBJECT (enc, "Failed to negotiate, fallback allocation"); + gst_pad_mark_reconfigure (enc->srcpad); goto fallback; } } -- cgit v1.2.3