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
This commit is contained in:
parent
0132ab80a8
commit
0c41d554e2
@ -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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
(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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user