summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2013-09-12 09:42:36 +0200
committerSebastian Dröge <slomo@circular-chaos.org>2013-09-12 09:42:36 +0200
commit420e2298294e30a53642962c55ed2d133339e876 (patch)
treee259687c0a3b8d3215deb031e0b132c79f4668c5
parent35ee4b056b043ff38cd2d55d34bc16aedbef4f67 (diff)
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.
-rw-r--r--gst-libs/gst/audio/gstaudiodecoder.c2
-rw-r--r--gst-libs/gst/audio/gstaudioencoder.c2
2 files changed, 4 insertions, 0 deletions
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;
}
}