diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2018-04-12 17:39:50 -0400 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2018-04-19 10:49:06 -0400 |
commit | fbfee6adea6166ad87ef46124095abbf079f7bc3 (patch) | |
tree | 536137c88de124450343c71e1355be94489e03cc | |
parent | 424836505fba3b9ad8120cd86227f832fe35d8f6 (diff) | |
download | ffmpeg-fbfee6adea6166ad87ef46124095abbf079f7bc3.tar.gz |
aac: Rework extradata parsing code
- enable the parsing code
- use the new buffer instead of replacing the context one
- do not push/pop configuration, just discard the exiting one
- propagate errors correctly
-rw-r--r-- | libavcodec/aacdec_template.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index cf97181092..0c899285dd 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -3324,20 +3324,14 @@ static int aac_decode_frame(AVCodecContext *avctx, void *data, AV_PKT_DATA_JP_DUALMONO, &jp_dualmono_size); - if (new_extradata && 0) { - av_free(avctx->extradata); - avctx->extradata = av_mallocz(new_extradata_size + - AV_INPUT_BUFFER_PADDING_SIZE); - if (!avctx->extradata) - return AVERROR(ENOMEM); - avctx->extradata_size = new_extradata_size; - memcpy(avctx->extradata, new_extradata, new_extradata_size); - push_output_configuration(ac); - if (decode_audio_specific_config(ac, ac->avctx, &ac->oc[1].m4ac, - avctx->extradata, - avctx->extradata_size*8LL, 1) < 0) { - pop_output_configuration(ac); - return AVERROR_INVALIDDATA; + if (new_extradata) { + /* discard previous configuration */ + ac->oc[1].status = OC_NONE; + err = decode_audio_specific_config(ac, ac->avctx, &ac->oc[1].m4ac, + new_extradata, + new_extradata_size * 8LL, 1); + if (err < 0) { + return err; } } |