diff options
author | Vladimir Pantelic <vladoman@gmail.com> | 2013-02-06 17:35:27 +0400 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-02-09 21:57:21 +0400 |
commit | 84b721db366c0734fdfd23c8daaa7da7da21f761 (patch) | |
tree | 07bb53f3077771105b4c57927891d4c0deaa434b | |
parent | 61f9ad2dfcb3f98b7ac5777d19d0e7b61d0be01e (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.c | 4 | ||||
-rw-r--r-- | libavformat/asf.h | 1 | ||||
-rw-r--r-- | libavformat/asfdec.c | 6 |
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); |