[FFmpeg-devel] [PATCH] Move ID3v1 skip from decoder to demuxer

Janne Grunau janne-ffmpeg
Sat Jan 22 01:08:29 CET 2011


On Fri, Jan 21, 2011 at 11:55:31PM +0100, Cl?ment B?sch wrote:
> On Fri, Jan 21, 2011 at 10:33:48PM +0000, M?ns Rullg?rd wrote:
> > Cl?ment B?sch <ubitux at gmail.com> writes:
> > 
> > > +    if (ret > ID3v1_TAG_SIZE) {
> > > +        uint8_t *buf = &pkt->data[ret - ID3v1_TAG_SIZE];
> > > +        uint32_t v = AV_RB24(buf);
> > > +        if (v == MKBETAG(0, 'T', 'A', 'G'))
> > > +            ret -= ID3v1_TAG_SIZE;
> > > +    }
> > 
> > memcmp(buf, "TAG", 3);
> > 
> 
> Changed.
> 
> -- 
> Cl?ment B.

> From 5528df58bb9b24830b53e055be95b74918b8f0f0 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubitux at gmail.com>
> Date: Fri, 21 Jan 2011 20:40:22 +0100
> Subject: [PATCH] mp3: move ID3v1 skip from decoder to demuxer
> 
> ---
>  libavcodec/mpegaudiodec.c |    8 --------
>  libavformat/mp3dec.c      |    5 +++++
>  2 files changed, 5 insertions(+), 8 deletions(-)
> 
> diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c
> index 76fdffb..769be89 100644
> --- a/libavcodec/mpegaudiodec.c
> +++ b/libavcodec/mpegaudiodec.c
> @@ -27,7 +27,6 @@
>  #include "avcodec.h"
>  #include "get_bits.h"
>  #include "dsputil.h"
> -#include "libavformat/id3v1.h"
>  
>  /*
>   * TODO:
> @@ -2044,13 +2043,6 @@ static int decode_frame(AVCodecContext * avctx,
>  
>      header = AV_RB32(buf);
>      if(ff_mpa_check_header(header) < 0){
> -
> -        if (buf_size == ID3v1_TAG_SIZE
> -            && buf[0] == 'T' && buf[1] == 'A' && buf[2] == 'G') {
> -            *data_size = 0;
> -            return ID3v1_TAG_SIZE;
> -        }
> -
>          av_log(avctx, AV_LOG_ERROR, "Header missing\n");
>          return -1;
>      }
> diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
> index ab6aabe..c06969b 100644
> --- a/libavformat/mp3dec.c
> +++ b/libavformat/mp3dec.c
> @@ -174,6 +174,11 @@ static int mp3_read_packet(AVFormatContext *s, AVPacket *pkt)
>      if (ret <= 0) {
>          return AVERROR(EIO);
>      }
> +
> +    if (ret > ID3v1_TAG_SIZE &&
> +        memcmp(&pkt->data[ret - ID3v1_TAG_SIZE], "TAG", 3) == 0)
> +        ret -= ID3v1_TAG_SIZE;
> +
>      /* note: we need to modify the packet size here to handle the last
>         packet */
>      pkt->size = ret;

ok, queued

Janne



More information about the ffmpeg-devel mailing list