|
|
|
@ -392,53 +392,6 @@ static void mxf_write_content_storage(AVFormatContext *s) |
|
|
|
|
mxf_write_uuid(pb, SourcePackage, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void mxf_write_package(AVFormatContext *s, enum MXFMetadataSetType type) |
|
|
|
|
{ |
|
|
|
|
ByteIOContext *pb = s->pb; |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
if (type == MaterialPackage) { |
|
|
|
|
mxf_write_metadata_key(pb, 0x013600); |
|
|
|
|
PRINT_KEY(s, "Material Package key", pb->buf_ptr - 16); |
|
|
|
|
klv_encode_ber_length(pb, 92 + 16 * s->nb_streams); |
|
|
|
|
} else { |
|
|
|
|
mxf_write_metadata_key(pb, 0x013700); |
|
|
|
|
PRINT_KEY(s, "Source Package key", pb->buf_ptr - 16); |
|
|
|
|
klv_encode_ber_length(pb, 112 + 16 * s->nb_streams); // 20 bytes length for descriptor reference
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// write uid
|
|
|
|
|
mxf_write_local_tag(pb, 16, 0x3C0A); |
|
|
|
|
mxf_write_uuid(pb, type, 0); |
|
|
|
|
av_log(s,AV_LOG_DEBUG, "package type:%d\n", type); |
|
|
|
|
PRINT_KEY(s, "package uid", pb->buf_ptr - 16); |
|
|
|
|
|
|
|
|
|
// write package umid
|
|
|
|
|
mxf_write_local_tag(pb, 32, 0x4401); |
|
|
|
|
mxf_write_umid(pb, type, 0); |
|
|
|
|
PRINT_KEY(s, "package umid second part", pb->buf_ptr - 16); |
|
|
|
|
|
|
|
|
|
// write create date
|
|
|
|
|
mxf_write_local_tag(pb, 8, 0x4405); |
|
|
|
|
put_be64(pb, 0); |
|
|
|
|
|
|
|
|
|
// write modified date
|
|
|
|
|
mxf_write_local_tag(pb, 8, 0x4404); |
|
|
|
|
put_be64(pb, 0); |
|
|
|
|
|
|
|
|
|
// write track refs
|
|
|
|
|
mxf_write_local_tag(pb, s->nb_streams * 16 + 8, 0x4403); |
|
|
|
|
mxf_write_refs_count(pb, s->nb_streams); |
|
|
|
|
for (i = 0; i < s->nb_streams; i++) |
|
|
|
|
mxf_write_uuid(pb, type == MaterialPackage ? Track : Track + TypeBottom, i); |
|
|
|
|
|
|
|
|
|
// write multiple descriptor reference
|
|
|
|
|
if (type == SourcePackage) { |
|
|
|
|
mxf_write_local_tag(pb, 16, 0x4701); |
|
|
|
|
mxf_write_uuid(pb, MultipleDescriptor, 0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type) |
|
|
|
|
{ |
|
|
|
|
ByteIOContext *pb = s->pb; |
|
|
|
@ -638,6 +591,53 @@ static void mxf_write_wav_desc(AVFormatContext *s, AVStream *st) |
|
|
|
|
put_be32(pb, st->codec->bits_per_sample); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void mxf_write_package(AVFormatContext *s, enum MXFMetadataSetType type) |
|
|
|
|
{ |
|
|
|
|
ByteIOContext *pb = s->pb; |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
if (type == MaterialPackage) { |
|
|
|
|
mxf_write_metadata_key(pb, 0x013600); |
|
|
|
|
PRINT_KEY(s, "Material Package key", pb->buf_ptr - 16); |
|
|
|
|
klv_encode_ber_length(pb, 92 + 16 * s->nb_streams); |
|
|
|
|
} else { |
|
|
|
|
mxf_write_metadata_key(pb, 0x013700); |
|
|
|
|
PRINT_KEY(s, "Source Package key", pb->buf_ptr - 16); |
|
|
|
|
klv_encode_ber_length(pb, 112 + 16 * s->nb_streams); // 20 bytes length for descriptor reference
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// write uid
|
|
|
|
|
mxf_write_local_tag(pb, 16, 0x3C0A); |
|
|
|
|
mxf_write_uuid(pb, type, 0); |
|
|
|
|
av_log(s,AV_LOG_DEBUG, "package type:%d\n", type); |
|
|
|
|
PRINT_KEY(s, "package uid", pb->buf_ptr - 16); |
|
|
|
|
|
|
|
|
|
// write package umid
|
|
|
|
|
mxf_write_local_tag(pb, 32, 0x4401); |
|
|
|
|
mxf_write_umid(pb, type, 0); |
|
|
|
|
PRINT_KEY(s, "package umid second part", pb->buf_ptr - 16); |
|
|
|
|
|
|
|
|
|
// write create date
|
|
|
|
|
mxf_write_local_tag(pb, 8, 0x4405); |
|
|
|
|
put_be64(pb, 0); |
|
|
|
|
|
|
|
|
|
// write modified date
|
|
|
|
|
mxf_write_local_tag(pb, 8, 0x4404); |
|
|
|
|
put_be64(pb, 0); |
|
|
|
|
|
|
|
|
|
// write track refs
|
|
|
|
|
mxf_write_local_tag(pb, s->nb_streams * 16 + 8, 0x4403); |
|
|
|
|
mxf_write_refs_count(pb, s->nb_streams); |
|
|
|
|
for (i = 0; i < s->nb_streams; i++) |
|
|
|
|
mxf_write_uuid(pb, type == MaterialPackage ? Track : Track + TypeBottom, i); |
|
|
|
|
|
|
|
|
|
// write multiple descriptor reference
|
|
|
|
|
if (type == SourcePackage) { |
|
|
|
|
mxf_write_local_tag(pb, 16, 0x4701); |
|
|
|
|
mxf_write_uuid(pb, MultipleDescriptor, 0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void mxf_build_structural_metadata(AVFormatContext *s, enum MXFMetadataSetType type) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|