in mp4parse/src/lib.rs [4580:4613]
fn read_elst<T: Read>(src: &mut BMFFBox<T>) -> Result<EditListBox> {
let (version, flags) = read_fullbox_extra(src)?;
let edit_count = be_u32(src)?;
let mut edits = TryVec::with_capacity(edit_count.to_usize())?;
for _ in 0..edit_count {
let (segment_duration, media_time) = match version {
1 => {
// 64 bit segment duration and media times.
(be_u64(src)?, be_i64(src)?)
}
0 => {
// 32 bit segment duration and media times.
(u64::from(be_u32(src)?), i64::from(be_i32(src)?))
}
_ => return Status::ElstBadVersion.into(),
};
let media_rate_integer = be_i16(src)?;
let media_rate_fraction = be_i16(src)?;
edits.push(Edit {
segment_duration,
media_time,
media_rate_integer,
media_rate_fraction,
})?;
}
// Padding could be added in some contents.
skip_box_remain(src)?;
Ok(EditListBox {
looped: flags == 1,
edits,
})
}