fn read_mvhd()

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,
    })
}