From 88b51ea9483bca1fa21795d07677d733e1f6a042 Mon Sep 17 00:00:00 2001 From: Vladimir Pantelic Date: Mon, 8 Mar 2010 13:13:18 +0000 Subject: Use ASF supports "markers" which are a name and a time stamp to create lavf chapters. Patch by Vladimir Pantelic pan (arobase) nt tu (dash) darmstadt de Originally committed as revision 22326 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/asf.c | 4 ++++ libavformat/asf.h | 1 + libavformat/asfdec.c | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) (limited to 'libavformat') diff --git a/libavformat/asf.c b/libavformat/asf.c index 4ce1f7f718..20bfd8de1e 100644 --- a/libavformat/asf.c +++ b/libavformat/asf.c @@ -106,6 +106,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_marker_header = { + 0x01, 0xCD, 0x87, 0xF4, 0x51, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65 +}; + /* I am not a number !!! This GUID is the one found on the PC used to generate the stream */ const ff_asf_guid ff_asf_my_guid = { diff --git a/libavformat/asf.h b/libavformat/asf.h index dd623e8f34..0ad5e11303 100644 --- a/libavformat/asf.h +++ b/libavformat/asf.h @@ -158,6 +158,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_marker_header; extern const ff_asf_guid ff_asf_my_guid; extern const ff_asf_guid ff_asf_language_guid; extern const ff_asf_guid ff_asf_content_encryption; diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c index 3a2f0e0916..80ac0c29a5 100644 --- a/libavformat/asfdec.c +++ b/libavformat/asfdec.c @@ -82,6 +82,7 @@ static void print_guid(const 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_marker_header); else PRINT_IF_GUID(g, stream_bitrate_guid); else PRINT_IF_GUID(g, ff_asf_language_guid); else @@ -520,6 +521,32 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) get_guid(pb, &g); v1 = get_le32(pb); v2 = get_le16(pb); + } else if (!guidcmp(&g, &ff_asf_marker_header)) { + int i, count, name_len; + char name[1024]; + + get_le64(pb); // reserved 16 bytes + get_le64(pb); // ... + count = get_le32(pb); // markers count + get_le16(pb); // reserved 2 bytes + name_len = get_le16(pb); // name length + for(i=0;i