From b82f1de81bb625e56346f646870af5be96782ca0 Mon Sep 17 00:00:00 2001 From: Stephen Crane Date: Wed, 31 Jan 2024 17:54:45 -0800 Subject: [PATCH] Add `Rav1dTaskContext` argument to filter functions We want to remove the `Rav1dTaskContext` borrow from `Rav1dFrameContext`, so we need to pass both context structures to filters. --- src/decode.rs | 2 +- src/recon.rs | 18 ++++++++++++------ src/thread_task.rs | 8 ++++---- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index c45420a28..ee1b9c076 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -4834,7 +4834,7 @@ unsafe fn rav1d_decode_frame_main(c: &Rav1dContext, f: &mut Rav1dFrameContext) - } // loopfilter + cdef + restoration - (f.bd_fn.filter_sbrow)(c, f, sby); + (f.bd_fn.filter_sbrow)(c, f, t, sby); } } diff --git a/src/recon.rs b/src/recon.rs index ef90d792e..b2cac4fc3 100644 --- a/src/recon.rs +++ b/src/recon.rs @@ -132,7 +132,8 @@ pub(crate) type recon_b_intra_fn = pub(crate) type recon_b_inter_fn = unsafe fn(&mut Rav1dTaskContext, BlockSize, &Av1Block) -> c_int; -pub(crate) type filter_sbrow_fn = unsafe fn(&Rav1dContext, &mut Rav1dFrameContext, c_int) -> (); +pub(crate) type filter_sbrow_fn = + unsafe fn(&Rav1dContext, &mut Rav1dFrameContext, &mut Rav1dTaskContext, c_int) -> (); pub(crate) type backup_ipred_edge_fn = unsafe fn(&mut Rav1dTaskContext) -> (); @@ -4457,6 +4458,7 @@ pub(crate) unsafe fn rav1d_recon_b_inter( pub(crate) unsafe fn rav1d_filter_sbrow_deblock_cols( c: &Rav1dContext, f: &mut Rav1dFrameContext, + _t: &mut Rav1dTaskContext, sby: c_int, ) { let frame_hdr = &***f.frame_hdr.as_ref().unwrap(); @@ -4492,6 +4494,7 @@ pub(crate) unsafe fn rav1d_filter_sbrow_deblock_cols( pub(crate) unsafe fn rav1d_filter_sbrow_deblock_rows( c: &Rav1dContext, f: &mut Rav1dFrameContext, + _t: &mut Rav1dTaskContext, sby: c_int, ) { let y = sby * f.sb_step * 4; @@ -4580,6 +4583,7 @@ pub(crate) unsafe fn rav1d_filter_sbrow_cdef( pub(crate) unsafe fn rav1d_filter_sbrow_resize( _c: &Rav1dContext, f: &mut Rav1dFrameContext, + _t: &mut Rav1dTaskContext, sby: c_int, ) { let sbsz = f.sb_step; @@ -4646,6 +4650,7 @@ pub(crate) unsafe fn rav1d_filter_sbrow_resize( pub(crate) unsafe fn rav1d_filter_sbrow_lr( c: &Rav1dContext, f: &mut Rav1dFrameContext, + _t: &mut Rav1dTaskContext, sby: c_int, ) { if c.inloop_filters as c_uint & RAV1D_INLOOPFILTER_RESTORATION as c_int as c_uint == 0 { @@ -4667,20 +4672,21 @@ pub(crate) unsafe fn rav1d_filter_sbrow_lr( pub(crate) unsafe fn rav1d_filter_sbrow( c: &Rav1dContext, f: &mut Rav1dFrameContext, + t: &mut Rav1dTaskContext, sby: c_int, ) { - rav1d_filter_sbrow_deblock_cols::(c, f, sby); - rav1d_filter_sbrow_deblock_rows::(c, f, sby); + rav1d_filter_sbrow_deblock_cols::(c, f, t, sby); + rav1d_filter_sbrow_deblock_rows::(c, f, t, sby); let seq_hdr = &***f.seq_hdr.as_ref().unwrap(); let frame_hdr = &***f.frame_hdr.as_ref().unwrap(); if seq_hdr.cdef != 0 { - rav1d_filter_sbrow_cdef::(c, &mut *c.tc, sby); + rav1d_filter_sbrow_cdef::(c, t, sby); } if frame_hdr.size.width[0] != frame_hdr.size.width[1] { - rav1d_filter_sbrow_resize::(c, f, sby); + rav1d_filter_sbrow_resize::(c, f, t, sby); } if f.lf.restore_planes != 0 { - rav1d_filter_sbrow_lr::(c, f, sby); + rav1d_filter_sbrow_lr::(c, f, t, sby); } } diff --git a/src/thread_task.rs b/src/thread_task.rs index e87222ace..735399678 100644 --- a/src/thread_task.rs +++ b/src/thread_task.rs @@ -1224,7 +1224,7 @@ pub unsafe extern "C" fn rav1d_worker_task(data: *mut c_void) -> *mut c_void { } RAV1D_TASK_TYPE_DEBLOCK_COLS => { if f.task_thread.error.load(Ordering::SeqCst) == 0 { - (f.bd_fn.filter_sbrow_deblock_cols)(c, f, sby); + (f.bd_fn.filter_sbrow_deblock_cols)(c, f, tc, sby); } if ensure_progress( ttd, @@ -1243,7 +1243,7 @@ pub unsafe extern "C" fn rav1d_worker_task(data: *mut c_void) -> *mut c_void { } RAV1D_TASK_TYPE_DEBLOCK_ROWS => { if f.task_thread.error.load(Ordering::SeqCst) == 0 { - (f.bd_fn.filter_sbrow_deblock_rows)(c, f, sby); + (f.bd_fn.filter_sbrow_deblock_rows)(c, f, tc, sby); } // signal deblock progress let seq_hdr = &***f.seq_hdr.as_ref().unwrap(); @@ -1304,7 +1304,7 @@ pub unsafe extern "C" fn rav1d_worker_task(data: *mut c_void) -> *mut c_void { let frame_hdr = &***f.frame_hdr.as_ref().unwrap(); if frame_hdr.size.width[0] != frame_hdr.size.width[1] { if f.task_thread.error.load(Ordering::SeqCst) == 0 { - (f.bd_fn.filter_sbrow_resize)(c, f, sby); + (f.bd_fn.filter_sbrow_resize)(c, f, tc, sby); } } task_type = RAV1D_TASK_TYPE_LOOP_RESTORATION; @@ -1314,7 +1314,7 @@ pub unsafe extern "C" fn rav1d_worker_task(data: *mut c_void) -> *mut c_void { if f.task_thread.error.load(Ordering::SeqCst) == 0 && f.lf.restore_planes != 0 { - (f.bd_fn.filter_sbrow_lr)(c, f, sby); + (f.bd_fn.filter_sbrow_lr)(c, f, tc, sby); } task_type = RAV1D_TASK_TYPE_RECONSTRUCTION_PROGRESS; continue 'fallthrough;