use crate::types::{ErrorCode, HdrInfo, Result};
pub fn hdr_init(hdr: &mut HdrInfo) {
hdr.color_primaries = 1;
hdr.transfer_chars = 1;
hdr.matrix_coeffs = 1;
}
pub fn hdr_parse(data: &[u8], hdr: &mut HdrInfo) -> Result<()> {
hdr_init(hdr);
if data.len() < 6 {
return Err(ErrorCode::Io);
}
hdr.color_primaries = ((data[0] as u16) << 8) | (data[1] as u16);
hdr.transfer_chars = ((data[2] as u16) << 8) | (data[3] as u16);
hdr.matrix_coeffs = ((data[4] as u16) << 8) | (data[5] as u16);
Ok(())
}
pub fn hdr_write(hdr: &HdrInfo, buf: &mut [u8]) -> usize {
if buf.len() < 6 {
return 0;
}
buf[0] = (hdr.color_primaries >> 8) as u8;
buf[1] = hdr.color_primaries as u8;
buf[2] = (hdr.transfer_chars >> 8) as u8;
buf[3] = hdr.transfer_chars as u8;
buf[4] = (hdr.matrix_coeffs >> 8) as u8;
buf[5] = hdr.matrix_coeffs as u8;
6
}
pub fn metadata_colorinfo_parse(data: &[u8], hdr: &mut HdrInfo) -> Result<()> {
hdr_init(hdr);
if data.len() < 6 {
return Err(ErrorCode::Io);
}
hdr_parse(data, hdr)
}
pub fn videocodecid_from_fourcc(fourcc: &[u8]) -> u32 {
if fourcc.len() < 4 {
return 7; }
((fourcc[0] as u32) << 24)
| ((fourcc[1] as u32) << 16)
| ((fourcc[2] as u32) << 8)
| (fourcc[3] as u32)
}
pub fn caps_negotiate() -> Result<()> {
Err(ErrorCode::Unsupported)
}