[FFmpeg-devel] [PATCH] avformat/aacdec: resync to the next aac sample on invalid data instead of aborting

Carl Eugen Hoyos ceffmpeg at gmail.com
Sat Jul 20 18:33:26 EEST 2019




> Am 20.07.2019 um 15:13 schrieb James Almer <jamrial at gmail.com>:
> 
> Should fix ticket #6634
> 
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavformat/aacdec.c | 44 +++++++++++++++++++++++++++++---------------
> 1 file changed, 29 insertions(+), 15 deletions(-)
> 
> diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c
> index 8a5450880b..5b00b3f664 100644
> --- a/libavformat/aacdec.c
> +++ b/libavformat/aacdec.c
> @@ -80,10 +80,31 @@ static int adts_aac_probe(const AVProbeData *p)
>         return 0;
> }
> 
> +static int adts_aac_resync(AVFormatContext *s)
> +{
> +    uint16_t state;
> +
> +    // skip data until an ADTS frame is found
> +    state = avio_r8(s->pb);
> +    while (!avio_feof(s->pb) && avio_tell(s->pb) < s->probesize) {
> +        state = (state << 8) | avio_r8(s->pb);
> +        if ((state >> 4) != 0xFFF)
> +            continue;
> +        avio_seek(s->pb, -2, SEEK_CUR);
> +        break;
> +    }
> +    if (s->pb->eof_reached)
> +        return AVERROR_EOF;
> +    if ((state >> 4) != 0xFFF)
> +        return AVERROR_INVALIDDATA;
> +
> +    return 0;
> +}

Given the importance of this fix, splitting it may make sense.

Anyway, thank you!

Carl Eugen


More information about the ffmpeg-devel mailing list