use alloc::boxed::Box;
use crate::common::types::MAX_SEGMENTS;
#[derive(Clone, Copy, Default)]
pub(super) struct DequantPair {
pub dc: i16,
pub ac: i16,
}
#[derive(Clone, Copy, Default)]
pub(super) struct PrecomputedFilterParams {
pub filter_level: u8,
pub interior_limit: u8,
pub hev_threshold: u8,
pub mbedge_limit: u8,
pub sub_bedge_limit: u8,
}
pub(super) struct FrameTables {
pub dequant: [[DequantPair; 3]; MAX_SEGMENTS],
pub filter: [[PrecomputedFilterParams; 2]; MAX_SEGMENTS],
pub probs_by_pos: Box<[[[[u8; 11]; 3]; 17]; 4]>,
pub filter_type: bool,
pub filter_level: u8,
pub sharpness_level: u8,
pub prob_skip_false: Option<u8>,
pub segments_enabled: bool,
pub segments_update_map: bool,
pub segment_tree_probs: [u8; 3],
pub segment_delta_values: [bool; MAX_SEGMENTS],
pub segment_quantizer_level: [i8; MAX_SEGMENTS],
pub segment_loopfilter_level: [i8; MAX_SEGMENTS],
pub ref_delta: [i32; 4],
pub mode_delta: [i32; 4],
pub loop_filter_adjustments_enabled: bool,
pub num_partitions: u8,
pub extra_y_rows: usize,
pub version: u8,
pub for_display: bool,
pub pixel_type: u8,
pub width: u16,
pub height: u16,
pub mbwidth: u16,
pub mbheight: u16,
pub uv_quant_indices: [i32; MAX_SEGMENTS],
}
impl FrameTables {
pub fn new() -> Self {
Self {
dequant: [[DequantPair::default(); 3]; MAX_SEGMENTS],
filter: [[PrecomputedFilterParams::default(); 2]; MAX_SEGMENTS],
probs_by_pos: Box::new([[[[0u8; 11]; 3]; 17]; 4]),
filter_type: false,
filter_level: 0,
sharpness_level: 0,
prob_skip_false: None,
segments_enabled: false,
segments_update_map: false,
segment_tree_probs: [255; 3],
segment_delta_values: [false; MAX_SEGMENTS],
segment_quantizer_level: [0; MAX_SEGMENTS],
segment_loopfilter_level: [0; MAX_SEGMENTS],
ref_delta: [0; 4],
mode_delta: [0; 4],
loop_filter_adjustments_enabled: false,
num_partitions: 1,
extra_y_rows: 0,
version: 0,
for_display: false,
pixel_type: 0,
width: 0,
height: 0,
mbwidth: 0,
mbheight: 0,
uv_quant_indices: [0; MAX_SEGMENTS],
}
}
}