use crate::serialize::*;
use crate::wasm_bindgen::*;
use arg_enum_proc_macro::ArgEnum;
use num_derive::FromPrimitive;
#[wasm_bindgen]
#[derive(
Copy,
Clone,
Debug,
PartialEq,
Eq,
FromPrimitive,
Serialize,
Deserialize,
Default,
)]
#[repr(C)]
pub enum ChromaSamplePosition {
#[default]
Unknown,
Vertical,
Colocated,
}
pub use v_frame::pixel::ChromaSampling;
#[derive(
ArgEnum,
Debug,
Clone,
Copy,
PartialEq,
Eq,
FromPrimitive,
Serialize,
Deserialize,
Default,
)]
#[repr(C)]
pub enum ColorPrimaries {
BT709 = 1,
#[default]
Unspecified,
BT470M = 4,
BT470BG,
BT601,
SMPTE240,
GenericFilm,
BT2020,
XYZ,
SMPTE431,
SMPTE432,
EBU3213 = 22,
}
#[derive(
ArgEnum,
Debug,
Clone,
Copy,
PartialEq,
Eq,
FromPrimitive,
Serialize,
Deserialize,
Default,
)]
#[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,
}
#[derive(
ArgEnum,
Debug,
Clone,
Copy,
PartialEq,
Eq,
FromPrimitive,
Serialize,
Deserialize,
Default,
)]
#[repr(C)]
pub enum MatrixCoefficients {
Identity = 0,
BT709,
#[default]
Unspecified,
FCC = 4,
BT470BG,
BT601,
SMPTE240,
YCgCo,
BT2020NCL,
BT2020CL,
SMPTE2085,
ChromatNCL,
ChromatCL,
ICtCp,
}
#[derive(Copy, Clone, Debug, 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
}
}
#[wasm_bindgen]
#[derive(
ArgEnum,
Debug,
Clone,
Copy,
PartialEq,
Eq,
FromPrimitive,
Serialize,
Deserialize,
Default,
)]
#[repr(C)]
pub enum PixelRange {
#[default]
Limited,
Full,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
pub struct ContentLight {
pub max_content_light_level: u16,
pub max_frame_average_light_level: u16,
}
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
#[repr(C)]
pub struct ChromaticityPoint {
pub x: u16,
pub y: u16,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
pub struct MasteringDisplay {
pub primaries: [ChromaticityPoint; 3],
pub white_point: ChromaticityPoint,
pub max_luminance: u32,
pub min_luminance: u32,
}