Skip to content

Commit

Permalink
struct Rav1dFilmGrainData::*_shift: Make bit shift fields u8s (#550)
Browse files Browse the repository at this point in the history
After #549 reverted any asm changes, other changes to
`Rav1dFilmGrainData` are pretty easy to do now and shouldn't cause extra
overhead over the existing conversions.
kkysen authored Nov 7, 2023
2 parents 311d80f + 3acdcb2 commit c70d0ee
Showing 3 changed files with 20 additions and 20 deletions.
18 changes: 9 additions & 9 deletions include/dav1d/headers.rs
Original file line number Diff line number Diff line change
@@ -1038,12 +1038,12 @@ pub struct Rav1dFilmGrainData {
pub chroma_scaling_from_luma: bool,
pub num_uv_points: [c_int; 2],
pub uv_points: [[[u8; 2]; 10]; 2],
pub scaling_shift: c_int,
pub scaling_shift: u8,
pub ar_coeff_lag: c_int,
pub ar_coeffs_y: [i8; 24],
pub ar_coeffs_uv: [[i8; 28]; 2],
pub ar_coeff_shift: u64,
pub grain_scale_shift: c_int,
pub ar_coeff_shift: u8,
pub grain_scale_shift: u8,
pub uv_mult: [c_int; 2],
pub uv_luma_mult: [c_int; 2],
pub uv_offset: [c_int; 2],
@@ -1139,12 +1139,12 @@ impl From<Dav1dFilmGrainData> for Rav1dFilmGrainData {
chroma_scaling_from_luma: chroma_scaling_from_luma != 0,
num_uv_points,
uv_points,
scaling_shift,
scaling_shift: scaling_shift as u8,
ar_coeff_lag,
ar_coeffs_y,
ar_coeffs_uv,
ar_coeff_shift,
grain_scale_shift,
ar_coeff_shift: ar_coeff_shift as u8,
grain_scale_shift: grain_scale_shift as u8,
uv_mult,
uv_luma_mult,
uv_offset,
@@ -1182,12 +1182,12 @@ impl From<Rav1dFilmGrainData> for Dav1dFilmGrainData {
chroma_scaling_from_luma: chroma_scaling_from_luma as c_int,
num_uv_points,
uv_points,
scaling_shift,
scaling_shift: scaling_shift.into(),
ar_coeff_lag,
ar_coeffs_y,
ar_coeffs_uv,
ar_coeff_shift,
grain_scale_shift,
ar_coeff_shift: ar_coeff_shift.into(),
grain_scale_shift: grain_scale_shift.into(),
uv_mult,
uv_luma_mult,
uv_offset,
16 changes: 8 additions & 8 deletions src/filmgrain.rs
Original file line number Diff line number Diff line change
@@ -209,10 +209,9 @@ fn get_random_number(bits: u8, state: &mut c_uint) -> c_int {
}

#[inline]
fn round2<T, B>(x: T, shift: B) -> T
fn round2<T>(x: T, shift: u8) -> T
where
T: Add<Output = T> + From<u8> + Shl<B, Output = T> + Shr<B, Output = T> + Shr<u8, Output = T>,
B: Copy,
T: Add<Output = T> + From<u8> + Shl<u8, Output = T> + Shr<u8, Output = T>,
{
(x + (T::from(1) << shift >> 1)) >> shift
}
@@ -234,7 +233,7 @@ unsafe fn generate_grain_y_rust<BD: BitDepth>(
data: &Rav1dFilmGrainData,
bd: BD,
) {
let bitdepth_min_8 = bd.bitdepth() as c_int - 8;
let bitdepth_min_8 = bd.bitdepth() - 8;
let mut seed: c_uint = data.seed;
let shift = 4 - bitdepth_min_8 + data.grain_scale_shift;
let grain_ctr = (128 as c_int) << bitdepth_min_8;
@@ -285,9 +284,9 @@ unsafe fn generate_grain_uv_rust<BD: BitDepth>(
is_suby: bool,
bd: BD,
) {
let [subx, suby] = [is_subx, is_suby].map(|it| it as c_int);
let [subx, suby] = [is_subx, is_suby].map(|it| it as u8);

let bitdepth_min_8 = bd.bitdepth() as c_int - 8;
let bitdepth_min_8 = bd.bitdepth() - 8;
let mut seed: c_uint = data.seed
^ (if uv != 0 {
0x49d8 as c_int
@@ -338,7 +337,8 @@ unsafe fn generate_grain_uv_rust<BD: BitDepth>(
let lumaY = (y - ar_pad << suby) + ar_pad;
for i in 0..=suby {
for j in 0..=subx {
luma += buf_y[(lumaY + i) as usize][(lumaX + j) as usize]
luma += buf_y[lumaY as usize + i as usize]
[lumaX as usize + j as usize]
.as_::<c_int>();
}
}
@@ -877,7 +877,7 @@ unsafe fn fgy_32x32xn_neon<BD: BitDepth>(
src_row.offset(bx as isize).cast(),
stride,
scaling.cast(),
data.scaling_shift,
data.scaling_shift.into(),
grain_lut.cast(),
&offsets,
bh,
6 changes: 3 additions & 3 deletions src/obu.rs
Original file line number Diff line number Diff line change
@@ -1488,7 +1488,7 @@ unsafe fn parse_frame_hdr(c: *mut Rav1dContext, gb: *mut GetBits) -> Rav1dResult
return parse_frame_hdr_error(c);
}
(*fgd).scaling_shift =
(rav1d_get_bits(gb, 2 as c_int)).wrapping_add(8 as c_int as c_uint) as c_int;
(rav1d_get_bits(gb, 2 as c_int)).wrapping_add(8 as c_int as c_uint) as u8;
(*fgd).ar_coeff_lag = rav1d_get_bits(gb, 2 as c_int) as c_int;
let num_y_pos = 2 * (*fgd).ar_coeff_lag * ((*fgd).ar_coeff_lag + 1);
if (*fgd).num_y_points != 0 {
@@ -1517,8 +1517,8 @@ unsafe fn parse_frame_hdr(c: *mut Rav1dContext, gb: *mut GetBits) -> Rav1dResult
pl_0 += 1;
}
(*fgd).ar_coeff_shift =
(rav1d_get_bits(gb, 2 as c_int)).wrapping_add(6 as c_int as c_uint) as u64;
(*fgd).grain_scale_shift = rav1d_get_bits(gb, 2 as c_int) as c_int;
(rav1d_get_bits(gb, 2 as c_int)).wrapping_add(6 as c_int as c_uint) as u8;
(*fgd).grain_scale_shift = rav1d_get_bits(gb, 2 as c_int) as u8;
let mut pl_1 = 0;
while pl_1 < 2 {
if (*fgd).num_uv_points[pl_1 as usize] != 0 {

0 comments on commit c70d0ee

Please sign in to comment.