# HG changeset patch # User bcoudurier # Date 1209132208 0 # Node ID bf5f112efcff9052ccfe317e888b8e875bee69a9 # Parent ffd1506d3e3b4bd375b4f6feccbad4dfdf619e0f parse mpeg4audio config to correctly detect mp3on4, fix iso mp3on4 reference files diff -r ffd1506d3e3b -r bf5f112efcff mov.c --- a/mov.c Fri Apr 25 13:56:08 2008 +0000 +++ b/mov.c Fri Apr 25 14:03:28 2008 +0000 @@ -27,6 +27,7 @@ #include "riff.h" #include "isom.h" #include "dv.h" +#include "mpeg4audio.h" #ifdef CONFIG_ZLIB #include @@ -361,6 +362,14 @@ #define MP4DecConfigDescrTag 0x04 #define MP4DecSpecificDescrTag 0x05 +static const AVCodecTag mp4_audio_types[] = { + { CODEC_ID_MP3ON4, 29 }, /* old mp3on4 draft */ + { CODEC_ID_MP3ON4, 32 }, /* layer 1 */ + { CODEC_ID_MP3ON4, 33 }, /* layer 2 */ + { CODEC_ID_MP3ON4, 34 }, /* layer 3 */ + { CODEC_ID_NONE, 0 }, +}; + static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) { AVStream *st = c->fc->streams[c->fc->nb_streams-1]; @@ -394,9 +403,13 @@ return AVERROR(ENOMEM); get_buffer(pb, st->codec->extradata, len); st->codec->extradata_size = len; - /* from mplayer */ - if ((*st->codec->extradata >> 3) == 29) { - st->codec->codec_id = CODEC_ID_MP3ON4; + if (st->codec->codec_id == CODEC_ID_AAC) { + MPEG4AudioConfig cfg; + ff_mpeg4audio_get_config(&cfg, st->codec->extradata, + st->codec->extradata_size); + if (!(st->codec->codec_id = codec_get_id(mp4_audio_types, + cfg.object_type))) + st->codec->codec_id = CODEC_ID_AAC; } } }