[FFmpeg-devel] [PATCH] avformat/aacdec: add a custom read_packet function

James Almer jamrial at gmail.com
Sun Jun 4 00:14:12 EEST 2017


On 6/3/2017 5:16 PM, Michael Niedermayer wrote:
> On Sat, Jun 03, 2017 at 12:33:33AM -0300, James Almer wrote:
>> Atempt to read and propagate only full ADTS frames and not other data,
>> like id3v1 or APETags at the end of the file.
>>
>> Fixes ticket #6439.
>>
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>>  libavformat/aacdec.c | 42 ++++++++++++++++++++++++++++++++++++++++--
>>  1 file changed, 40 insertions(+), 2 deletions(-)
>>
>> diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c
>> index 5ab5197e33..aee1efe03c 100644
>> --- a/libavformat/aacdec.c
>> +++ b/libavformat/aacdec.c
>> @@ -23,10 +23,11 @@
>>  #include "libavutil/intreadwrite.h"
>>  #include "avformat.h"
>>  #include "internal.h"
>> -#include "rawdec.h"
>>  #include "id3v1.h"
>>  #include "apetag.h"
>>  
>> +#define ADTS_HEADER_SIZE 7
>> +
>>  static int adts_aac_probe(AVProbeData *p)
>>  {
>>      int max_frames = 0, first_frames = 0;
>> @@ -79,6 +80,7 @@ static int adts_aac_probe(AVProbeData *p)
>>  static int adts_aac_read_header(AVFormatContext *s)
>>  {
>>      AVStream *st;
>> +    uint16_t state;
>>  
>>      st = avformat_new_stream(s, NULL);
>>      if (!st)
>> @@ -96,18 +98,54 @@ static int adts_aac_read_header(AVFormatContext *s)
>>          avio_seek(s->pb, cur, SEEK_SET);
>>      }
>>  
>> +    // skip data until the first ADTS frame is found
>> +    state = avio_r8(s->pb);
>> +    while (!avio_feof(s->pb)) {
>> +        state = (state << 8) | avio_r8(s->pb);
>> +        if ((state >> 4) != 0xFFF)
>> +            continue;
>> +        avio_seek(s->pb, -2, SEEK_CUR);
>> +        break;
>> +    }
> 
> this would loop forever with /dev/zero as input

How can i prevent this? Maybe checking a max of
AVFormatContext.probesize or AVFormatContext.format_probesize bytes
before bailing out? Which one if so?

> 
> no more comments from me, seems working with what i tested
> 
> is it easy to add a fate test ? if so please add one

Sure, i'll add one after i push this.

> 
> thx
> 
> [...]
> 
> 
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 



More information about the ffmpeg-devel mailing list