[FFmpeg-devel] [PATCH] aac: Rework extradata parsing code

wm4 nfxjfg at googlemail.com
Tue Apr 17 23:05:03 EEST 2018


On Tue, 17 Apr 2018 11:47:00 -0400
Vittorio Giovara <vittorio.giovara at gmail.com> wrote:

> - 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
> ---
> 
> ping
> 
> 
>  libavcodec/aacdec_template.c | 22 ++++++++--------------
>  1 file 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;
>          }
>      }
> 

Generally LGTM. Is there a proper test for this? (Apparently not...)


More information about the ffmpeg-devel mailing list