Commit f5fac6f7 authored by Vladimir Pantelic's avatar Vladimir Pantelic Committed by Anton Khirnov

asfdec: support reading ID3v2 tags in ASF files

Yes, these files do exist
Signed-off-by: 's avatarVladimir Pantelic <vladoman@gmail.com>
Signed-off-by: 's avatarAnton Khirnov <anton@khirnov.net>
parent db0a9432
...@@ -3,6 +3,7 @@ releases are sorted from youngest to oldest. ...@@ -3,6 +3,7 @@ releases are sorted from youngest to oldest.
version 10: version 10:
- av_strnstr - av_strnstr
- support ID3v2 tags in ASF files
version 9: version 9:
......
...@@ -277,6 +277,16 @@ fail: ...@@ -277,6 +277,16 @@ fail:
return ret; return ret;
} }
static void get_id3_tag(AVFormatContext *s, int len)
{
ID3v2ExtraMeta *id3v2_extra_meta = NULL;
ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta);
if (id3v2_extra_meta)
ff_id3v2_parse_apic(s, &id3v2_extra_meta);
ff_id3v2_free_extra_meta(&id3v2_extra_meta);
}
static void get_tag(AVFormatContext *s, const char *key, int type, int len, int type2_size) static void get_tag(AVFormatContext *s, const char *key, int type, int len, int type2_size)
{ {
char *value; char *value;
...@@ -291,12 +301,18 @@ static void get_tag(AVFormatContext *s, const char *key, int type, int len, int ...@@ -291,12 +301,18 @@ static void get_tag(AVFormatContext *s, const char *key, int type, int len, int
if (type == 0) { // UTF16-LE if (type == 0) { // UTF16-LE
avio_get_str16le(s->pb, len, value, 2 * len + 1); avio_get_str16le(s->pb, len, value, 2 * len + 1);
} else if (type == 1) { // byte array
if (!strcmp(key, "WM/Picture")) { // handle cover art
asf_read_picture(s, len);
} else if (!strcmp(key, "ID3")) { // handle ID3 tag
get_id3_tag(s, len);
} else {
av_log(s, AV_LOG_VERBOSE, "Unsupported byte array in tag %s.\n", key);
}
goto finish;
} else if (type > 1 && type <= 5) { // boolean or DWORD or QWORD or WORD } else if (type > 1 && type <= 5) { // boolean or DWORD or QWORD or WORD
uint64_t num = get_value(s->pb, type, type2_size); uint64_t num = get_value(s->pb, type, type2_size);
snprintf(value, len, "%"PRIu64, num); snprintf(value, len, "%"PRIu64, num);
} else if (type == 1 && !strcmp(key, "WM/Picture")) { // handle cover art
asf_read_picture(s, len);
goto finish;
} else if (type == 6) { // (don't) handle GUID } else if (type == 6) { // (don't) handle GUID
av_log(s, AV_LOG_DEBUG, "Unsupported GUID value in tag %s.\n", key); av_log(s, AV_LOG_DEBUG, "Unsupported GUID value in tag %s.\n", key);
goto finish; goto finish;
......
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