in mp4parse/src/lib.rs [5893:5931]
fn read_tenc<T: Read>(src: &mut BMFFBox<T>) -> Result<TrackEncryptionBox> {
let (version, _) = read_fullbox_extra(src)?;
// reserved byte
skip(src, 1)?;
// the next byte is used to signal the default pattern in version >= 1
let (default_crypt_byte_block, default_skip_byte_block) = match version {
0 => {
skip(src, 1)?;
(None, None)
}
_ => {
let pattern_byte = src.read_u8()?;
let crypt_bytes = pattern_byte >> 4;
let skip_bytes = pattern_byte & 0x0f;
(Some(crypt_bytes), Some(skip_bytes))
}
};
let default_is_encrypted = src.read_u8()?;
let default_iv_size = src.read_u8()?;
let default_kid = read_buf(src, 16)?;
// If default_is_encrypted == 1 && default_iv_size == 0 we expect a default_constant_iv
let default_constant_iv = match (default_is_encrypted, default_iv_size) {
(1, 0) => {
let default_constant_iv_size = src.read_u8()?;
Some(read_buf(src, default_constant_iv_size.into())?)
}
_ => None,
};
Ok(TrackEncryptionBox {
is_encrypted: default_is_encrypted,
iv_size: default_iv_size,
kid: default_kid,
crypt_byte_block_count: default_crypt_byte_block,
skip_byte_block_count: default_skip_byte_block,
constant_iv: default_constant_iv,
})
}