pub use zenavif_parse::{
CleanAperture, ColorInformation, ContentLightLevel, GainMapChannel, GainMapMetadata,
ImageMirror, ImageRotation, MasteringDisplayColourVolume, PixelAspectRatio,
};
#[derive(Debug, Clone)]
pub struct AvifGainMap {
pub metadata: GainMapMetadata,
pub gain_map_data: Vec<u8>,
pub alt_color_info: Option<ColorInformation>,
}
#[derive(Debug, Clone)]
pub struct AvifDepthMap {
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ChromaSampling {
Cs420,
Cs422,
Cs444,
Monochrome,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct ColorPrimaries(pub u8);
impl ColorPrimaries {
pub const BT709: Self = Self(1);
pub const UNKNOWN: Self = Self(2);
pub const BT470M: Self = Self(4);
pub const BT470BG: Self = Self(5);
pub const BT601: Self = Self(6);
pub const SMPTE240: Self = Self(7);
pub const FILM: Self = Self(8);
pub const BT2020: Self = Self(9);
pub const XYZ: Self = Self(10);
pub const SMPTE431: Self = Self(11);
pub const SMPTE432: Self = Self(12);
pub const EBU3213: Self = Self(22);
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct TransferCharacteristics(pub u8);
impl TransferCharacteristics {
pub const BT709: Self = Self(1);
pub const UNKNOWN: Self = Self(2);
pub const BT470M: Self = Self(4);
pub const BT470BG: Self = Self(5);
pub const BT601: Self = Self(6);
pub const SMPTE240: Self = Self(7);
pub const LINEAR: Self = Self(8);
pub const LOG100: Self = Self(9);
pub const LOG100_SQRT10: Self = Self(10);
pub const IEC61966: Self = Self(11);
pub const BT1361: Self = Self(12);
pub const SRGB: Self = Self(13);
pub const BT2020_10BIT: Self = Self(14);
pub const BT2020_12BIT: Self = Self(15);
pub const SMPTE2084: Self = Self(16);
pub const SMPTE428: Self = Self(17);
pub const HLG: Self = Self(18);
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct MatrixCoefficients(pub u8);
impl MatrixCoefficients {
pub const IDENTITY: Self = Self(0);
pub const BT709: Self = Self(1);
pub const UNKNOWN: Self = Self(2);
pub const FCC: Self = Self(4);
pub const BT470BG: Self = Self(5);
pub const BT601: Self = Self(6);
pub const SMPTE240: Self = Self(7);
pub const YCGCO: Self = Self(8);
pub const BT2020_NCL: Self = Self(9);
pub const BT2020_CL: Self = Self(10);
pub const SMPTE2085: Self = Self(11);
pub const CHROMAT_NCL: Self = Self(12);
pub const CHROMAT_CL: Self = Self(13);
pub const ICTCP: Self = Self(14);
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ColorRange {
#[default]
Limited,
Full,
}
#[derive(Debug, Clone)]
pub struct ImageInfo {
pub width: u32,
pub height: u32,
pub bit_depth: u8,
pub has_alpha: bool,
pub premultiplied_alpha: bool,
pub monochrome: bool,
pub color_primaries: ColorPrimaries,
pub transfer_characteristics: TransferCharacteristics,
pub matrix_coefficients: MatrixCoefficients,
pub color_range: ColorRange,
pub chroma_sampling: ChromaSampling,
pub icc_profile: Option<Vec<u8>>,
pub rotation: Option<ImageRotation>,
pub mirror: Option<ImageMirror>,
pub clean_aperture: Option<CleanAperture>,
pub pixel_aspect_ratio: Option<PixelAspectRatio>,
pub content_light_level: Option<ContentLightLevel>,
pub mastering_display: Option<MasteringDisplayColourVolume>,
pub exif: Option<Vec<u8>>,
pub xmp: Option<Vec<u8>>,
pub gain_map: Option<AvifGainMap>,
pub depth_map: Option<AvifDepthMap>,
}
#[derive(Debug)]
pub struct DecodedFrame {
pub pixels: zenpixels::PixelBuffer,
pub duration_ms: u32,
}
#[derive(Debug, Clone)]
pub struct DecodedAnimationInfo {
pub frame_count: usize,
pub loop_count: u32,
pub has_alpha: bool,
pub timescale: u32,
}
#[derive(Debug)]
pub struct DecodedAnimation {
pub frames: Vec<DecodedFrame>,
pub info: DecodedAnimationInfo,
}
impl Default for ImageInfo {
fn default() -> Self {
Self {
width: 0,
height: 0,
bit_depth: 8,
has_alpha: false,
premultiplied_alpha: false,
monochrome: false,
color_primaries: ColorPrimaries::default(),
transfer_characteristics: TransferCharacteristics::default(),
matrix_coefficients: MatrixCoefficients::default(),
color_range: ColorRange::default(),
chroma_sampling: ChromaSampling::Cs420,
icc_profile: None,
rotation: None,
mirror: None,
clean_aperture: None,
pixel_aspect_ratio: None,
content_light_level: None,
mastering_display: None,
exif: None,
xmp: None,
gain_map: None,
depth_map: None,
}
}
}