Commit 0c41d554 authored by David Byron's avatar David Byron Committed by Carl Eugen Hoyos

Read all id3v2 tags at the beginning of mp3 files.

Patch by David Byron, dbyron dbyron com

Originally committed as revision 25105 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 0132ab80
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#define LIBAVFORMAT_VERSION_MAJOR 52 #define LIBAVFORMAT_VERSION_MAJOR 52
#define LIBAVFORMAT_VERSION_MINOR 78 #define LIBAVFORMAT_VERSION_MINOR 78
#define LIBAVFORMAT_VERSION_MICRO 4 #define LIBAVFORMAT_VERSION_MICRO 5
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \ LIBAVFORMAT_VERSION_MINOR, \
......
...@@ -53,11 +53,17 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic) ...@@ -53,11 +53,17 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic)
{ {
int len, ret; int len, ret;
uint8_t buf[ID3v2_HEADER_SIZE]; uint8_t buf[ID3v2_HEADER_SIZE];
int found_header;
int64_t off;
do {
/* save the current offset in case there's nothing to read/skip */
off = url_ftell(s->pb);
ret = get_buffer(s->pb, buf, ID3v2_HEADER_SIZE); ret = get_buffer(s->pb, buf, ID3v2_HEADER_SIZE);
if (ret != ID3v2_HEADER_SIZE) if (ret != ID3v2_HEADER_SIZE)
return; return;
if (ff_id3v2_match(buf, magic)) { found_header = ff_id3v2_match(buf, magic);
if (found_header) {
/* parse ID3v2 header */ /* parse ID3v2 header */
len = ((buf[6] & 0x7f) << 21) | len = ((buf[6] & 0x7f) << 21) |
((buf[7] & 0x7f) << 14) | ((buf[7] & 0x7f) << 14) |
...@@ -65,8 +71,9 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic) ...@@ -65,8 +71,9 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic)
(buf[9] & 0x7f); (buf[9] & 0x7f);
ff_id3v2_parse(s, len, buf[3], buf[5]); ff_id3v2_parse(s, len, buf[3], buf[5]);
} else { } else {
url_fseek(s->pb, 0, SEEK_SET); url_fseek(s->pb, off, SEEK_SET);
} }
} while (found_header);
} }
static unsigned int get_size(ByteIOContext *s, int len) static unsigned int get_size(ByteIOContext *s, int len)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment