86 uint8_t track_number[4];
155 static const uint8_t
mxf_header_partition_pack_key[] = { 0x06,0x0e,0x2b,0x34,0x02,0x05,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x02 };
156 static const uint8_t
mxf_essence_element_key[] = { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01 };
159 static const uint8_t
mxf_crypto_source_container_ul[] = { 0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x09,0x06,0x01,0x01,0x02,0x02,0x00,0x00,0x00 };
160 static const uint8_t
mxf_encrypted_triplet_key[] = { 0x06,0x0e,0x2b,0x34,0x02,0x04,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x7e,0x01,0x00 };
161 static const uint8_t
mxf_encrypted_essence_container[] = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0b,0x01,0x00 };
162 static const uint8_t
mxf_sony_mpeg4_extradata[] = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0e,0x06,0x06,0x02,0x02,0x01,0x00,0x00 };
164 #define IS_KLV_KEY(x, y) (!memcmp(x, y, sizeof(y)))
170 int bytes_num = size & 0x7f;
176 size = size << 8 |
avio_r8(pb);
188 else if (b != key[i])
202 return klv->
length == -1 ? -1 : 0;
222 const uint8_t *buf_ptr, *end_ptr;
231 data_ptr = pkt->
data;
232 end_ptr = pkt->
data + length;
233 buf_ptr = pkt->
data + 4;
236 uint32_t sample = bytestream_get_le32(&buf_ptr);
238 bytestream_put_le24(&data_ptr, (sample >> 4) & 0xffffff);
240 bytestream_put_le16(&data_ptr, (sample >> 12) & 0xffff);
250 static const uint8_t checkv[16] = {0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b};
256 uint64_t plaintext_size;
283 if (orig_size < plaintext_size)
287 if (size < 32 || size - 32 < orig_size)
293 if (memcmp(tmpbuf, checkv, 16))
299 else if (size < plaintext_size)
301 size -= plaintext_size;
304 &pkt->
data[plaintext_size], size >> 4, ivec, 1);
338 if (klv.
key[12] == 0x06 && klv.
key[13] == 0x01 && klv.
key[14] == 0x10) {
364 if (item_len != 18) {
369 if (item_num > UINT_MAX / item_len)
447 if (package->tracks_count >= UINT_MAX /
sizeof(
UID))
449 package->tracks_refs =
av_malloc(package->tracks_count *
sizeof(
UID));
450 if (!package->tracks_refs)
453 avio_read(pb, (uint8_t *)package->tracks_refs, package->tracks_count *
sizeof(
UID));
510 if (package->tracks_count >= UINT_MAX /
sizeof(
UID))
512 package->tracks_refs =
av_malloc(package->tracks_count *
sizeof(
UID));
513 if (!package->tracks_refs)
516 avio_read(pb, (uint8_t *)package->tracks_refs, package->tracks_count *
sizeof(
UID));
524 avio_read(pb, package->descriptor_ref, 16);
545 int code, value, ofs = 0;
554 layout[ofs++] = code;
555 layout[ofs++] = value;
632 for (i = 0; i <
len; i++) {
633 if (i != 7 && key[i] != uid[i])
641 while (uls->
uid[0]) {
666 { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x60,0x01 }, 14,
CODEC_ID_MPEG2VIDEO },
667 { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x41,0x01 }, 14,
CODEC_ID_DVVIDEO },
669 { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x06,0x01,0x00 }, 14,
CODEC_ID_PCM_S16LE },
670 { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x40,0x01 }, 14,
CODEC_ID_MP2 },
671 { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 }, 14,
CODEC_ID_PCM_S16LE },
672 { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0,
CODEC_ID_NONE },
685 if (material_package)
break;
687 if (!material_package) {
699 UID *essence_container_ul =
NULL;
726 source_package = temp_package;
730 if (!source_package) {
740 source_track = temp_track;
780 if (!sub_descriptor) {
785 descriptor = sub_descriptor;
806 essence_container_ul = &((
MXFCryptoContext *)metadata)->source_container_ul;
819 container_ul =
mxf_get_codec_ul(mxf_essence_container_uls, essence_container_ul);
828 container_ul =
mxf_get_codec_ul(mxf_essence_container_uls, essence_container_ul);
838 "found for stream #%d, time base forced to 1/48000\n",
868 { { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x05,0x01,0x00 },
mxf_read_primer_pack },
869 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x18,0x00 },
mxf_read_content_storage, 0,
AnyType },
870 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x37,0x00 },
mxf_read_source_package,
sizeof(
MXFPackage),
SourcePackage },
871 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00 },
mxf_read_material_package,
sizeof(
MXFPackage),
MaterialPackage },
872 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x0F,0x00 },
mxf_read_sequence,
sizeof(
MXFSequence),
Sequence },
873 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x11,0x00 },
mxf_read_source_clip,
sizeof(
MXFStructuralComponent),
SourceClip },
874 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x44,0x00 },
mxf_read_generic_descriptor,
sizeof(
MXFDescriptor),
MultipleDescriptor },
875 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x42,0x00 },
mxf_read_generic_descriptor,
sizeof(
MXFDescriptor),
Descriptor },
876 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x28,0x00 },
mxf_read_generic_descriptor,
sizeof(
MXFDescriptor),
Descriptor },
877 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x29,0x00 },
mxf_read_generic_descriptor,
sizeof(
MXFDescriptor),
Descriptor },
878 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x51,0x00 },
mxf_read_generic_descriptor,
sizeof(
MXFDescriptor),
Descriptor },
879 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x48,0x00 },
mxf_read_generic_descriptor,
sizeof(
MXFDescriptor),
Descriptor },
880 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x47,0x00 },
mxf_read_generic_descriptor,
sizeof(
MXFDescriptor),
Descriptor },
881 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3A,0x00 },
mxf_read_track,
sizeof(
MXFTrack),
Track },
882 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3B,0x00 },
mxf_read_track,
sizeof(
MXFTrack),
Track },
883 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x04,0x01,0x02,0x02,0x00,0x00 },
mxf_read_cryptographic_context,
sizeof(
MXFCryptoContext),
CryptoContext },
884 { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x10,0x01,0x00 },
mxf_read_index_table_segment,
sizeof(
MXFIndexTableSegment),
IndexTableSegment },
885 { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
NULL, 0,
AnyType },
903 av_dlog(mxf->
fc,
"local tag %#04x size %d\n", tag, size);
912 if (local_tag == tag) {
914 av_dlog(mxf->
fc,
"local tag %#04x\n", local_tag);
919 if (ctx_size && tag == 0x3C0A)
921 else if ((ret = read_child(ctx, pb, tag, size, uid)) < 0)
926 if (ctx_size) ctx->
type = type;
956 for (metadata = mxf_metadata_read_table; metadata->
read; metadata++) {
959 if (klv.
key[5] == 0x53) {
1010 uint8_t *bufp = p->
buf;
1018 for (; bufp < end; bufp++) {
1034 if (sample_time < 0)