in mp4parse/src/lib.rs [2884:2922]
fn read_infe<T: Read>(
src: &mut BMFFBox<T>,
strictness: ParseStrictness,
unsupported_features: &mut UnsupportedFeatures,
) -> Result<Option<ItemInfoEntry>> {
let (version, flags) = read_fullbox_extra(src)?;
// According to the standard, it seems the flags field shall be 0, but at
// least one sample AVIF image has a nonzero value.
// See https://github.com/AOMediaCodec/av1-avif/issues/146
if flags != 0 {
fail_with_status_if(
strictness == ParseStrictness::Strict,
Status::InfeFlagsNonzero,
)?;
}
// mif1 brand (see HEIF (ISO 23008-12:2017) § 10.2.1) only requires v2 and 3
let item_id = ItemId(match version {
2 => be_u16(src)?.into(),
3 => be_u32(src)?,
_ => return Err(Error::Unsupported("unsupported version in 'infe' box")),
});
let item_protection_index = be_u16(src)?;
let item_type = be_u32(src)?;
debug!("infe {:?} item_type: {}", item_id, U32BE(item_type));
// There are some additional fields here, but they're not of interest to us
skip_box_remain(src)?;
if item_protection_index != 0 {
unsupported_features.insert(Feature::Ipro);
Ok(None)
} else {
Ok(Some(ItemInfoEntry { item_id, item_type }))
}
}