in mp4parse/src/lib.rs [4349:4378]
fn read_mdia<T: Read>(f: &mut BMFFBox<T>, track: &mut Track) -> Result<()> {
let mut iter = f.box_iter();
while let Some(mut b) = iter.next_box()? {
match b.head.name {
BoxType::MediaHeaderBox => {
let (mdhd, duration, timescale) = parse_mdhd(&mut b, track)?;
track.duration = duration;
track.timescale = timescale;
debug!("{:?}", mdhd);
}
BoxType::HandlerBox => {
let hdlr = read_hdlr(&mut b, ParseStrictness::Permissive)?;
match hdlr.handler_type.value.as_ref() {
b"vide" => track.track_type = TrackType::Video,
b"pict" => track.track_type = TrackType::Picture,
b"auxv" => track.track_type = TrackType::AuxiliaryVideo,
b"soun" => track.track_type = TrackType::Audio,
b"meta" => track.track_type = TrackType::Metadata,
_ => (),
}
debug!("{:?}", hdlr);
}
BoxType::MediaInformationBox => read_minf(&mut b, track)?,
_ => skip_box_content(&mut b)?,
};
check_parser_state!(b.content);
}
Ok(())
}