in mp4parse/src/lib.rs [4492:4527]
fn read_mvhd<T: Read>(src: &mut BMFFBox<T>) -> Result<MovieHeaderBox> {
let (version, _) = read_fullbox_extra(src)?;
match version {
// 64 bit creation and modification times.
1 => {
skip(src, 16)?;
}
// 32 bit creation and modification times.
0 => {
skip(src, 8)?;
}
_ => return Status::MvhdBadVersion.into(),
}
let timescale = be_u32(src)?;
let duration = match version {
1 => be_u64(src)?,
0 => {
let d = be_u32(src)?;
if d == u32::MAX {
u64::MAX
} else {
u64::from(d)
}
}
_ => unreachable!("Should have returned Status::MvhdBadVersion"),
};
// Skip remaining valid fields.
skip(src, 80)?;
// Padding could be added in some contents.
skip_box_remain(src)?;
Ok(MovieHeaderBox {
timescale,
duration,
})
}