in mp4parse/src/lib.rs [4530:4576]
fn read_tkhd<T: Read>(src: &mut BMFFBox<T>) -> Result<TrackHeaderBox> {
let (version, flags) = read_fullbox_extra(src)?;
let disabled = flags & 0x1u32 == 0 || flags & 0x2u32 == 0;
match version {
// 64 bit creation and modification times.
1 => {
skip(src, 16)?;
}
// 32 bit creation and modification times.
0 => {
skip(src, 8)?;
}
_ => return Status::TkhdBadVersion.into(),
}
let track_id = be_u32(src)?;
skip(src, 4)?;
let duration = match version {
1 => be_u64(src)?,
0 => u64::from(be_u32(src)?),
_ => unreachable!("Should have returned Status::TkhdBadVersion"),
};
// Skip uninteresting fields.
skip(src, 16)?;
let matrix = Matrix {
a: be_i32(src)?,
b: be_i32(src)?,
u: be_i32(src)?,
c: be_i32(src)?,
d: be_i32(src)?,
v: be_i32(src)?,
x: be_i32(src)?,
y: be_i32(src)?,
w: be_i32(src)?,
};
let width = be_u32(src)?;
let height = be_u32(src)?;
Ok(TrackHeaderBox {
track_id,
disabled,
duration,
width,
height,
matrix,
})
}