From 65226813cae681c0e182252eb321b3eb2a0d820a Mon Sep 17 00:00:00 2001 From: Nicole LeGare Date: Tue, 27 Feb 2024 10:04:50 -0800 Subject: [PATCH] `Rav1dFrameContext_lf::lr_mask`: Make into a `Vec` --- src/decode.rs | 36 +++++++++++++----------------------- src/internal.rs | 3 +-- src/lf_mask.rs | 1 + src/lib.rs | 2 +- src/lr_apply.rs | 4 ++-- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 1a11c8ff8..c25e4759c 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -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; @@ -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(); @@ -3947,10 +3946,10 @@ unsafe fn setup_tile( unsafe fn read_restoration_info( t: &mut Rav1dTaskContext, - f: &Rav1dFrameData, lr: &mut Av1RestorationUnit, p: usize, frame_type: Rav1dRestorationType, + debug_block_info: bool, ) { let ts = &mut *t.ts; let lr_ref = ts.lr_ref[p]; @@ -4006,7 +4005,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, @@ -4036,7 +4035,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, @@ -4143,7 +4142,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 { @@ -4184,10 +4183,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(t, lr, p, frame_type, debug_block_info!(f, t)); } } else { let x = 4 * t.bx >> ss_hor; @@ -4202,10 +4200,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(t, lr, p, frame_type, debug_block_info!(f, t)); } } decode_sb(c, t, f, root_bl, c.intra_edge.root(root_bl))?; @@ -4520,16 +4517,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::() * 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 diff --git a/src/internal.rs b/src/internal.rs index 2e707df32..eba5e4867 100644 --- a/src/internal.rs +++ b/src/internal.rs @@ -448,8 +448,7 @@ pub struct Rav1dFrameContext_frame_thread { pub struct Rav1dFrameContext_lf { pub level: Vec<[u8; 4]>, pub mask: Vec, /* len = w*h */ - pub lr_mask: *mut Av1Restoration, - pub lr_mask_sz: c_int, + pub lr_mask: Vec, 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 */ diff --git a/src/lf_mask.rs b/src/lf_mask.rs index 777978e38..1b63d3541 100644 --- a/src/lf_mask.rs +++ b/src/lf_mask.rs @@ -41,6 +41,7 @@ pub struct Av1Filter { pub noskip_mask: [[u16; 2]; 16], } +#[derive(Default)] #[repr(C)] pub struct Av1Restoration { pub lr: [[Cell; 4]; 3], diff --git a/src/lib.rs b/src/lib.rs index d8d12db54..336fbbf06 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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); diff --git a/src/lr_apply.rs b/src/lr_apply.rs index f61ac743c..55de086e4 100644 --- a/src/lr_apply.rs +++ b/src/lr_apply.rs @@ -182,14 +182,14 @@ unsafe fn lr_sbrow( 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;