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 <jamr...@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 no more comments from me, seems working with what i tested is it easy to add a fate test ? if so please add one thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I know you won't believe me, but the highest form of Human Excellence is to question oneself and others. -- Socrates
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel