static u_char* edash_packager_passthrough_write_encryption_atoms(void* ctx, u_char* p, size_t mdat_atom_start) { mp4_encrypt_passthrough_context_t* context = ctx; media_clip_filtered_t* cur_clip; media_sequence_t* sequence = context->sequence; media_track_t* cur_track; size_t senc_atom_size; uint32_t flags; // saiz / saio p = mp4_encrypt_passthrough_write_saiz_saio(ctx, p, mdat_atom_start - context->auxiliary_info_size); // senc senc_atom_size = ATOM_HEADER_SIZE + sizeof(senc_atom_t) + context->auxiliary_info_size; write_atom_header(p, senc_atom_size, 's', 'e', 'n', 'c'); flags = context->use_subsamples ? 0x2 : 0x0; write_be32(p, flags); // flags write_be32(p, sequence->total_frame_count); for (cur_clip = sequence->filtered_clips; cur_clip < sequence->filtered_clips_end; cur_clip++) { cur_track = cur_clip->first_track; p = vod_copy(p, cur_track->encryption_info.auxiliary_info, cur_track->encryption_info.auxiliary_info_end - cur_track->encryption_info.auxiliary_info); } return p; }
static u_char* mss_playready_passthrough_write_encryption_atoms(void* ctx, u_char* p, size_t mdat_atom_start) { mp4_encrypt_passthrough_context_t* context = ctx; media_clip_filtered_t* cur_clip; media_sequence_t* sequence = context->sequence; media_track_t* cur_track; size_t auxiliary_data_offset; size_t uuid_atom_size; uint32_t flags; // uuid piff uuid_atom_size = ATOM_HEADER_SIZE + sizeof(uuid_piff_atom_t) + context->auxiliary_info_size; write_atom_header(p, uuid_atom_size, 'u', 'u', 'i', 'd'); p = vod_copy(p, piff_uuid, sizeof(piff_uuid)); flags = context->use_subsamples ? 0x2 : 0x0; write_be32(p, flags); // flags write_be32(p, sequence->total_frame_count); for (cur_clip = sequence->filtered_clips; cur_clip < sequence->filtered_clips_end; cur_clip++) { cur_track = cur_clip->first_track; p = vod_copy(p, cur_track->encryption_info.auxiliary_info, cur_track->encryption_info.auxiliary_info_end - cur_track->encryption_info.auxiliary_info); } // saiz / saio auxiliary_data_offset = mdat_atom_start - (context->auxiliary_info_size + context->saiz_atom_size + context->saio_atom_size); p = mp4_encrypt_passthrough_write_saiz_saio(ctx, p, auxiliary_data_offset); return p; }