Skip to content

Commit

Permalink
static ss_size_mul: Make an EnumMap.
Browse files Browse the repository at this point in the history
  • Loading branch information
kkysen committed Nov 3, 2023
1 parent c4cb2ec commit b259c61
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 14 deletions.
9 changes: 9 additions & 0 deletions include/dav1d/headers.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::src::enum_map::EnumKey;
use std::ffi::c_int;
use std::ffi::c_uint;
use std::ops::BitAnd;
Expand Down Expand Up @@ -208,6 +209,14 @@ pub(crate) enum Rav1dPixelLayout {
I444,
}

impl EnumKey<4> for Rav1dPixelLayout {
const VALUES: [Self; 4] = [Self::I400, Self::I420, Self::I422, Self::I444];

fn as_usize(self) -> usize {
self as usize
}
}

impl BitAnd for Rav1dPixelLayout {
type Output = bool;

Expand Down
25 changes: 15 additions & 10 deletions src/decode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ use crate::src::ctx::CaseSet;
use crate::src::data::rav1d_data_props_copy;
use crate::src::data::rav1d_data_unref_internal;
use crate::src::dequant_tables::dav1d_dq_tbl;
use crate::src::enum_map::enum_map;
use crate::src::enum_map::DefaultValue;
use crate::src::enum_map::EnumMap;
use crate::src::env::av1_get_bwd_ref_1_ctx;
use crate::src::env::av1_get_bwd_ref_ctx;
use crate::src::env::av1_get_fwd_ref_1_ctx;
Expand Down Expand Up @@ -3809,15 +3812,17 @@ fn reset_context(ctx: &mut BlockContext, keyframe: bool, pass: c_int) {
ctx.pal_sz.0.fill(0);
}

impl DefaultValue for [u8; 2] {
const DEFAULT: Self = [0; 2];
}

/// `{ Y+U+V, Y+U } * 4`
static ss_size_mul: [[u8; 2]; 4] = {
let mut a = [[0; 2]; 4];
a[Rav1dPixelLayout::I400 as usize] = [4, 4];
a[Rav1dPixelLayout::I420 as usize] = [6, 5];
a[Rav1dPixelLayout::I422 as usize] = [8, 6];
a[Rav1dPixelLayout::I444 as usize] = [12, 8];
a
};
static ss_size_mul: EnumMap<Rav1dPixelLayout, [u8; 2], 4> = enum_map!(Rav1dPixelLayout => [u8; 2]; match key {
I400 => [4, 4],
I420 => [6, 5],
I422 => [8, 6],
I444 => [12, 8],
});

unsafe fn setup_tile(
ts: &mut Rav1dTileState,
Expand All @@ -3834,7 +3839,7 @@ unsafe fn setup_tile(
let row_sb_end = (*f.frame_hdr).tiling.row_start_sb[tile_row + 1] as c_int;
let sb_shift = f.sb_shift;

let size_mul = &ss_size_mul[f.cur.p.layout as usize];
let size_mul = &ss_size_mul[f.cur.p.layout];
for p in 0..2 {
ts.frame_thread[p].pal_idx = if !(f.frame_thread.pal_idx).is_null() {
f.frame_thread
Expand Down Expand Up @@ -4290,7 +4295,7 @@ pub(crate) unsafe fn rav1d_decode_frame_init(f: &mut Rav1dFrameContext) -> Rav1d
}

let num_sb128 = f.sb128w * f.sb128h;
let size_mul = &ss_size_mul[f.cur.p.layout as usize];
let size_mul = &ss_size_mul[f.cur.p.layout];
let hbd = ((*f.seq_hdr).hbd != 0) as c_int;
if c.n_fc > 1 {
let mut tile_idx = 0;
Expand Down
5 changes: 1 addition & 4 deletions src/enum_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ where
{
/// Create an [`EnumMap`] from an existing array
/// where the array's indices correspond to `K`'s values `as usize`.
#[allow(dead_code)]
pub const fn new(array: [V; N]) -> Self {
Self {
array,
Expand All @@ -46,7 +45,7 @@ where
V: DefaultValue,
{
/// Create an [`EnumMap`] with default values when `V: ` [`DefaultValue`].
#[allow(dead_code)]
#[allow(dead_code)] // TODO(kkysen) remove when used
pub const fn default() -> Self {
Self {
array: [V::DEFAULT; N],
Expand Down Expand Up @@ -87,7 +86,6 @@ where
/// but it also doesn't yet work in `const` contexts.
///
/// [`MaybeUninit`]: std::mem::MaybeUninit
#[allow(unused_macros)]
macro_rules! enum_map {
($K:ty => $V:ty; match key { $($t:tt)* }) => {{
use $crate::src::enum_map::EnumKey;
Expand All @@ -106,5 +104,4 @@ macro_rules! enum_map {
}};
}

#[allow(unused_imports)]
pub(crate) use enum_map;

0 comments on commit b259c61

Please sign in to comment.