diff options
author | David Byron <dbyron@dbyron.com> | 2010-09-11 16:29:23 +0000 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at> | 2010-09-11 16:29:23 +0000 |
commit | 0c41d554e2373b1e17c462155fba5ef209e544c1 (patch) | |
tree | ab42f3b27b8cf8e8b2ae32d884b632d826154e23 /libavformat | |
parent | 0132ab80a817cd261966b17280c6a01b91292f17 (diff) | |
download | ffmpeg-0c41d554e2373b1e17c462155fba5ef209e544c1.tar.gz |
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
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/avformat.h | 2 | ||||
-rw-r--r-- | libavformat/id3v2.c | 11 |
2 files changed, 10 insertions, 3 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 441f807b80..ed9dfb36ce 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -23,7 +23,7 @@ #define LIBAVFORMAT_VERSION_MAJOR 52 #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, \ LIBAVFORMAT_VERSION_MINOR, \ diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c index f2515d5206..b51f049c53 100644 --- a/libavformat/id3v2.c +++ b/libavformat/id3v2.c @@ -53,11 +53,17 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic) { int len, ret; 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); if (ret != ID3v2_HEADER_SIZE) return; - if (ff_id3v2_match(buf, magic)) { + found_header = ff_id3v2_match(buf, magic); + if (found_header) { /* parse ID3v2 header */ len = ((buf[6] & 0x7f) << 21) | ((buf[7] & 0x7f) << 14) | @@ -65,8 +71,9 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic) (buf[9] & 0x7f); ff_id3v2_parse(s, len, buf[3], buf[5]); } 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) |