[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