# HG changeset patch # User bcoudurier # Date 1234920936 0 # Node ID ade95792aa16a52ab8dfb28eea18d7564fd33723 # Parent 6495e0111859f2a3450f0d9162ea503382889230 use index 0 for timecode track and write it in source package also diff -r 6495e0111859 -r ade95792aa16 mxfenc.c --- a/mxfenc.c Wed Feb 18 01:05:06 2009 +0000 +++ b/mxfenc.c Wed Feb 18 01:35:36 2009 +0000 @@ -573,7 +573,7 @@ // write track id mxf_write_local_tag(pb, 4, 0x4801); - put_be32(pb, st->index); + put_be32(pb, st->index+1); // write track number mxf_write_local_tag(pb, 4, 0x4804); @@ -637,14 +637,14 @@ mxf_write_refs_count(pb, 1); if (st == mxf->timecode_track) component = TimecodeComponent; - else if (type == MaterialPackage) + else component = SourceClip; - else - component = SourceClip+TypeBottom; + if (type == SourcePackage) + component += TypeBottom; mxf_write_uuid(pb, component, st->index); } -static void mxf_write_timecode_component(AVFormatContext *s, AVStream *st) +static void mxf_write_timecode_component(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type) { MXFContext *mxf = s->priv_data; ByteIOContext *pb = s->pb; @@ -654,7 +654,8 @@ // UID mxf_write_local_tag(pb, 16, 0x3C0A); - mxf_write_uuid(pb, TimecodeComponent, st->index); + mxf_write_uuid(pb, type == MaterialPackage ? TimecodeComponent : + TimecodeComponent + TypeBottom, st->index); mxf_write_common_fields(s, st); @@ -704,7 +705,7 @@ if (type == SourcePackage) put_be32(pb, 0); else - put_be32(pb, st->index); + put_be32(pb, st->index+1); } static void mxf_write_multi_descriptor(AVFormatContext *s) @@ -757,7 +758,7 @@ mxf_write_uuid(pb, SubDescriptor, st->index); mxf_write_local_tag(pb, 4, 0x3006); - put_be32(pb, st->index); + put_be32(pb, st->index+1); mxf_write_local_tag(pb, 8, 0x3001); put_be32(pb, mxf->time_base.den); @@ -916,15 +917,13 @@ { MXFContext *mxf = s->priv_data; ByteIOContext *pb = s->pb; - int i, track_count; + int i, track_count = s->nb_streams+1; if (type == MaterialPackage) { - track_count = s->nb_streams + 1; // add timecode track mxf_write_metadata_key(pb, 0x013600); PRINT_KEY(s, "Material Package key", pb->buf_ptr - 16); klv_encode_ber_length(pb, 92 + 16*track_count); } else { - track_count = s->nb_streams; mxf_write_metadata_key(pb, 0x013700); PRINT_KEY(s, "Source Package key", pb->buf_ptr - 16); klv_encode_ber_length(pb, 112 + 16*track_count); // 20 bytes length for descriptor reference @@ -952,10 +951,10 @@ // write track refs mxf_write_local_tag(pb, track_count*16 + 8, 0x4403); mxf_write_refs_count(pb, track_count); + mxf_write_uuid(pb, type == MaterialPackage ? Track : + Track + TypeBottom, -1); // timecode track for (i = 0; i < s->nb_streams; i++) mxf_write_uuid(pb, type == MaterialPackage ? Track : Track + TypeBottom, i); - if (type == MaterialPackage) - mxf_write_uuid(pb, Track, s->nb_streams); // timecode track // write multiple descriptor reference if (type == SourcePackage) { @@ -965,13 +964,13 @@ mxf_write_multi_descriptor(s); } else mxf_write_uuid(pb, SubDescriptor, 0); - } else { - // write timecode track - mxf_write_track(s, mxf->timecode_track, type); - mxf_write_sequence(s, mxf->timecode_track, type); - mxf_write_timecode_component(s, mxf->timecode_track); } + // write timecode track + mxf_write_track(s, mxf->timecode_track, type); + mxf_write_sequence(s, mxf->timecode_track, type); + mxf_write_timecode_component(s, mxf->timecode_track, type); + for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; mxf_write_track(s, st, type); @@ -1498,7 +1497,7 @@ mxf->timecode_track->priv_data = av_mallocz(sizeof(MXFStreamContext)); if (!mxf->timecode_track->priv_data) return AVERROR(ENOMEM); - mxf->timecode_track->index = s->nb_streams; + mxf->timecode_track->index = -1; if (!samples_per_frame) samples_per_frame = PAL_samples_per_frame;