summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Pantelic <vladoman@gmail.com>2013-02-06 14:35:27 +0100
committerAnton Khirnov <anton@khirnov.net>2013-02-09 18:57:21 +0100
commit84b721db366c0734fdfd23c8daaa7da7da21f761 (patch)
tree07bb53f3077771105b4c57927891d4c0deaa434b
parent61f9ad2dfcb3f98b7ac5777d19d0e7b61d0be01e (diff)
asfdec: also read Metadata Library Object
In some ASF files this objects holds cover art and other tags. Compared to Metadata Object it can also hold GUIDs, but we ignore these for now. Signed-off-by: Vladimir Pantelic <vladoman@gmail.com> Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r--libavformat/asf.c4
-rw-r--r--libavformat/asf.h1
-rw-r--r--libavformat/asfdec.c6
3 files changed, 11 insertions, 0 deletions
diff --git a/libavformat/asf.c b/libavformat/asf.c
index eda8bd0e0c..52afa097df 100644
--- a/libavformat/asf.c
+++ b/libavformat/asf.c
@@ -109,6 +109,10 @@ const ff_asf_guid ff_asf_metadata_header = {
0xea, 0xcb, 0xf8, 0xc5, 0xaf, 0x5b, 0x77, 0x48, 0x84, 0x67, 0xaa, 0x8c, 0x44, 0xfa, 0x4c, 0xca
};
+const ff_asf_guid ff_asf_metadata_library_header = {
+ 0x94, 0x1c, 0x23, 0x44, 0x98, 0x94, 0xd1, 0x49, 0xa1, 0x41, 0x1d, 0x13, 0x4e, 0x45, 0x70, 0x54
+};
+
const ff_asf_guid ff_asf_marker_header = {
0x01, 0xCD, 0x87, 0xF4, 0x51, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65
};
diff --git a/libavformat/asf.h b/libavformat/asf.h
index 1d94a2c924..3aada8b101 100644
--- a/libavformat/asf.h
+++ b/libavformat/asf.h
@@ -103,6 +103,7 @@ extern const ff_asf_guid ff_asf_simple_index_header;
extern const ff_asf_guid ff_asf_ext_stream_embed_stream_header;
extern const ff_asf_guid ff_asf_ext_stream_audio_stream;
extern const ff_asf_guid ff_asf_metadata_header;
+extern const ff_asf_guid ff_asf_metadata_library_header;
extern const ff_asf_guid ff_asf_marker_header;
extern const ff_asf_guid ff_asf_my_guid;
extern const ff_asf_guid ff_asf_language_guid;
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index e85ee8ff81..51422ea137 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -136,6 +136,7 @@ static void print_guid(ff_asf_guid *g)
else PRINT_IF_GUID(g, ff_asf_ext_stream_embed_stream_header);
else PRINT_IF_GUID(g, ff_asf_ext_stream_audio_stream);
else PRINT_IF_GUID(g, ff_asf_metadata_header);
+ else PRINT_IF_GUID(g, ff_asf_metadata_library_header);
else PRINT_IF_GUID(g, ff_asf_marker_header);
else PRINT_IF_GUID(g, stream_bitrate_guid);
else PRINT_IF_GUID(g, ff_asf_language_guid);
@@ -296,6 +297,9 @@ static void get_tag(AVFormatContext *s, const char *key, int type, int len, int
} 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;
} else {
av_log(s, AV_LOG_DEBUG,
"Unsupported value type %d in tag %s.\n", type, key);
@@ -740,6 +744,8 @@ static int asf_read_header(AVFormatContext *s)
asf_read_ext_content_desc(s, gsize);
} else if (!ff_guidcmp(&g, &ff_asf_metadata_header)) {
asf_read_metadata(s, gsize);
+ } else if (!ff_guidcmp(&g, &ff_asf_metadata_library_header)) {
+ asf_read_metadata(s, gsize);
} else if (!ff_guidcmp(&g, &ff_asf_ext_stream_header)) {
asf_read_ext_stream_properties(s, gsize);