From 6e4668b8a952d7ef97329b26f08023345a02d612 Mon Sep 17 00:00:00 2001 From: Baptiste Coudurier Date: Fri, 23 Jan 2009 20:57:12 +0000 Subject: [PATCH] write essence container data Originally committed as revision 16733 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/mxf.h | 1 + libavformat/mxfenc.c | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/libavformat/mxf.h b/libavformat/mxf.h index dca074f913..5094575cfe 100644 --- a/libavformat/mxf.h +++ b/libavformat/mxf.h @@ -42,6 +42,7 @@ enum MXFMetadataSetType { ContentStorage, SubDescriptor, IndexTableSegment, + EssenceContainerData, TypeBottom,// add metadata type before this }; diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index 1e8bd7c0db..4f221c0cf7 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -120,6 +120,7 @@ static const MXFLocalTagPair mxf_local_tag_batch[] = { { 0x3C06, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x02,0x03,0x00,0x00}}, /* Modification Date */ // Content Storage { 0x1901, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x05,0x01,0x00,0x00}}, /* Package strong reference batch */ + { 0x1902, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x05,0x02,0x00,0x00}}, /* Package strong reference batch */ // Essence Container Data { 0x2701, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x06,0x01,0x00,0x00,0x00}}, /* Linked Package UID */ { 0x3F07, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x01,0x03,0x04,0x04,0x00,0x00,0x00,0x00}}, /* BodySID */ @@ -376,7 +377,7 @@ static void mxf_write_content_storage(AVFormatContext *s) mxf_write_metadata_key(pb, 0x011800); PRINT_KEY(s, "content storage key", pb->buf_ptr - 16); - klv_encode_ber_length(pb, 64); + klv_encode_ber_length(pb, 92); // write uid mxf_write_local_tag(pb, 16, 0x3C0A); @@ -388,6 +389,11 @@ static void mxf_write_content_storage(AVFormatContext *s) mxf_write_refs_count(pb, 2); mxf_write_uuid(pb, MaterialPackage, 0); mxf_write_uuid(pb, SourcePackage, 0); + + // write essence container data + mxf_write_local_tag(pb, 8 + 16, 0x1902); + mxf_write_refs_count(pb, 1); + mxf_write_uuid(pb, EssenceContainerData, 0); } static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type) @@ -659,6 +665,25 @@ static void mxf_write_package(AVFormatContext *s, enum MXFMetadataSetType type) } } +static int mxf_write_essence_container_data(AVFormatContext *s) +{ + ByteIOContext *pb = s->pb; + + mxf_write_metadata_key(pb, 0x012300); + klv_encode_ber_length(pb, 64); + + mxf_write_local_tag(pb, 16, 0x3C0A); // Instance UID + mxf_write_uuid(pb, EssenceContainerData, 0); + + mxf_write_local_tag(pb, 32, 0x2701); // Linked Package UID + mxf_write_umid(pb, SourcePackage, 0); + + mxf_write_local_tag(pb, 4, 0x3F07); // BodySID + put_be32(pb, 1); + + return 0; +} + static int mxf_write_header_metadata_sets(AVFormatContext *s) { mxf_write_preface(s); @@ -666,6 +691,7 @@ static int mxf_write_header_metadata_sets(AVFormatContext *s) mxf_write_content_storage(s); mxf_write_package(s, MaterialPackage); mxf_write_package(s, SourcePackage); + mxf_write_essence_container_data(s); return 0; }