summaryrefslogtreecommitdiff
path: root/libavformat/mp3.c
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2006-06-05 22:41:14 +0000
committerMåns Rullgård <mans@mansr.com>2006-06-05 22:41:14 +0000
commitdc4ed3b14158b5b0a1e12f3e05119906523f2fc2 (patch)
treef2647dc6dd0dfd6768f040343b481706ab115938 /libavformat/mp3.c
parent065ee1ec325ed7d34acf13d0bf319c1c6b457e21 (diff)
probe for mpeg audio
Originally committed as revision 5457 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/mp3.c')
-rw-r--r--libavformat/mp3.c28
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,