use num_derive::FromPrimitive;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[repr(C)]
pub enum ChromaSamplePosition {
#[default]
Unknown,
Vertical,
Colocated,
}
pub use crate::frame_buffer::pixel::ChromaSampling;
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[repr(C)]
pub enum ColorPrimaries {
BT709 = 1,
#[default]
Unspecified,
BT470M = 4,
BT470BG,
BT601,
SMPTE240,
GenericFilm,
BT2020,
XYZ,
SMPTE431,
SMPTE432,
EBU3213 = 22,
}
arg_enum!(ColorPrimaries {
BT709,
Unspecified,
BT470M,
BT470BG,
BT601,
SMPTE240,
GenericFilm,
BT2020,
XYZ,
SMPTE431,
SMPTE432,
EBU3213,
});
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[repr(C)]
pub enum TransferCharacteristics {
BT709 = 1,
#[default]
Unspecified,
BT470M = 4,
BT470BG,
BT601,
SMPTE240,
Linear,
Log100,
Log100Sqrt10,
IEC61966,
BT1361,
SRGB,
BT2020_10Bit,
BT2020_12Bit,
SMPTE2084,
SMPTE428,
HLG,
}
arg_enum!(TransferCharacteristics {
BT709,
Unspecified,
BT470M,
BT470BG,
BT601,
SMPTE240,
Linear,
Log100,
Log100Sqrt10,
IEC61966,
BT1361,
SRGB,
BT2020_10Bit,
BT2020_12Bit,
SMPTE2084,
SMPTE428,
HLG,
});
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[repr(C)]
pub enum MatrixCoefficients {
Identity = 0,
BT709,
#[default]
Unspecified,
FCC = 4,
BT470BG,
BT601,
SMPTE240,
YCgCo,
BT2020NCL,
BT2020CL,
SMPTE2085,
ChromatNCL,
ChromatCL,
ICtCp,
}
arg_enum!(MatrixCoefficients {
Identity,
BT709,
Unspecified,
FCC,
BT470BG,
BT601,
SMPTE240,
YCgCo,
BT2020NCL,
BT2020CL,
SMPTE2085,
ChromatNCL,
ChromatCL,
ICtCp,
});
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct ColorDescription {
pub color_primaries: ColorPrimaries,
pub transfer_characteristics: TransferCharacteristics,
pub matrix_coefficients: MatrixCoefficients,
}
impl ColorDescription {
pub(crate) fn is_srgb_triple(self) -> bool {
self.color_primaries == ColorPrimaries::BT709
&& self.transfer_characteristics == TransferCharacteristics::SRGB
&& self.matrix_coefficients == MatrixCoefficients::Identity
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[repr(C)]
pub enum PixelRange {
#[default]
Limited,
Full,
}
arg_enum!(PixelRange { Limited, Full });
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct ContentLight {
pub max_content_light_level: u16,
pub max_frame_average_light_level: u16,
}
#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[repr(C)]
pub struct ChromaticityPoint {
pub x: u16,
pub y: u16,
}
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct MasteringDisplay {
pub primaries: [ChromaticityPoint; 3],
pub white_point: ChromaticityPoint,
pub max_luminance: u32,
pub min_luminance: u32,
}