Skip to content

Commit

Permalink
Rav1dFrameContext_lf::lr_mask: Make into a Vec
Browse files Browse the repository at this point in the history
  • Loading branch information
randomPoison committed Feb 27, 2024
1 parent 7388968 commit 654cf14
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 30 deletions.
39 changes: 14 additions & 25 deletions src/decode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@ use crate::src::lf_mask::rav1d_calc_eih;
use crate::src::lf_mask::rav1d_calc_lf_values;
use crate::src::lf_mask::rav1d_create_lf_mask_inter;
use crate::src::lf_mask::rav1d_create_lf_mask_intra;
use crate::src::lf_mask::Av1Restoration;
use crate::src::lf_mask::Av1RestorationUnit;
use crate::src::log::Rav1dLog as _;
use crate::src::loopfilter::rav1d_loop_filter_dsp_init;
Expand Down Expand Up @@ -3924,9 +3923,9 @@ unsafe fn setup_tile(
if sb128x >= f.sr_sb128w {
continue;
}
&(*f.lf.lr_mask.offset((sb_idx + sb128x) as isize)).lr[p][u_idx as usize]
&f.lf.lr_mask[(sb_idx + sb128x) as usize].lr[p][u_idx as usize]
} else {
&(*f.lf.lr_mask.offset(sb_idx as isize)).lr[p][unit_idx as usize]
&f.lf.lr_mask[sb_idx as usize].lr[p][unit_idx as usize]
};

let lr = lr_ref.get();
Expand All @@ -3946,13 +3945,12 @@ unsafe fn setup_tile(
}

