use arrayvec::ArrayVec;
pub const NUM_Y_POINTS: usize = 14;
pub const NUM_UV_POINTS: usize = 10;
pub const NUM_Y_COEFFS: usize = 24;
pub const NUM_UV_COEFFS: usize = 25;
pub const DEFAULT_GRAIN_SEED: u16 = 10956;
pub type ScalingPoints = ArrayVec<[u8; 2], NUM_Y_POINTS>;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(
feature = "serialize",
derive(serde::Deserialize, serde::Serialize)
)]
pub struct GrainTableSegment {
pub start_time: u64,
pub end_time: u64,
pub scaling_points_y: ArrayVec<[u8; 2], NUM_Y_POINTS>,
pub scaling_points_cb: ArrayVec<[u8; 2], NUM_UV_POINTS>,
pub scaling_points_cr: ArrayVec<[u8; 2], NUM_UV_POINTS>,
pub scaling_shift: u8,
pub ar_coeff_lag: u8,
pub ar_coeffs_y: ArrayVec<i8, NUM_Y_COEFFS>,
pub ar_coeffs_cb: ArrayVec<i8, NUM_UV_COEFFS>,
pub ar_coeffs_cr: ArrayVec<i8, NUM_UV_COEFFS>,
pub ar_coeff_shift: u8,
pub cb_mult: u8,
pub cb_luma_mult: u8,
pub cb_offset: u16,
pub cr_mult: u8,
pub cr_luma_mult: u8,
pub cr_offset: u16,
pub overlap_flag: bool,
pub chroma_scaling_from_luma: bool,
pub grain_scale_shift: u8,
pub random_seed: u16,
}
#[derive(Debug, Clone, Copy)]
pub struct NoiseGenArgs {
pub iso_setting: u32,
pub width: u32,
pub height: u32,
pub transfer_function: TransferFunction,
pub chroma_grain: bool,
pub random_seed: Option<u16>,
}
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TransferFunction {
BT1886,
SMPTE2084,
}