Lines Matching defs:klv

448 static int klv_read_packet(MXFContext *mxf, KLVPacket *klv, AVIOContext *pb)
453 klv->offset = avio_tell(pb) - 4;
454 if (klv->offset < mxf->run_in)
457 memcpy(klv->key, mxf_klv_key, 4);
458 avio_read(pb, klv->key + 4, 12);
462 klv->length = length;
466 klv->next_klv = pos + length;
470 static int mxf_get_stream_index(AVFormatContext *s, KLVPacket *klv, int body_sid)
477 if (track && (!body_sid || !track->body_sid || track->body_sid == body_sid) && !memcmp(klv->key + sizeof(mxf_essence_element_key), track->track_number, sizeof(track->track_number)))
616 static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv)
621 int64_t end = avio_tell(pb) + klv->length;
644 // source klv key
646 avio_read(pb, klv->key, 16);
647 if (!IS_KLV_KEY(klv, mxf_essence_element_key))
650 body_sid = find_body_sid_by_absolute_offset(mxf, klv->offset);
651 index = mxf_get_stream_index(s, klv, body_sid);
3209 static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadFunc *read_child, int ctx_size, enum MXFMetadataSetType type)
3212 uint64_t klv_end = avio_tell(pb) + klv->length;
3274 tag, klv->offset);
3300 static int mxf_parse_klv(MXFContext *mxf, KLVPacket klv, MXFMetadataReadFunc *read,
3305 if (klv.key[5] == 0x53) {
3306 res = mxf_read_local_tags(mxf, &klv, read, ctx_size, type);
3308 uint64_t next = avio_tell(s->pb) + klv.length;
3309 res = read(mxf, s->pb, 0, klv.length, klv.key, klv.offset);
3314 klv.offset);
3334 KLVPacket klv;
3352 if ((ret = klv_read_packet(mxf, &klv, pb)) < 0) {
3357 if (!mxf_is_partition_pack_key(klv.key)) {
3358 av_log(mxf->fc, AV_LOG_ERROR, "PreviousPartition @ %" PRIx64 " isn't a PartitionPack\n", klv.offset);
3366 if (klv.offset >= current_partition_ofs) {
3372 if ((ret = mxf_parse_klv(mxf, klv, mxf_read_partition_pack, 0, 0)) < 0)
3455 /* for clip wrapped essences we point essence_offset after the KL (usually klv.offset + 20 or 25)
3601 KLVPacket klv;
3629 if (klv_read_packet(mxf, &klv, s->pb) < 0 ||
3630 !IS_KLV_KEY(klv.key, ff_mxf_random_index_pack_key))
3632 if (klv.next_klv != file_size || klv.length <= 4 || (klv.length - 4) % 12) {
3637 avio_skip(s->pb, klv.length - 12);
3653 KLVPacket klv;
3676 if (klv_read_packet(mxf, &klv, s->pb) < 0) {
3684 PRINT_KEY(s, "read header", klv.key);
3685 av_log(s, AV_LOG_TRACE, "size %"PRIu64" offset %#"PRIx64"\n", klv.length, klv.offset);
3686 if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key) ||
3687 IS_KLV_KEY(klv.key, mxf_essence_element_key) ||
3688 IS_KLV_KEY(klv.key, mxf_canopus_essence_element_key) ||
3689 IS_KLV_KEY(klv.key, mxf_avid_essence_element_key) ||
3690 IS_KLV_KEY(klv.key, mxf_system_item_key_cp) ||
3691 IS_KLV_KEY(klv.key, mxf_system_item_key_gc)) {
3699 mxf->current_partition->first_essence_klv = klv;
3702 essence_offset = klv.offset;
3708 } else if (mxf_is_partition_pack_key(klv.key) && mxf->current_partition) {
3718 if (IS_KLV_KEY(klv.key, metadata->key)) {
3719 if ((ret = mxf_parse_klv(mxf, klv, metadata->read, metadata->ctx_size, metadata->type)) < 0)
3726 UID_ARG(klv.key));
3727 avio_skip(s->pb, klv.length);
3915 KLVPacket klv;
3925 ret = klv_read_packet(mxf, &klv, s->pb);
3928 max_data_size = klv.length;
3929 pos = klv.next_klv - klv.length;
3930 PRINT_KEY(s, "read packet", klv.key);
3931 av_log(s, AV_LOG_TRACE, "size %"PRIu64" offset %#"PRIx64"\n", klv.length, klv.offset);
3932 if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key)) {
3933 ret = mxf_decrypt_triplet(s, pkt, &klv);
3941 klv = mxf->current_klv_data;
3942 max_data_size = klv.next_klv - pos;
3944 if (IS_KLV_KEY(klv.key, mxf_essence_element_key) ||
3945 IS_KLV_KEY(klv.key, mxf_canopus_essence_element_key) ||
3946 IS_KLV_KEY(klv.key, mxf_avid_essence_element_key)) {
3947 int body_sid = find_body_sid_by_absolute_offset(mxf, klv.offset);
3948 int index = mxf_get_stream_index(s, &klv, body_sid);
3956 AV_RB32(klv.key + 12));
3973 if (klv.next_klv - klv.length == pos && max_data_size > MXF_MAX_CHUNK_SIZE) {
3989 mxf->current_klv_data = klv;
3990 klv.offset = pos;
3991 klv.length = size;
3992 klv.next_klv = klv.offset + klv.length;
3996 if (klv.key[12] == 0x06 && klv.key[13] == 0x01 && klv.key[14] == 0x10) {
3998 pkt, klv.length);
4006 ret = mxf_get_eia608_packet(s, s->streams[index], pkt, klv.length);
4012 ret = av_get_packet(s->pb, pkt, klv.length);
4019 pkt->pos = klv.offset;
4028 avio_seek(s->pb, klv.next_klv, SEEK_SET);
4184 KLVPacket klv = partition->first_essence_klv;
4185 if (seekpos < klv.next_klv - klv.length || seekpos >= klv.next_klv) {
4189 mxf->current_klv_data = klv;