[FFmpeg-cvslog] asfdec: support reading ID3v2 tags in ASF files
Vladimir Pantelic
git at videolan.org
Sun Feb 10 13:17:24 CET 2013
ffmpeg | branch: master | Vladimir Pantelic <vladoman at gmail.com> | Fri Feb 8 11:06:37 2013 +0100| [f5fac6f77752931347ab302563802dcaa49c2419] | committer: Anton Khirnov
asfdec: support reading ID3v2 tags in ASF files
Yes, these files do exist
Signed-off-by: Vladimir Pantelic <vladoman at gmail.com>
Signed-off-by: Anton Khirnov <anton at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f5fac6f77752931347ab302563802dcaa49c2419
---
Changelog | 1 +
libavformat/asfdec.c | 22 +++++++++++++++++++---
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/Changelog b/Changelog
index c235727..f56c112 100644
--- a/Changelog
+++ b/Changelog
@@ -3,6 +3,7 @@ releases are sorted from youngest to oldest.
version 10:
- av_strnstr
+- support ID3v2 tags in ASF files
version 9:
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 51422ea..0a315d4 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -277,6 +277,16 @@ fail:
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)
{
char *value;
@@ -291,12 +301,18 @@ static void get_tag(AVFormatContext *s, const char *key, int type, int len, int
if (type == 0) { // UTF16-LE
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
uint64_t num = get_value(s->pb, type, type2_size);
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
av_log(s, AV_LOG_DEBUG, "Unsupported GUID value in tag %s.\n", key);
goto finish;
More information about the ffmpeg-cvslog
mailing list