diff options
author | Måns Rullgård <mans@mansr.com> | 2006-06-05 22:41:14 +0000 |
---|---|---|
committer | Måns Rullgård <mans@mansr.com> | 2006-06-05 22:41:14 +0000 |
commit | dc4ed3b14158b5b0a1e12f3e05119906523f2fc2 (patch) | |
tree | f2647dc6dd0dfd6768f040343b481706ab115938 | |
parent | 065ee1ec325ed7d34acf13d0bf319c1c6b457e21 (diff) | |
download | ffmpeg-dc4ed3b14158b5b0a1e12f3e05119906523f2fc2.tar.gz |
probe for mpeg audio
Originally committed as revision 5457 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/mp3.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/libavformat/mp3.c b/libavformat/mp3.c index f09bfebd1a..37bb3251be 100644 --- a/libavformat/mp3.c +++ b/libavformat/mp3.c @@ -240,6 +240,32 @@ static void id3_create_tag(AVFormatContext *s, uint8_t *buf) } /* mp3 read */ + +static int mp3_read_probe(AVProbeData *p) +{ + int d; + + if(p->buf_size < 4) + return 0; + + if(p->buf[0] == 'I' && p->buf[1] == 'D' && p->buf[2] == '3' && + p->buf[3] < 5) + return AVPROBE_SCORE_MAX; + + if(p->buf[0] != 0xff) + return 0; + + d = p->buf[1]; + if((d & 0xe0) != 0xe0 || ((d & 0x18) == 0x08 || (d & 0x06) == 0)) + return 0; + + d = p->buf[2]; + if((d & 0xf0) == 0xf0 || (d & 0x0c) == 0x0c) + return 0; + + return AVPROBE_SCORE_MAX; +} + static int mp3_read_header(AVFormatContext *s, AVFormatParameters *ap) { @@ -346,7 +372,7 @@ AVInputFormat mp3_iformat = { "mp3", "MPEG audio", 0, - NULL, + mp3_read_probe, mp3_read_header, mp3_read_packet, mp3_read_close, |