diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index d9bfe95b4d..f8fb8b7ff2 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -2985,15 +2985,25 @@ gst_audio_decoder_allocate_output_buffer (GstAudioDecoder * dec, gsize size) if (G_UNLIKELY (dec->priv->ctx.output_format_changed || (GST_AUDIO_INFO_IS_VALID (&dec->priv->ctx.info) && gst_pad_check_reconfigure (dec->srcpad)))) { - if (!gst_audio_decoder_negotiate (dec)) - goto done; + if (!gst_audio_decoder_negotiate (dec)) { + GST_INFO_OBJECT (dec, "Failed to negotiate, fallback allocation"); + goto fallback; + } } buffer = gst_buffer_new_allocate (dec->priv->ctx.allocator, size, &dec->priv->ctx.params); + if (!buffer) { + GST_INFO_OBJECT (dec, "couldn't allocate output buffer"); + goto fallback; + } -done: + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); + + return buffer; +fallback: + buffer = gst_buffer_new_allocate (NULL, size, NULL); GST_AUDIO_DECODER_STREAM_UNLOCK (dec); return buffer; diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c index 9ed59242dc..3bf6b22cd8 100644 --- a/gst-libs/gst/audio/gstaudioencoder.c +++ b/gst-libs/gst/audio/gstaudioencoder.c @@ -2726,15 +2726,26 @@ gst_audio_encoder_allocate_output_buffer (GstAudioEncoder * enc, gsize size) if (G_UNLIKELY (enc->priv->ctx.output_caps_changed || (enc->priv->ctx.caps && gst_pad_check_reconfigure (enc->srcpad)))) { - if (!gst_audio_encoder_negotiate (enc)) - goto done; + if (!gst_audio_encoder_negotiate (enc)) { + GST_INFO_OBJECT (enc, "Failed to negotiate, fallback allocation"); + goto fallback; + } } buffer = gst_buffer_new_allocate (enc->priv->ctx.allocator, size, &enc->priv->ctx.params); + if (!buffer) { + GST_INFO_OBJECT (enc, "couldn't allocate output buffer"); + goto fallback; + } -done: + GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); + + return buffer; + +fallback: + buffer = gst_buffer_new_allocate (NULL, size, NULL); GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); return buffer;