aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2018-04-12 17:39:50 -0400
committerVittorio Giovara <vittorio.giovara@gmail.com>2018-04-19 10:49:06 -0400
commitfbfee6adea6166ad87ef46124095abbf079f7bc3 (patch)
tree536137c88de124450343c71e1355be94489e03cc
parent424836505fba3b9ad8120cd86227f832fe35d8f6 (diff)
downloadffmpeg-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.c22
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;
}
}