unsafe fn read_restoration_info(
t: &mut Rav1dTaskContext,
f: &Rav1dFrameData,
ts: &mut Rav1dTileState,
lr: &mut Av1RestorationUnit,
p: usize,
frame_type: Rav1dRestorationType,
debug_block_info: bool,
) {
let ts = &mut *t.ts;
let lr_ref = ts.lr_ref[p];

if frame_type == RAV1D_RESTORATION_SWITCHABLE {
Expand Down Expand Up @@ -4006,7 +4004,7 @@ unsafe fn read_restoration_info(
lr.filter_h[2] = msac_decode_lr_subexp(ts, lr_ref.filter_h[2], 3, 17);
lr.sgr_weights = lr_ref.sgr_weights;
ts.lr_ref[p] = *lr;
if debug_block_info!(f, t) {
if debug_block_info {
println!(
"Post-lr_wiener[pl={},v[{},{},{}],h[{},{},{}]]: r={}",
p,
Expand Down Expand Up @@ -4036,7 +4034,7 @@ unsafe fn read_restoration_info(
lr.filter_v = lr_ref.filter_v;
lr.filter_h = lr_ref.filter_h;
ts.lr_ref[p] = *lr;
if debug_block_info!(f, t) {
if debug_block_info {
println!(
"Post-lr_sgrproj[pl={},idx={},w[{},{}]]: r={}",
p, lr.sgr_idx, lr.sgr_weights[0], lr.sgr_weights[1], ts.msac.rng,
Expand Down Expand Up @@ -4143,7 +4141,7 @@ pub(crate) unsafe fn rav1d_decode_tile_sbrow(
cdef_idx[0] = -1;
t.cur_sb_cdef_idx_ptr = cdef_idx.as_mut_ptr();
}
let frame_hdr = f.frame_hdr();
let frame_hdr = &***f.frame_hdr.as_ref().unwrap();
// Restoration filter
for p in 0..3 {
if (f.lf.restore_planes >> p) & 1 == 0 {
Expand Down Expand Up @@ -4184,10 +4182,9 @@ pub(crate) unsafe fn rav1d_decode_tile_sbrow(
let px_x = x << unit_size_log2 + ss_hor;
let sb_idx = (t.by >> 5) * f.sr_sb128w + (px_x >> 7);
let unit_idx = ((t.by & 16) >> 3) + ((px_x & 64) >> 6);
let lr = (*(f.lf.lr_mask).offset(sb_idx as isize)).lr[p][unit_idx as usize]
.get_mut();
let lr = f.lf.lr_mask[sb_idx as usize].lr[p][unit_idx as usize].get_mut();

read_restoration_info(t, f, lr, p, frame_type);
read_restoration_info(&mut *t.ts, lr, p, frame_type, debug_block_info!(f, t));
}
} else {
let x = 4 * t.bx >> ss_hor;
Expand All @@ -4202,10 +4199,9 @@ pub(crate) unsafe fn rav1d_decode_tile_sbrow(
}
let sb_idx = (t.by >> 5) * f.sr_sb128w + (t.bx >> 5);
let unit_idx = ((t.by & 16) >> 3) + ((t.bx & 16) >> 4);
let lr =
(*(f.lf.lr_mask).offset(sb_idx as isize)).lr[p][unit_idx as usize].get_mut();
let lr = f.lf.lr_mask[sb_idx as usize].lr[p][unit_idx as usize].get_mut();

read_restoration_info(t, f, lr, p, frame_type);
read_restoration_info(&mut *t.ts, lr, p, frame_type, debug_block_info!(f, t));
}
}
decode_sb(c, t, f, root_bl, c.intra_edge.root(root_bl))?;
Expand Down Expand Up @@ -4520,16 +4516,9 @@ pub(crate) unsafe fn rav1d_decode_frame_init(

f.sr_sb128w = f.sr_cur.p.p.w + 127 >> 7;
let lr_mask_sz = f.sr_sb128w * f.sb128h;
if lr_mask_sz != f.lf.lr_mask_sz {
freep(&mut f.lf.lr_mask as *mut *mut Av1Restoration as *mut c_void);
f.lf.lr_mask = malloc(::core::mem::size_of::<Av1Restoration>() * lr_mask_sz as usize)
as *mut Av1Restoration;
if f.lf.lr_mask.is_null() {
f.lf.lr_mask_sz = 0;
return Err(ENOMEM);
}
f.lf.lr_mask_sz = lr_mask_sz;
}
// TODO: Fallible allocation
f.lf.lr_mask
.resize_with(lr_mask_sz as usize, Default::default);
f.lf.restore_planes = frame_hdr
.restoration
.r#type
Expand Down
3 changes: 1 addition & 2 deletions src/internal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -448,8 +448,7 @@ pub struct Rav1dFrameContext_frame_thread {
pub struct Rav1dFrameContext_lf {
pub level: Vec<[u8; 4]>,
pub mask: Vec<Av1Filter>, /* len = w*h */
pub lr_mask: *mut Av1Restoration,
pub lr_mask_sz: c_int,
pub lr_mask: Vec<Av1Restoration>,
pub cdef_buf_plane_sz: [c_int; 2], /* stride*sbh*4 */
pub cdef_buf_sbh: c_int,
pub lr_buf_plane_sz: [c_int; 2], /* (stride*sbh*4) << sb128 if n_tc > 1, else stride*4 */
Expand Down
1 change: 1 addition & 0 deletions src/lf_mask.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ pub struct Av1Filter {
pub noskip_mask: [[u16; 2]; 16],
}

#[derive(Default)]
#[repr(C)]
pub struct Av1Restoration {
pub lr: [[Cell<Av1RestorationUnit>; 4]; 3],
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -913,7 +913,7 @@ impl Drop for Rav1dContext {
free(f.a as *mut c_void);
let _ = mem::take(&mut f.tiles);
let _ = mem::take(&mut f.lf.mask); // TODO: remove when context is owned
free(f.lf.lr_mask as *mut c_void);
let _ = mem::take(&mut f.lf.lr_mask); // TODO: remove when context is owned
let _ = mem::take(&mut f.lf.level);
free(f.lf.tx_lpf_right_edge[0] as *mut c_void);
free(f.lf.start_of_tile_row as *mut c_void);
Expand Down
4 changes: 2 additions & 2 deletions src/lr_apply.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,14 +182,14 @@ unsafe fn lr_sbrow<BD: BitDepth>(
aligned_unit_pos <<= ss_ver;
let sb_idx = (aligned_unit_pos >> 7) * f.sr_sb128w;
let unit_idx = (aligned_unit_pos >> 6 & 1) << 1;
lr[0] = (*(f.lf.lr_mask).offset(sb_idx as isize)).lr[plane as usize][unit_idx as usize].get();
lr[0] = f.lf.lr_mask[sb_idx as usize].lr[plane as usize][unit_idx as usize].get();
let mut restore = lr[0].r#type != RAV1D_RESTORATION_NONE;
let mut x = 0;
let mut bit = false;
while x + max_unit_size <= w {
let next_x = x + unit_size;
let next_u_idx = unit_idx + (next_x >> shift_hor - 1 & 1);
lr[!bit as usize] = (*(f.lf.lr_mask).offset((sb_idx + (next_x >> shift_hor)) as isize)).lr
lr[!bit as usize] = f.lf.lr_mask[(sb_idx + (next_x >> shift_hor)) as usize].lr
[plane as usize][next_u_idx as usize]
.get();
let restore_next = lr[!bit as usize].r#type != RAV1D_RESTORATION_NONE;
Expand Down

0 comments on commit 654cf14

Please sign in to comment.