lavc: Relax API strictness in avcodec_decode_audio3 with a custom get_buffer()
Do not fail audio decoding with avcodec_decode_audio3 if user has set a
custom get_buffer. Strictly speaking, this was never allowed by the API,
but it seems that some software packages did so anyways. In order to
unbreak applications (cf. http://bugs.debian.org/655890), this change
clarifies the API and overrides the custom get_buffer() with the defaults.
This change is inspired by a similar
commit (c3846e3eba
) in FFmpeg.
Signed-off-by: Reinhard Tartler <siretart@tauware.de>
This commit is contained in:
@@ -933,9 +933,11 @@ int attribute_align_arg avcodec_decode_audio3(AVCodecContext *avctx, int16_t *sa
|
||||
int ret, got_frame = 0;
|
||||
|
||||
if (avctx->get_buffer != avcodec_default_get_buffer) {
|
||||
av_log(avctx, AV_LOG_ERROR, "A custom get_buffer() cannot be used with "
|
||||
"avcodec_decode_audio3()\n");
|
||||
return AVERROR(EINVAL);
|
||||
av_log(avctx, AV_LOG_ERROR, "Custom get_buffer() for use with"
|
||||
"avcodec_decode_audio3() detected. Overriding with avcodec_default_get_buffer\n");
|
||||
av_log(avctx, AV_LOG_ERROR, "Please port your application to "
|
||||
"avcodec_decode_audio4()\n");
|
||||
avctx->get_buffer = avcodec_default_get_buffer;
|
||||
}
|
||||
|
||||
ret = avcodec_decode_audio4(avctx, &frame, &got_frame, avpkt);
|
||||
|
Reference in New Issue
Block a user