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

Michael Niedermayer michael at niedermayer.cc
Sat Jun 3 23:16:42 EEST 2017


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

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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170603/d1635f73/attachment.sig>


More information about the ffmpeg-devel mailing list