[FFmpeg-devel] [PATCH 4/7] avcocdec/mpegaudio_parser: add MP3 ADU headers parser

Thomas Volkert silvo at gmx.net
Thu Feb 12 22:21:11 CET 2015


On 02/08/2015 10:22 PM, Gilles Chanteperdrix wrote:
> ---
>   libavcodec/mpegaudio_parser.c   | 14 ++++++++++++--
>   libavcodec/mpegaudiodecheader.c |  3 ++-
>   2 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/mpegaudio_parser.c b/libavcodec/mpegaudio_parser.c
> index 79dbf63..42f4706 100644
> --- a/libavcodec/mpegaudio_parser.c
> +++ b/libavcodec/mpegaudio_parser.c
> @@ -64,7 +64,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
>           }else{
>               while(i<buf_size){
>                   int ret, sr, channels, bit_rate, frame_size;
> -                enum AVCodecID codec_id;
> +                enum AVCodecID codec_id = avctx->codec_id;
>   
>                   state= (state<<8) + buf[i++];
>   
> @@ -90,6 +90,16 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
>                               avctx->bit_rate += (bit_rate - avctx->bit_rate) / (s->header_count - header_threshold);
>                           }
>                       }
> +
> +                    if (s1->flags & PARSER_FLAG_COMPLETE_FRAMES) {
> +                        s->frame_size = 0;
> +                        next = buf_size;
> +                    } else if (codec_id == AV_CODEC_ID_MP3ADU) {
> +                        av_log(avctx, AV_LOG_ERROR,
> +                            "MP3ADU full parser not implemented");
> +                        return AVERROR_PATCHWELCOME;
> +                    }
> +
>                       break;
>                   }
>               }
> @@ -110,7 +120,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
>   
>   
>   AVCodecParser ff_mpegaudio_parser = {
> -    .codec_ids      = { AV_CODEC_ID_MP1, AV_CODEC_ID_MP2, AV_CODEC_ID_MP3 },
> +    .codec_ids      = { AV_CODEC_ID_MP1, AV_CODEC_ID_MP2, AV_CODEC_ID_MP3, AV_CODEC_ID_MP3ADU },
>       .priv_data_size = sizeof(MpegAudioParseContext),
>       .parser_parse   = mpegaudio_parse,
>       .parser_close   = ff_parse_close,
> diff --git a/libavcodec/mpegaudiodecheader.c b/libavcodec/mpegaudiodecheader.c
> index 5db1957..6af6e4b 100644
> --- a/libavcodec/mpegaudiodecheader.c
> +++ b/libavcodec/mpegaudiodecheader.c
> @@ -134,7 +134,8 @@ int avpriv_mpa_decode_header2(uint32_t head, int *sample_rate, int *channels, in
>           break;
>       default:
>       case 3:
> -        *codec_id = AV_CODEC_ID_MP3;
> +        if (*codec_id != AV_CODEC_ID_MP3ADU)
> +            *codec_id = AV_CODEC_ID_MP3;
>           if (s->lsf)
>               *frame_size = 576;
>           else

I would merge this with the next patch which adds the corresponding RTP 
parser for this format.

Best regards,
Thomas.


More information about the ffmpeg-devel mailing list