comparison mxfenc.c @ 4279:2402eb8c37ff libavformat

write essence container data
author bcoudurier
date Fri, 23 Jan 2009 20:57:12 +0000
parents 5bf611a311b9
children 385b2fdccbbb
comparison
equal deleted inserted replaced
4278:5bf611a311b9 4279:2402eb8c37ff
118 { 0x3C04, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x05,0x01,0x00,0x00}}, /* Version String */ 118 { 0x3C04, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x05,0x01,0x00,0x00}}, /* Version String */
119 { 0x3C05, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x07,0x00,0x00,0x00}}, /* Product ID */ 119 { 0x3C05, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x07,0x00,0x00,0x00}}, /* Product ID */
120 { 0x3C06, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x02,0x03,0x00,0x00}}, /* Modification Date */ 120 { 0x3C06, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x02,0x03,0x00,0x00}}, /* Modification Date */
121 // Content Storage 121 // Content Storage
122 { 0x1901, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x05,0x01,0x00,0x00}}, /* Package strong reference batch */ 122 { 0x1901, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x05,0x01,0x00,0x00}}, /* Package strong reference batch */
123 { 0x1902, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x05,0x02,0x00,0x00}}, /* Package strong reference batch */
123 // Essence Container Data 124 // Essence Container Data
124 { 0x2701, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x06,0x01,0x00,0x00,0x00}}, /* Linked Package UID */ 125 { 0x2701, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x06,0x01,0x00,0x00,0x00}}, /* Linked Package UID */
125 { 0x3F07, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x01,0x03,0x04,0x04,0x00,0x00,0x00,0x00}}, /* BodySID */ 126 { 0x3F07, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x01,0x03,0x04,0x04,0x00,0x00,0x00,0x00}}, /* BodySID */
126 // Package 127 // Package
127 { 0x4401, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x01,0x01,0x15,0x10,0x00,0x00,0x00,0x00}}, /* Package UID */ 128 { 0x4401, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x01,0x01,0x15,0x10,0x00,0x00,0x00,0x00}}, /* Package UID */
374 { 375 {
375 ByteIOContext *pb = s->pb; 376 ByteIOContext *pb = s->pb;
376 377
377 mxf_write_metadata_key(pb, 0x011800); 378 mxf_write_metadata_key(pb, 0x011800);
378 PRINT_KEY(s, "content storage key", pb->buf_ptr - 16); 379 PRINT_KEY(s, "content storage key", pb->buf_ptr - 16);
379 klv_encode_ber_length(pb, 64); 380 klv_encode_ber_length(pb, 92);
380 381
381 // write uid 382 // write uid
382 mxf_write_local_tag(pb, 16, 0x3C0A); 383 mxf_write_local_tag(pb, 16, 0x3C0A);
383 mxf_write_uuid(pb, ContentStorage, 0); 384 mxf_write_uuid(pb, ContentStorage, 0);
384 PRINT_KEY(s, "content storage uid", pb->buf_ptr - 16); 385 PRINT_KEY(s, "content storage uid", pb->buf_ptr - 16);
386 // write package reference 387 // write package reference
387 mxf_write_local_tag(pb, 16 * 2 + 8, 0x1901); 388 mxf_write_local_tag(pb, 16 * 2 + 8, 0x1901);
388 mxf_write_refs_count(pb, 2); 389 mxf_write_refs_count(pb, 2);
389 mxf_write_uuid(pb, MaterialPackage, 0); 390 mxf_write_uuid(pb, MaterialPackage, 0);
390 mxf_write_uuid(pb, SourcePackage, 0); 391 mxf_write_uuid(pb, SourcePackage, 0);
392
393 // write essence container data
394 mxf_write_local_tag(pb, 8 + 16, 0x1902);
395 mxf_write_refs_count(pb, 1);
396 mxf_write_uuid(pb, EssenceContainerData, 0);
391 } 397 }
392 398
393 static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type) 399 static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type)
394 { 400 {
395 ByteIOContext *pb = s->pb; 401 ByteIOContext *pb = s->pb;
657 mxf_essence_container_uls[sc->index].write_desc(s, st); 663 mxf_essence_container_uls[sc->index].write_desc(s, st);
658 } 664 }
659 } 665 }
660 } 666 }
661 667
668 static int mxf_write_essence_container_data(AVFormatContext *s)
669 {
670 ByteIOContext *pb = s->pb;
671
672 mxf_write_metadata_key(pb, 0x012300);
673 klv_encode_ber_length(pb, 64);
674
675 mxf_write_local_tag(pb, 16, 0x3C0A); // Instance UID
676 mxf_write_uuid(pb, EssenceContainerData, 0);
677
678 mxf_write_local_tag(pb, 32, 0x2701); // Linked Package UID
679 mxf_write_umid(pb, SourcePackage, 0);
680
681 mxf_write_local_tag(pb, 4, 0x3F07); // BodySID
682 put_be32(pb, 1);
683
684 return 0;
685 }
686
662 static int mxf_write_header_metadata_sets(AVFormatContext *s) 687 static int mxf_write_header_metadata_sets(AVFormatContext *s)
663 { 688 {
664 mxf_write_preface(s); 689 mxf_write_preface(s);
665 mxf_write_identification(s); 690 mxf_write_identification(s);
666 mxf_write_content_storage(s); 691 mxf_write_content_storage(s);
667 mxf_write_package(s, MaterialPackage); 692 mxf_write_package(s, MaterialPackage);
668 mxf_write_package(s, SourcePackage); 693 mxf_write_package(s, SourcePackage);
694 mxf_write_essence_container_data(s);
669 return 0; 695 return 0;
670 } 696 }
671 697
672 static void mxf_write_partition(AVFormatContext *s, int bodysid, const uint8_t *key, int write_metadata) 698 static void mxf_write_partition(AVFormatContext *s, int bodysid, const uint8_t *key, int write_metadata)
673 { 699 {