Skip to content

Commit

Permalink
struct Dav1dLoopFilterDSPContext: Deduplicate and type-erase fn poi…
Browse files Browse the repository at this point in the history
…nters (#377)
  • Loading branch information
randomPoison authored Aug 22, 2023
1 parent 9adbefb commit 3dc3224
Show file tree
Hide file tree
Showing 19 changed files with 625 additions and 687 deletions.
1 change: 1 addition & 0 deletions lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ pub mod src {
pub mod lf_mask;
pub mod lib;
pub mod log;
pub mod loopfilter;
#[cfg(feature = "bitdepth_16")]
pub mod loopfilter_tmpl_16;
#[cfg(feature = "bitdepth_8")]
Expand Down
19 changes: 1 addition & 18 deletions src/cdef_apply_tmpl_16.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ use crate::src::align::Align16;
use crate::src::internal::Dav1dFrameContext_frame_thread;
use crate::src::internal::Dav1dFrameContext_lf;
use crate::src::lf_mask::Av1Filter;
use crate::src::lf_mask::Av1FilterLUT;

use crate::src::levels::Av1Block;
use crate::src::refmvs::refmvs_frame;
Expand Down Expand Up @@ -246,23 +245,7 @@ use crate::src::cdef::CDEF_HAVE_BOTTOM;
use crate::src::cdef::CDEF_HAVE_LEFT;
use crate::src::cdef::CDEF_HAVE_RIGHT;
use crate::src::cdef::CDEF_HAVE_TOP;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dLoopFilterDSPContext {
pub loop_filter_sb: [[loopfilter_sb_fn; 2]; 2],
}
pub type loopfilter_sb_fn = Option<
unsafe extern "C" fn(
*mut pixel,
ptrdiff_t,
*const uint32_t,
*const [uint8_t; 4],
ptrdiff_t,
*const Av1FilterLUT,
libc::c_int,
libc::c_int,
) -> (),
>;
use crate::src::loopfilter::Dav1dLoopFilterDSPContext;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dInvTxfmDSPContext {
Expand Down
18 changes: 1 addition & 17 deletions src/cdef_apply_tmpl_8.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ use crate::src::align::Align16;
use crate::src::internal::Dav1dFrameContext_frame_thread;
use crate::src::internal::Dav1dFrameContext_lf;
use crate::src::lf_mask::Av1Filter;
use crate::src::lf_mask::Av1FilterLUT;

use crate::src::levels::Av1Block;
use crate::src::refmvs::refmvs_frame;
Expand Down Expand Up @@ -247,22 +246,7 @@ use crate::src::cdef::CDEF_HAVE_BOTTOM;
use crate::src::cdef::CDEF_HAVE_LEFT;
use crate::src::cdef::CDEF_HAVE_RIGHT;
use crate::src::cdef::CDEF_HAVE_TOP;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dLoopFilterDSPContext {
pub loop_filter_sb: [[loopfilter_sb_fn; 2]; 2],
}
pub type loopfilter_sb_fn = Option<
unsafe extern "C" fn(
*mut pixel,
ptrdiff_t,
*const uint32_t,
*const [uint8_t; 4],
ptrdiff_t,
*const Av1FilterLUT,
libc::c_int,
) -> (),
>;
use crate::src::loopfilter::Dav1dLoopFilterDSPContext;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dInvTxfmDSPContext {
Expand Down
18 changes: 1 addition & 17 deletions src/cdf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ use crate::src::align::Align16;
use crate::src::internal::Dav1dFrameContext_lf;
use crate::src::lf_mask::Av1Filter;
pub type pixel = ();
use crate::src::lf_mask::Av1FilterLUT;

use crate::src::internal::Dav1dFrameContext_frame_thread;

Expand Down Expand Up @@ -343,25 +342,10 @@ pub struct Dav1dDSPContext {
pub lr: Dav1dLoopRestorationDSPContext,
}
use crate::src::cdef::Dav1dCdefDSPContext;
use crate::src::loopfilter::Dav1dLoopFilterDSPContext;
use crate::src::looprestoration::Dav1dLoopRestorationDSPContext;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dLoopFilterDSPContext {
pub loop_filter_sb: [[loopfilter_sb_fn; 2]; 2],
}
pub type loopfilter_sb_fn = Option<
unsafe extern "C" fn(
*mut libc::c_void,
ptrdiff_t,
*const uint32_t,
*const [uint8_t; 4],
ptrdiff_t,
*const Av1FilterLUT,
libc::c_int,
) -> (),
>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dInvTxfmDSPContext {
pub itxfm_add: [[itxfm_fn; 17]; 19],
}
Expand Down
18 changes: 1 addition & 17 deletions src/decode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,6 @@ use crate::src::internal::Dav1dFrameContext_lf;
use crate::src::lf_mask::Av1Filter;
pub type pixel = ();
use crate::src::internal::Dav1dFrameContext_frame_thread;
use crate::src::lf_mask::Av1FilterLUT;
use crate::src::lf_mask::Av1Restoration;
use crate::src::lf_mask::Av1RestorationUnit;
pub type coef = ();
Expand Down Expand Up @@ -515,25 +514,10 @@ pub struct Dav1dDSPContext {
pub lr: Dav1dLoopRestorationDSPContext,
}
use crate::src::cdef::Dav1dCdefDSPContext;
use crate::src::loopfilter::Dav1dLoopFilterDSPContext;
use crate::src::looprestoration::Dav1dLoopRestorationDSPContext;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dLoopFilterDSPContext {
pub loop_filter_sb: [[loopfilter_sb_fn; 2]; 2],
}
pub type loopfilter_sb_fn = Option<
unsafe extern "C" fn(
*mut libc::c_void,
ptrdiff_t,
*const uint32_t,
*const [uint8_t; 4],
ptrdiff_t,
*const Av1FilterLUT,
libc::c_int,
) -> (),
>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dInvTxfmDSPContext {
pub itxfm_add: [[itxfm_fn; 17]; 19],
}
Expand Down
43 changes: 13 additions & 30 deletions src/lf_apply_tmpl_16.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ use crate::include::dav1d::headers::Dav1dSequenceHeader;

use crate::src::internal::Dav1dFrameContext_lf;
use crate::src::lf_mask::Av1Filter;
use crate::src::lf_mask::Av1FilterLUT;

use crate::src::internal::Dav1dFrameContext_frame_thread;

Expand Down Expand Up @@ -236,26 +235,10 @@ pub struct Dav1dDSPContext {
pub lr: Dav1dLoopRestorationDSPContext,
}
use crate::src::cdef::Dav1dCdefDSPContext;
use crate::src::loopfilter::Dav1dLoopFilterDSPContext;
use crate::src::looprestoration::Dav1dLoopRestorationDSPContext;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dLoopFilterDSPContext {
pub loop_filter_sb: [[loopfilter_sb_fn; 2]; 2],
}
pub type loopfilter_sb_fn = Option<
unsafe extern "C" fn(
*mut pixel,
ptrdiff_t,
*const uint32_t,
*const [uint8_t; 4],
ptrdiff_t,
*const Av1FilterLUT,
libc::c_int,
libc::c_int,
) -> (),
>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dInvTxfmDSPContext {
pub itxfm_add: [[itxfm_fn; 17]; 19],
}
Expand Down Expand Up @@ -902,8 +885,8 @@ unsafe extern "C" fn filter_plane_cols_y(
hmask[2] = (*mask.offset(x as isize))[2][1] as uint32_t;
}
hmask[3] = 0 as libc::c_int as uint32_t;
((*dsp).lf.loop_filter_sb[0][0]).expect("non-null function pointer")(
&mut *dst.offset((x * 4) as isize),
(*dsp).lf.loop_filter_sb[0][0](
dst.offset((x * 4) as isize).cast(),
ls,
hmask.as_mut_ptr(),
&*(*lvl.offset(x as isize)).as_ptr().offset(0) as *const uint8_t
Expand Down Expand Up @@ -943,8 +926,8 @@ unsafe extern "C" fn filter_plane_rows_y(
| ((*mask.offset(y as isize))[2][1] as libc::c_uint) << 16,
0 as libc::c_int as uint32_t,
];
((*dsp).lf.loop_filter_sb[0][1]).expect("non-null function pointer")(
dst,
(*dsp).lf.loop_filter_sb[0][1](
dst.cast(),
ls,
vmask.as_ptr(),
&*(*lvl.offset(0)).as_ptr().offset(1) as *const uint8_t as *const [uint8_t; 4],
Expand Down Expand Up @@ -993,8 +976,8 @@ unsafe extern "C" fn filter_plane_cols_uv(
hmask[1] = (*mask.offset(x as isize))[1][1] as uint32_t;
}
hmask[2] = 0 as libc::c_int as uint32_t;
((*dsp).lf.loop_filter_sb[1][0]).expect("non-null function pointer")(
&mut *u.offset((x * 4) as isize),
(*dsp).lf.loop_filter_sb[1][0](
u.offset((x * 4) as isize).cast(),
ls,
hmask.as_mut_ptr(),
&*(*lvl.offset(x as isize)).as_ptr().offset(2) as *const uint8_t
Expand All @@ -1004,8 +987,8 @@ unsafe extern "C" fn filter_plane_cols_uv(
endy4 - starty4,
(*f).bitdepth_max,
);
((*dsp).lf.loop_filter_sb[1][0]).expect("non-null function pointer")(
&mut *v.offset((x * 4) as isize),
(*dsp).lf.loop_filter_sb[1][0](
v.offset((x * 4) as isize).cast(),
ls,
hmask.as_mut_ptr(),
&*(*lvl.offset(x as isize)).as_ptr().offset(3) as *const uint8_t
Expand Down Expand Up @@ -1046,8 +1029,8 @@ unsafe extern "C" fn filter_plane_rows_uv(
| ((*mask.offset(y as isize))[1][1] as libc::c_uint) << (16 >> ss_hor),
0 as libc::c_int as uint32_t,
];
((*dsp).lf.loop_filter_sb[1][1]).expect("non-null function pointer")(
&mut *u.offset(off_l as isize),
(*dsp).lf.loop_filter_sb[1][1](
u.offset(off_l as isize).cast(),
ls,
vmask.as_ptr(),
&*(*lvl.offset(0)).as_ptr().offset(2) as *const uint8_t as *const [uint8_t; 4],
Expand All @@ -1056,8 +1039,8 @@ unsafe extern "C" fn filter_plane_rows_uv(
w,
(*f).bitdepth_max,
);
((*dsp).lf.loop_filter_sb[1][1]).expect("non-null function pointer")(
&mut *v.offset(off_l as isize),
(*dsp).lf.loop_filter_sb[1][1](
v.offset(off_l as isize).cast(),
ls,
vmask.as_ptr(),
&*(*lvl.offset(0)).as_ptr().offset(3) as *const uint8_t as *const [uint8_t; 4],
Expand Down
48 changes: 19 additions & 29 deletions src/lf_apply_tmpl_8.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ use crate::include::dav1d::headers::Dav1dSequenceHeader;

use crate::src::internal::Dav1dFrameContext_lf;
use crate::src::lf_mask::Av1Filter;
use crate::src::lf_mask::Av1FilterLUT;

use crate::src::internal::Dav1dFrameContext_frame_thread;

Expand Down Expand Up @@ -237,25 +236,10 @@ pub struct Dav1dDSPContext {
pub lr: Dav1dLoopRestorationDSPContext,
}
use crate::src::cdef::Dav1dCdefDSPContext;
use crate::src::loopfilter::Dav1dLoopFilterDSPContext;
use crate::src::looprestoration::Dav1dLoopRestorationDSPContext;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dLoopFilterDSPContext {
pub loop_filter_sb: [[loopfilter_sb_fn; 2]; 2],
}
pub type loopfilter_sb_fn = Option<
unsafe extern "C" fn(
*mut pixel,
ptrdiff_t,
*const uint32_t,
*const [uint8_t; 4],
ptrdiff_t,
*const Av1FilterLUT,
libc::c_int,
) -> (),
>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Dav1dInvTxfmDSPContext {
pub itxfm_add: [[itxfm_fn; 17]; 19],
}
Expand Down Expand Up @@ -852,15 +836,16 @@ unsafe extern "C" fn filter_plane_cols_y(
hmask[2] = (*mask.offset(x as isize))[2][1] as uint32_t;
}
hmask[3] = 0 as libc::c_int as uint32_t;
((*dsp).lf.loop_filter_sb[0][0]).expect("non-null function pointer")(
&mut *dst.offset((x * 4) as isize),
(*dsp).lf.loop_filter_sb[0][0](
dst.offset((x * 4) as isize).cast(),
ls,
hmask.as_mut_ptr(),
&*(*lvl.offset(x as isize)).as_ptr().offset(0) as *const uint8_t
as *const [uint8_t; 4],
b4_stride,
&(*f).lf.lim_lut.0,
endy4 - starty4,
8,
);
}
x += 1;
Expand Down Expand Up @@ -892,14 +877,15 @@ unsafe extern "C" fn filter_plane_rows_y(
| ((*mask.offset(y as isize))[2][1] as libc::c_uint) << 16,
0 as libc::c_int as uint32_t,
];
((*dsp).lf.loop_filter_sb[0][1]).expect("non-null function pointer")(
dst,
(*dsp).lf.loop_filter_sb[0][1](
dst.cast(),
ls,
vmask.as_ptr(),
&*(*lvl.offset(0)).as_ptr().offset(1) as *const uint8_t as *const [uint8_t; 4],
b4_stride,
&(*f).lf.lim_lut.0,
w,
8,
);
}
y += 1;
Expand Down Expand Up @@ -941,25 +927,27 @@ unsafe extern "C" fn filter_plane_cols_uv(
hmask[1] = (*mask.offset(x as isize))[1][1] as uint32_t;
}
hmask[2] = 0 as libc::c_int as uint32_t;
((*dsp).lf.loop_filter_sb[1][0]).expect("non-null function pointer")(
&mut *u.offset((x * 4) as isize),
(*dsp).lf.loop_filter_sb[1][0](
u.offset((x * 4) as isize).cast(),
ls,
hmask.as_mut_ptr(),
&*(*lvl.offset(x as isize)).as_ptr().offset(2) as *const uint8_t
as *const [uint8_t; 4],
b4_stride,
&(*f).lf.lim_lut.0,
endy4 - starty4,
8,
);
((*dsp).lf.loop_filter_sb[1][0]).expect("non-null function pointer")(
&mut *v.offset((x * 4) as isize),
(*dsp).lf.loop_filter_sb[1][0](
v.offset((x * 4) as isize).cast(),
ls,
hmask.as_mut_ptr(),
&*(*lvl.offset(x as isize)).as_ptr().offset(3) as *const uint8_t
as *const [uint8_t; 4],
b4_stride,
&(*f).lf.lim_lut.0,
endy4 - starty4,
8,
);
}
x += 1;
Expand Down Expand Up @@ -992,23 +980,25 @@ unsafe extern "C" fn filter_plane_rows_uv(
| ((*mask.offset(y as isize))[1][1] as libc::c_uint) << (16 >> ss_hor),
0 as libc::c_int as uint32_t,
];
((*dsp).lf.loop_filter_sb[1][1]).expect("non-null function pointer")(
&mut *u.offset(off_l as isize),
(*dsp).lf.loop_filter_sb[1][1](
u.offset(off_l as isize).cast(),
ls,
vmask.as_ptr(),
&*(*lvl.offset(0)).as_ptr().offset(2) as *const uint8_t as *const [uint8_t; 4],
b4_stride,
&(*f).lf.lim_lut.0,
w,
8,
);
((*dsp).lf.loop_filter_sb[1][1]).expect("non-null function pointer")(
&mut *v.offset(off_l as isize),
(*dsp).lf.loop_filter_sb[1][1](
v.offset(off_l as isize).cast(),
ls,
vmask.as_ptr(),
&*(*lvl.offset(0)).as_ptr().offset(3) as *const uint8_t as *const [uint8_t; 4],
b4_stride,
&(*f).lf.lim_lut.0,
w,
8,
);
}
y += 1;
Expand Down
Loading

0 comments on commit 3dc3224

Please sign in to comment.