Skip to content

Commit be56aff

Browse files
committed
enum Rav1dFilterMode: Use instead of u8s or Dav1dFilterMode in more places.
1 parent 37a2947 commit be56aff

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

include/dav1d/headers.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::src::align::ArrayDefault;
12
use crate::src::enum_map::EnumKey;
23
use crate::src::levels::SegmentId;
34
use crate::src::relaxed_atomic::RelaxedAtomic;
@@ -139,7 +140,7 @@ pub const DAV1D_FILTER_8TAP_SMOOTH: Dav1dFilterMode =
139140
pub const DAV1D_FILTER_8TAP_REGULAR: Dav1dFilterMode =
140141
Rav1dFilterMode::Regular8Tap as Dav1dFilterMode;
141142

142-
#[derive(Clone, Copy, PartialEq, Eq, FromRepr, Default)]
143+
#[derive(Clone, Copy, PartialEq, Eq, FromRepr, Default, Debug)]
143144
pub enum Rav1dFilterMode {
144145
#[default] // Not really a real default.
145146
Regular8Tap = 0,
@@ -149,9 +150,15 @@ pub enum Rav1dFilterMode {
149150
Switchable = 4,
150151
}
151152

153+
impl ArrayDefault for Rav1dFilterMode {
154+
fn default() -> Self {
155+
Default::default()
156+
}
157+
}
158+
152159
impl Rav1dFilterMode {
153160
pub const N_FILTERS: usize = 4;
154-
pub const N_SWITCHABLE_FILTERS: u8 = 3;
161+
pub const N_SWITCHABLE_FILTERS: Self = Self::Bilinear;
155162
}
156163

157164
impl From<Rav1dFilterMode> for Dav1dFilterMode {

src/decode.rs

+12-11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use crate::include::common::intops::clip;
55
use crate::include::common::intops::clip_u8;
66
use crate::include::common::intops::iclip;
77
use crate::include::dav1d::common::Rav1dDataProps;
8-
use crate::include::dav1d::headers::Dav1dFilterMode;
98
use crate::include::dav1d::headers::Rav1dFilterMode;
109
use crate::include::dav1d::headers::Rav1dFrameHeader;
1110
use crate::include::dav1d::headers::Rav1dFrameHeader_tiling;
@@ -2983,45 +2982,47 @@ fn decode_b(
29832982
if has_subpel_filter {
29842983
let comp = comp_type.is_some();
29852984
let ctx1 = get_filter_ctx(&f.a[t.a], &t.l, comp, false, r#ref[0], by4, bx4);
2986-
let filter0 = rav1d_msac_decode_symbol_adapt4(
2985+
let filter0 = Rav1dFilterMode::from_repr(rav1d_msac_decode_symbol_adapt4(
29872986
&mut ts_c.msac,
29882987
&mut ts_c.cdf.m.filter.0[0][ctx1 as usize],
29892988
Rav1dFilterMode::N_SWITCHABLE_FILTERS as u8 - 1,
2990-
) as Dav1dFilterMode;
2989+
) as usize)
2990+
.unwrap();
29912991
if seq_hdr.dual_filter != 0 {
29922992
let ctx2 = get_filter_ctx(&f.a[t.a], &t.l, comp, true, r#ref[0], by4, bx4);
29932993
if debug_block_info!(f, t.b) {
29942994
println!(
2995-
"Post-subpel_filter1[{},ctx={}]: r={}",
2995+
"Post-subpel_filter1[{:?},ctx={}]: r={}",
29962996
filter0, ctx1, ts_c.msac.rng,
29972997
);
29982998
}
2999-
let filter1 = rav1d_msac_decode_symbol_adapt4(
2999+
let filter1 = Rav1dFilterMode::from_repr(rav1d_msac_decode_symbol_adapt4(
30003000
&mut ts_c.msac,
30013001
&mut ts_c.cdf.m.filter.0[1][ctx2 as usize],
30023002
Rav1dFilterMode::N_SWITCHABLE_FILTERS as u8 - 1,
3003-
) as Dav1dFilterMode;
3003+
) as usize)
3004+
.unwrap();
30043005
if debug_block_info!(f, t.b) {
30053006
println!(
3006-
"Post-subpel_filter2[{},ctx={}]: r={}",
3007+
"Post-subpel_filter2[{:?},ctx={}]: r={}",
30073008
filter1, ctx2, ts_c.msac.rng,
30083009
);
30093010
}
30103011
[filter0, filter1]
30113012
} else {
30123013
if debug_block_info!(f, t.b) {
30133014
println!(
3014-
"Post-subpel_filter[{},ctx={}]: r={}",
3015+
"Post-subpel_filter[{:?},ctx={}]: r={}",
30153016
filter0, ctx1, ts_c.msac.rng
30163017
);
30173018
}
30183019
[filter0; 2]
30193020
}
30203021
} else {
3021-
[Rav1dFilterMode::Regular8Tap as u8; 2]
3022+
[Rav1dFilterMode::Regular8Tap; 2]
30223023
}
30233024
} else {
3024-
[frame_hdr.subpel_filter_mode as u8; 2]
3025+
[frame_hdr.subpel_filter_mode; 2]
30253026
};
30263027
let filter2d = dav1d_filter_2d[filter[1] as usize][filter[0] as usize];
30273028

@@ -3805,7 +3806,7 @@ fn reset_context(ctx: &mut BlockContext, keyframe: bool, pass: c_int) {
38053806
filter
38063807
.get_mut()
38073808
.0
3808-
.fill(Rav1dFilterMode::N_SWITCHABLE_FILTERS as u8);
3809+
.fill(Rav1dFilterMode::N_SWITCHABLE_FILTERS);
38093810
}
38103811
ctx.seg_pred.get_mut().0.fill(0);
38113812
ctx.pal_sz.get_mut().0.fill(0);

src/env.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ pub struct BlockContext {
4040
pub intra: DisjointMut<Align8<[u8; 32]>>,
4141
pub comp_type: DisjointMut<Align8<[Option<CompInterType>; 32]>>,
4242
pub r#ref: [DisjointMut<Align8<[i8; 32]>>; 2],
43-
pub filter: [DisjointMut<Align8<[u8; 32]>>; 2],
43+
44+
/// No [`Rav1dFilterMode::Switchable`]s here.
45+
/// TODO(kkysen) split [`Rav1dFilterMode`] into a version without [`Rav1dFilterMode::Switchable`].
46+
pub filter: [DisjointMut<Align8<[Rav1dFilterMode; 32]>>; 2],
47+
4448
pub tx_intra: DisjointMut<Align8<[i8; 32]>>,
4549
pub tx: DisjointMut<Align8<[u8; 32]>>,
4650
pub tx_lpf_y: DisjointMut<Align8<[u8; 32]>>,
@@ -169,15 +173,15 @@ pub fn get_filter_ctx(
169173
});
170174

171175
(comp as u8) * 4
172-
+ if a_filter == l_filter {
176+
+ (if a_filter == l_filter {
173177
a_filter
174178
} else if a_filter == Rav1dFilterMode::N_SWITCHABLE_FILTERS {
175179
l_filter
176180
} else if l_filter == Rav1dFilterMode::N_SWITCHABLE_FILTERS {
177181
a_filter
178182
} else {
179183
Rav1dFilterMode::N_SWITCHABLE_FILTERS
180-
}
184+
} as u8)
181185
}
182186

183187
#[inline]

0 commit comments

Comments
 (0)