From 9adbefbbdc2ba4c11da089e4fe947bfd72b89fdc Mon Sep 17 00:00:00 2001 From: Nicole L Date: Tue, 22 Aug 2023 09:51:54 -0700 Subject: [PATCH] `struct Dav1dCdefDSPContext`: Deduplicate and type-erase fn pointers (#376) --- src/cdef.rs | 510 ++++++++++++++++++++++++++++++++++++++ src/cdef_apply_tmpl_16.rs | 63 ++--- src/cdef_apply_tmpl_8.rs | 65 ++--- src/cdef_tmpl_16.rs | 370 +++++++-------------------- src/cdef_tmpl_8.rs | 445 ++++++++------------------------- src/cdf.rs | 26 +- src/decode.rs | 26 +- src/lf_apply_tmpl_16.rs | 28 +-- src/lf_apply_tmpl_8.rs | 26 +- src/lib.rs | 26 +- src/log.rs | 27 +- src/lr_apply_tmpl_16.rs | 28 +-- src/lr_apply_tmpl_8.rs | 26 +- src/obu.rs | 25 +- src/picture.rs | 26 +- src/recon_tmpl_16.rs | 28 +-- src/recon_tmpl_8.rs | 26 +- src/thread_task.rs | 26 +- 18 files changed, 750 insertions(+), 1047 deletions(-) diff --git a/src/cdef.rs b/src/cdef.rs index d2d880fdb..d44dfab08 100644 --- a/src/cdef.rs +++ b/src/cdef.rs @@ -2,7 +2,11 @@ use crate::include::common::intops::apply_sign; use crate::include::common::intops::imax; use crate::include::common::intops::imin; use crate::include::stddef::ptrdiff_t; +#[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64")))] +use crate::include::stddef::size_t; use crate::include::stdint::int16_t; +#[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64")))] +use crate::include::stdint::uint16_t; pub type CdefEdgeFlags = libc::c_uint; pub const CDEF_HAVE_BOTTOM: CdefEdgeFlags = 8; @@ -10,6 +14,512 @@ pub const CDEF_HAVE_TOP: CdefEdgeFlags = 4; pub const CDEF_HAVE_RIGHT: CdefEdgeFlags = 2; pub const CDEF_HAVE_LEFT: CdefEdgeFlags = 1; +pub type pixel = libc::c_void; +pub type const_left_pixel_row_2px = *const libc::c_void; // const_left_pixel_row_2px +pub type cdef_fn = unsafe extern "C" fn( + *mut pixel, + ptrdiff_t, + const_left_pixel_row_2px, + *const pixel, + *const pixel, + libc::c_int, + libc::c_int, + libc::c_int, + libc::c_int, + CdefEdgeFlags, + libc::c_int, +) -> (); +pub type cdef_dir_fn = + unsafe extern "C" fn(*const pixel, ptrdiff_t, *mut libc::c_uint, libc::c_int) -> libc::c_int; +#[derive(Copy, Clone)] +#[repr(C)] +pub struct Dav1dCdefDSPContext { + pub dir: cdef_dir_fn, + pub fb: [cdef_fn; 3], +} + +// TODO(legare): Temporarily pub until init fns are deduplicated. +#[cfg(all( + feature = "asm", + feature = "bitdepth_8", + any(target_arch = "x86", target_arch = "x86_64"), +))] +extern "C" { + pub(crate) fn dav1d_cdef_filter_8x8_8bpc_ssse3( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_8bpc_ssse3( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x4_8bpc_ssse3( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_dir_8bpc_sse4( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; + pub(crate) fn dav1d_cdef_filter_8x8_8bpc_sse4( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_8bpc_sse4( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x4_8bpc_sse4( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_dir_8bpc_avx2( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; + pub(crate) fn dav1d_cdef_filter_8x8_8bpc_avx2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_8bpc_avx2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x4_8bpc_avx2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_8x8_8bpc_avx512icl( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_8bpc_avx512icl( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x4_8bpc_avx512icl( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_8bpc_sse2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_dir_8bpc_ssse3( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; + pub(crate) fn dav1d_cdef_filter_4x4_8bpc_sse2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_8x8_8bpc_sse2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); +} + +// TODO(legare): Temporarily pub until init fns are deduplicated. +#[cfg(all( + feature = "asm", + feature = "bitdepth_8", + any(target_arch = "arm", target_arch = "aarch64"), +))] +extern "C" { + pub(crate) fn dav1d_cdef_find_dir_8bpc_neon( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; + pub(crate) fn dav1d_cdef_padding4_8bpc_neon( + tmp: *mut uint16_t, + src: *const pixel, + src_stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + h: libc::c_int, + edges: CdefEdgeFlags, + ); + pub(crate) fn dav1d_cdef_padding8_8bpc_neon( + tmp: *mut uint16_t, + src: *const pixel, + src_stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + h: libc::c_int, + edges: CdefEdgeFlags, + ); + pub(crate) fn dav1d_cdef_filter4_8bpc_neon( + dst: *mut pixel, + dst_stride: ptrdiff_t, + tmp: *const uint16_t, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + h: libc::c_int, + edges: size_t, + ); + pub(crate) fn dav1d_cdef_filter8_8bpc_neon( + dst: *mut pixel, + dst_stride: ptrdiff_t, + tmp: *const uint16_t, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + h: libc::c_int, + edges: size_t, + ); +} + +// TODO(legare): Temporarily pub until init fns are deduplicated. +#[cfg(all( + feature = "asm", + feature = "bitdepth_16", + any(target_arch = "x86", target_arch = "x86_64"), +))] +extern "C" { + pub(crate) fn dav1d_cdef_filter_4x4_16bpc_avx512icl( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_16bpc_avx512icl( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_8x8_16bpc_avx512icl( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x4_16bpc_avx2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_16bpc_avx2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_8x8_16bpc_avx2( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_dir_16bpc_avx2( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; + pub(crate) fn dav1d_cdef_dir_16bpc_sse4( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; + pub(crate) fn dav1d_cdef_filter_4x4_16bpc_ssse3( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_4x8_16bpc_ssse3( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter_8x8_16bpc_ssse3( + dst: *mut pixel, + stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + edges: CdefEdgeFlags, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_dir_16bpc_ssse3( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; +} + +// TODO(legare): Temporarily pub until init fns are deduplicated. +#[cfg(all( + feature = "asm", + feature = "bitdepth_16", + any(target_arch = "arm", target_arch = "aarch64"), +))] +extern "C" { + pub(crate) fn dav1d_cdef_find_dir_16bpc_neon( + dst: *const pixel, + dst_stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, + ) -> libc::c_int; + pub(crate) fn dav1d_cdef_padding4_16bpc_neon( + tmp: *mut uint16_t, + src: *const pixel, + src_stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + h: libc::c_int, + edges: CdefEdgeFlags, + ); + pub(crate) fn dav1d_cdef_padding8_16bpc_neon( + tmp: *mut uint16_t, + src: *const pixel, + src_stride: ptrdiff_t, + left: const_left_pixel_row_2px, + top: *const pixel, + bottom: *const pixel, + h: libc::c_int, + edges: CdefEdgeFlags, + ); + pub(crate) fn dav1d_cdef_filter4_16bpc_neon( + dst: *mut pixel, + dst_stride: ptrdiff_t, + tmp: *const uint16_t, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + h: libc::c_int, + edges: size_t, + bitdepth_max: libc::c_int, + ); + pub(crate) fn dav1d_cdef_filter8_16bpc_neon( + dst: *mut pixel, + dst_stride: ptrdiff_t, + tmp: *const uint16_t, + pri_strength: libc::c_int, + sec_strength: libc::c_int, + dir: libc::c_int, + damping: libc::c_int, + h: libc::c_int, + edges: size_t, + bitdepth_max: libc::c_int, + ); +} + #[inline] pub unsafe extern "C" fn constrain( diff: libc::c_int, diff --git a/src/cdef_apply_tmpl_16.rs b/src/cdef_apply_tmpl_16.rs index 01abfb04c..e1e1fd1a2 100644 --- a/src/cdef_apply_tmpl_16.rs +++ b/src/cdef_apply_tmpl_16.rs @@ -240,36 +240,12 @@ pub struct Dav1dDSPContext { } use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - libc::c_int, - ) -> (), ->; use crate::src::cdef::CdefEdgeFlags; +use crate::src::cdef::Dav1dCdefDSPContext; 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; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = Option< - unsafe extern "C" fn(*const pixel, ptrdiff_t, *mut libc::c_uint, libc::c_int) -> libc::c_int, ->; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { @@ -939,8 +915,8 @@ pub unsafe extern "C" fn dav1d_cdef_brow_16bpc( dir = 0; variance = 0; if y_pri_lvl != 0 || uv_pri_lvl != 0 { - dir = ((*dsp).cdef.dir).expect("non-null function pointer")( - bptrs[0], + dir = ((*dsp).cdef.dir)( + bptrs[0].cast(), (*f).cur.stride[0], &mut variance, (*f).bitdepth_max, @@ -1009,13 +985,12 @@ pub unsafe extern "C" fn dav1d_cdef_brow_16bpc( if y_pri_lvl != 0 { let adj_y_pri_lvl = adjust_strength(y_pri_lvl, variance); if adj_y_pri_lvl != 0 || y_sec_lvl != 0 { - ((*dsp).cdef.fb[0]).expect("non-null function pointer")( - bptrs[0], + (*dsp).cdef.fb[0]( + bptrs[0].cast(), (*f).cur.stride[0], - (lr_bak[bit as usize][0]).as_mut_ptr() - as const_left_pixel_row_2px, - top, - bot, + (lr_bak[bit as usize][0]).as_mut_ptr().cast(), + top.cast(), + bot.cast(), adj_y_pri_lvl, y_sec_lvl, dir, @@ -1025,12 +1000,12 @@ pub unsafe extern "C" fn dav1d_cdef_brow_16bpc( ); } } else if y_sec_lvl != 0 { - ((*dsp).cdef.fb[0]).expect("non-null function pointer")( - bptrs[0], + (*dsp).cdef.fb[0]( + bptrs[0].cast(), (*f).cur.stride[0], - (lr_bak[bit as usize][0]).as_mut_ptr() as const_left_pixel_row_2px, - top, - bot, + (lr_bak[bit as usize][0]).as_mut_ptr().cast(), + top.cast(), + bot.cast(), 0 as libc::c_int, y_sec_lvl, 0 as libc::c_int, @@ -1129,14 +1104,12 @@ pub unsafe extern "C" fn dav1d_cdef_brow_16bpc( } _ => {} } - ((*dsp).cdef.fb[uv_idx as usize]) - .expect("non-null function pointer")( - bptrs[pl as usize], + (*dsp).cdef.fb[uv_idx as usize]( + bptrs[pl as usize].cast(), (*f).cur.stride[1], - (lr_bak[bit as usize][pl as usize]).as_mut_ptr() - as const_left_pixel_row_2px, - top, - bot, + (lr_bak[bit as usize][pl as usize]).as_mut_ptr().cast(), + top.cast(), + bot.cast(), uv_pri_lvl, uv_sec_lvl, uvdir, diff --git a/src/cdef_apply_tmpl_8.rs b/src/cdef_apply_tmpl_8.rs index eb4b60ff5..3d422f955 100644 --- a/src/cdef_apply_tmpl_8.rs +++ b/src/cdef_apply_tmpl_8.rs @@ -241,34 +241,12 @@ pub struct Dav1dDSPContext { } use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; use crate::src::cdef::CdefEdgeFlags; +use crate::src::cdef::Dav1dCdefDSPContext; 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; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { @@ -913,10 +891,11 @@ pub unsafe extern "C" fn dav1d_cdef_brow_8bpc( dir = 0; variance = 0; if y_pri_lvl != 0 || uv_pri_lvl != 0 { - dir = ((*dsp).cdef.dir).expect("non-null function pointer")( - bptrs[0], + dir = ((*dsp).cdef.dir)( + bptrs[0].cast(), (*f).cur.stride[0], &mut variance, + 8, ); } top = 0 as *const pixel; @@ -982,32 +961,33 @@ pub unsafe extern "C" fn dav1d_cdef_brow_8bpc( if y_pri_lvl != 0 { let adj_y_pri_lvl = adjust_strength(y_pri_lvl, variance); if adj_y_pri_lvl != 0 || y_sec_lvl != 0 { - ((*dsp).cdef.fb[0]).expect("non-null function pointer")( - bptrs[0], + (*dsp).cdef.fb[0]( + bptrs[0].cast(), (*f).cur.stride[0], - (lr_bak[bit as usize][0]).as_mut_ptr() - as const_left_pixel_row_2px, - top, - bot, + (lr_bak[bit as usize][0]).as_mut_ptr().cast(), + top.cast(), + bot.cast(), adj_y_pri_lvl, y_sec_lvl, dir, damping, edges, + 8, ); } } else if y_sec_lvl != 0 { - ((*dsp).cdef.fb[0]).expect("non-null function pointer")( - bptrs[0], + (*dsp).cdef.fb[0]( + bptrs[0].cast(), (*f).cur.stride[0], - (lr_bak[bit as usize][0]).as_mut_ptr() as const_left_pixel_row_2px, - top, - bot, + (lr_bak[bit as usize][0]).as_mut_ptr().cast(), + top.cast(), + bot.cast(), 0 as libc::c_int, y_sec_lvl, 0 as libc::c_int, damping, edges, + 8, ); } if !(uv_lvl == 0) { @@ -1100,19 +1080,18 @@ pub unsafe extern "C" fn dav1d_cdef_brow_8bpc( } _ => {} } - ((*dsp).cdef.fb[uv_idx as usize]) - .expect("non-null function pointer")( - bptrs[pl as usize], + (*dsp).cdef.fb[uv_idx as usize]( + bptrs[pl as usize].cast(), (*f).cur.stride[1], - (lr_bak[bit as usize][pl as usize]).as_mut_ptr() - as const_left_pixel_row_2px, - top, - bot, + (lr_bak[bit as usize][pl as usize]).as_mut_ptr().cast(), + top.cast(), + bot.cast(), uv_pri_lvl, uv_sec_lvl, uvdir, damping - 1, edges, + 8, ); pl += 1; } diff --git a/src/cdef_tmpl_16.rs b/src/cdef_tmpl_16.rs index 1c6b7f756..9a9bdabb2 100644 --- a/src/cdef_tmpl_16.rs +++ b/src/cdef_tmpl_16.rs @@ -4,234 +4,17 @@ use ::libc; #[cfg(feature = "asm")] use cfg_if::cfg_if; -#[cfg(all(feature = "asm", any(target_arch = "x86", target_arch = "x86_64")))] -extern "C" { - fn dav1d_cdef_filter_4x4_16bpc_avx512icl( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter_4x8_16bpc_avx512icl( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter_8x8_16bpc_avx512icl( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter_4x4_16bpc_avx2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter_4x8_16bpc_avx2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter_8x8_16bpc_avx2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_dir_16bpc_avx2( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - bitdepth_max: libc::c_int, - ) -> libc::c_int; - fn dav1d_cdef_dir_16bpc_sse4( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - bitdepth_max: libc::c_int, - ) -> libc::c_int; - fn dav1d_cdef_filter_4x4_16bpc_ssse3( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter_4x8_16bpc_ssse3( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter_8x8_16bpc_ssse3( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_dir_16bpc_ssse3( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - bitdepth_max: libc::c_int, - ) -> libc::c_int; -} - -#[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64")))] -extern "C" { - fn dav1d_cdef_find_dir_16bpc_neon( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - bitdepth_max: libc::c_int, - ) -> libc::c_int; - fn dav1d_cdef_padding4_16bpc_neon( - tmp: *mut uint16_t, - src: *const pixel, - src_stride: ptrdiff_t, - left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, - h: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_padding8_16bpc_neon( - tmp: *mut uint16_t, - src: *const pixel, - src_stride: ptrdiff_t, - left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, - h: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter4_16bpc_neon( - dst: *mut pixel, - dst_stride: ptrdiff_t, - tmp: *const uint16_t, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - h: libc::c_int, - edges: size_t, - bitdepth_max: libc::c_int, - ); - fn dav1d_cdef_filter8_16bpc_neon( - dst: *mut pixel, - dst_stride: ptrdiff_t, - tmp: *const uint16_t, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - h: libc::c_int, - edges: size_t, - bitdepth_max: libc::c_int, - ); -} - use crate::src::tables::dav1d_cdef_directions; pub type pixel = uint16_t; +use crate::include::common::attributes::clz; +use crate::include::common::intops::imax; use crate::src::cdef::CdefEdgeFlags; +use crate::src::cdef::Dav1dCdefDSPContext; 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; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - libc::c_int, - ) -> (), ->; -pub type cdef_dir_fn = Option< - unsafe extern "C" fn(*const pixel, ptrdiff_t, *mut libc::c_uint, libc::c_int) -> libc::c_int, ->; -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -use crate::include::common::attributes::clz; -use crate::include::common::intops::imax; use crate::include::common::intops::iclip; use crate::include::common::intops::umin; @@ -507,12 +290,12 @@ unsafe extern "C" fn cdef_filter_block_c( } }; } -unsafe extern "C" fn cdef_filter_block_4x4_c( - dst: *mut pixel, +unsafe extern "C" fn cdef_filter_block_4x4_c_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, @@ -521,11 +304,11 @@ unsafe extern "C" fn cdef_filter_block_4x4_c( bitdepth_max: libc::c_int, ) { cdef_filter_block_c( - dst, + dst.cast(), stride, - left, - top, - bottom, + left.cast(), + top.cast(), + bottom.cast(), pri_strength, sec_strength, dir, @@ -536,12 +319,12 @@ unsafe extern "C" fn cdef_filter_block_4x4_c( bitdepth_max, ); } -unsafe extern "C" fn cdef_filter_block_4x8_c( - dst: *mut pixel, +unsafe extern "C" fn cdef_filter_block_4x8_c_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, @@ -550,11 +333,11 @@ unsafe extern "C" fn cdef_filter_block_4x8_c( bitdepth_max: libc::c_int, ) { cdef_filter_block_c( - dst, + dst.cast(), stride, - left, - top, - bottom, + left.cast(), + top.cast(), + bottom.cast(), pri_strength, sec_strength, dir, @@ -565,12 +348,12 @@ unsafe extern "C" fn cdef_filter_block_4x8_c( bitdepth_max, ); } -unsafe extern "C" fn cdef_filter_block_8x8_c( - dst: *mut pixel, +unsafe extern "C" fn cdef_filter_block_8x8_c_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, @@ -579,11 +362,11 @@ unsafe extern "C" fn cdef_filter_block_8x8_c( bitdepth_max: libc::c_int, ) { cdef_filter_block_c( - dst, + dst.cast(), stride, - left, - top, - bottom, + left.cast(), + top.cast(), + bottom.cast(), pri_strength, sec_strength, dir, @@ -594,7 +377,15 @@ unsafe extern "C" fn cdef_filter_block_8x8_c( bitdepth_max, ); } -unsafe extern "C" fn cdef_find_dir_c( +unsafe extern "C" fn cdef_find_dir_c_erased( + mut img: *const libc::c_void, + stride: ptrdiff_t, + var: *mut libc::c_uint, + bitdepth_max: libc::c_int, +) -> libc::c_int { + cdef_find_dir_rust(img.cast(), stride, var, bitdepth_max) +} +unsafe fn cdef_find_dir_rust( mut img: *const pixel, stride: ptrdiff_t, var: *mut libc::c_uint, @@ -720,6 +511,8 @@ unsafe extern "C" fn cdef_find_dir_c( #[cfg(all(feature = "asm", any(target_arch = "x86", target_arch = "x86_64"),))] unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { use crate::src::x86::cpu::*; + // TODO(legare): Temporary import until init fns are deduplicated. + use crate::src::cdef::*; let flags = dav1d_get_cpu_flags(); @@ -727,16 +520,16 @@ unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { return; } - (*c).dir = Some(dav1d_cdef_dir_16bpc_ssse3); - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_16bpc_ssse3); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_16bpc_ssse3); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_16bpc_ssse3); + (*c).dir = dav1d_cdef_dir_16bpc_ssse3; + (*c).fb[0] = dav1d_cdef_filter_8x8_16bpc_ssse3; + (*c).fb[1] = dav1d_cdef_filter_4x8_16bpc_ssse3; + (*c).fb[2] = dav1d_cdef_filter_4x4_16bpc_ssse3; if flags & DAV1D_X86_CPU_FLAG_SSE41 == 0 { return; } - (*c).dir = Some(dav1d_cdef_dir_16bpc_sse4); + (*c).dir = dav1d_cdef_dir_16bpc_sse4; #[cfg(target_arch = "x86_64")] { @@ -744,18 +537,18 @@ unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { return; } - (*c).dir = Some(dav1d_cdef_dir_16bpc_avx2); - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_16bpc_avx2); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_16bpc_avx2); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_16bpc_avx2); + (*c).dir = dav1d_cdef_dir_16bpc_avx2; + (*c).fb[0] = dav1d_cdef_filter_8x8_16bpc_avx2; + (*c).fb[1] = dav1d_cdef_filter_4x8_16bpc_avx2; + (*c).fb[2] = dav1d_cdef_filter_4x4_16bpc_avx2; if flags & DAV1D_X86_CPU_FLAG_AVX512ICL == 0 { return; } - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_16bpc_avx512icl); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_16bpc_avx512icl); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_16bpc_avx512icl); + (*c).fb[0] = dav1d_cdef_filter_8x8_16bpc_avx512icl; + (*c).fb[1] = dav1d_cdef_filter_4x8_16bpc_avx512icl; + (*c).fb[2] = dav1d_cdef_filter_4x4_16bpc_avx512icl; } } @@ -763,6 +556,8 @@ unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] unsafe extern "C" fn cdef_dsp_init_arm(c: *mut Dav1dCdefDSPContext) { use crate::src::arm::cpu::DAV1D_ARM_CPU_FLAG_NEON; + // TODO(legare): Temporary import until init fns are deduplicated. + use crate::src::cdef::*; let flags: libc::c_uint = dav1d_get_cpu_flags(); @@ -770,20 +565,20 @@ unsafe extern "C" fn cdef_dsp_init_arm(c: *mut Dav1dCdefDSPContext) { return; } - (*c).dir = Some(dav1d_cdef_find_dir_16bpc_neon); - (*c).fb[0] = Some(cdef_filter_8x8_neon); - (*c).fb[1] = Some(cdef_filter_4x8_neon); - (*c).fb[2] = Some(cdef_filter_4x4_neon); + (*c).dir = dav1d_cdef_find_dir_16bpc_neon; + (*c).fb[0] = cdef_filter_8x8_neon_erased; + (*c).fb[1] = cdef_filter_4x8_neon_erased; + (*c).fb[2] = cdef_filter_4x4_neon_erased; } #[inline(always)] #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] -unsafe extern "C" fn cdef_filter_8x8_neon( - mut dst: *mut pixel, +unsafe extern "C" fn cdef_filter_8x8_neon_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, @@ -791,6 +586,9 @@ unsafe extern "C" fn cdef_filter_8x8_neon( edges: CdefEdgeFlags, bitdepth_max: libc::c_int, ) { + // TODO(legare): Temporary import until this fn is deduplicated. + use crate::src::cdef::*; + let mut tmp_buf = [0; 200]; let mut tmp = tmp_buf.as_mut_ptr().offset(2 * 16).offset(8); dav1d_cdef_padding8_16bpc_neon(tmp, dst, stride, left, top, bottom, 8, edges); @@ -810,12 +608,12 @@ unsafe extern "C" fn cdef_filter_8x8_neon( #[inline(always)] #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] -unsafe extern "C" fn cdef_filter_4x8_neon( - mut dst: *mut pixel, +unsafe extern "C" fn cdef_filter_4x8_neon_erased( + mut dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + mut left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, @@ -823,6 +621,9 @@ unsafe extern "C" fn cdef_filter_4x8_neon( edges: CdefEdgeFlags, bitdepth_max: libc::c_int, ) { + // TODO(legare): Temporary import until this fn is deduplicated. + use crate::src::cdef::*; + let mut tmp_buf: [uint16_t; 104] = [0; 104]; let mut tmp = tmp_buf.as_mut_ptr().offset(2 * 8).offset(8); dav1d_cdef_padding4_16bpc_neon(tmp, dst, stride, left, top, bottom, 8, edges); @@ -842,12 +643,12 @@ unsafe extern "C" fn cdef_filter_4x8_neon( #[inline(always)] #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] -unsafe extern "C" fn cdef_filter_4x4_neon( - mut dst: *mut pixel, +unsafe extern "C" fn cdef_filter_4x4_neon_erased( + mut dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + mut left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, @@ -855,6 +656,9 @@ unsafe extern "C" fn cdef_filter_4x4_neon( edges: CdefEdgeFlags, bitdepth_max: libc::c_int, ) { + // TODO(legare): Temporary import until this fn is deduplicated. + use crate::src::cdef::*; + let mut tmp_buf = [0; 104]; let mut tmp = tmp_buf.as_mut_ptr().offset(2 * 8).offset(8); dav1d_cdef_padding4_16bpc_neon(tmp, dst, stride, left, top, bottom, 4, edges); @@ -878,10 +682,10 @@ use crate::src::cpu::dav1d_get_cpu_flags; #[no_mangle] #[cold] pub unsafe extern "C" fn dav1d_cdef_dsp_init_16bpc(c: *mut Dav1dCdefDSPContext) { - (*c).dir = Some(cdef_find_dir_c); - (*c).fb[0] = Some(cdef_filter_block_8x8_c); - (*c).fb[1] = Some(cdef_filter_block_4x8_c); - (*c).fb[2] = Some(cdef_filter_block_4x4_c); + (*c).dir = cdef_find_dir_c_erased; + (*c).fb[0] = cdef_filter_block_8x8_c_erased; + (*c).fb[1] = cdef_filter_block_4x8_c_erased; + (*c).fb[2] = cdef_filter_block_4x4_c_erased; #[cfg(feature = "asm")] cfg_if! { diff --git a/src/cdef_tmpl_8.rs b/src/cdef_tmpl_8.rs index ead658f1d..b2c136727 100644 --- a/src/cdef_tmpl_8.rs +++ b/src/cdef_tmpl_8.rs @@ -6,290 +6,18 @@ use ::libc; #[cfg(feature = "asm")] use cfg_if::cfg_if; -#[cfg(all(feature = "asm", any(target_arch = "x86", target_arch = "x86_64"),))] -extern "C" { - fn dav1d_cdef_filter_8x8_8bpc_ssse3( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x8_8bpc_ssse3( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x4_8bpc_ssse3( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_dir_8bpc_sse4( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - ) -> libc::c_int; - fn dav1d_cdef_filter_8x8_8bpc_sse4( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x8_8bpc_sse4( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x4_8bpc_sse4( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_dir_8bpc_avx2( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - ) -> libc::c_int; - fn dav1d_cdef_filter_8x8_8bpc_avx2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x8_8bpc_avx2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x4_8bpc_avx2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_8x8_8bpc_avx512icl( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x8_8bpc_avx512icl( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x4_8bpc_avx512icl( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_4x8_8bpc_sse2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_dir_8bpc_ssse3( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - ) -> libc::c_int; - fn dav1d_cdef_filter_4x4_8bpc_sse2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter_8x8_8bpc_sse2( - dst: *mut pixel, - stride: ptrdiff_t, - left: const_left_pixel_row_2px, - top: *const pixel, - bottom: *const pixel, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - edges: CdefEdgeFlags, - ); -} - -#[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64")))] -extern "C" { - fn dav1d_cdef_find_dir_8bpc_neon( - dst: *const pixel, - dst_stride: ptrdiff_t, - var: *mut libc::c_uint, - ) -> libc::c_int; - fn dav1d_cdef_padding4_8bpc_neon( - tmp: *mut uint16_t, - src: *const pixel, - src_stride: ptrdiff_t, - left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, - h: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_padding8_8bpc_neon( - tmp: *mut uint16_t, - src: *const pixel, - src_stride: ptrdiff_t, - left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, - h: libc::c_int, - edges: CdefEdgeFlags, - ); - fn dav1d_cdef_filter4_8bpc_neon( - dst: *mut pixel, - dst_stride: ptrdiff_t, - tmp: *const uint16_t, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - h: libc::c_int, - edges: size_t, - ); - fn dav1d_cdef_filter8_8bpc_neon( - dst: *mut pixel, - dst_stride: ptrdiff_t, - tmp: *const uint16_t, - pri_strength: libc::c_int, - sec_strength: libc::c_int, - dir: libc::c_int, - damping: libc::c_int, - h: libc::c_int, - edges: size_t, - ); -} - use crate::src::tables::dav1d_cdef_directions; pub type pixel = uint8_t; +use crate::include::common::intops::iclip; +use crate::include::common::intops::imax; +use crate::include::common::intops::umin; use crate::src::cdef::CdefEdgeFlags; +use crate::src::cdef::Dav1dCdefDSPContext; 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; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -pub type cdef_dir_fn = - Option libc::c_int>; -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -use crate::include::common::intops::iclip; -use crate::include::common::intops::imax; -use crate::include::common::intops::umin; use crate::include::common::intops::ulog2; use crate::src::cdef::constrain; @@ -555,24 +283,25 @@ unsafe extern "C" fn cdef_filter_block_c( } }; } -unsafe extern "C" fn cdef_filter_block_4x4_c( - dst: *mut pixel, +unsafe extern "C" fn cdef_filter_block_4x4_c_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + mut left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, damping: libc::c_int, edges: CdefEdgeFlags, + _bitdepth_max: libc::c_int, ) { cdef_filter_block_c( - dst, + dst.cast(), stride, - left, - top, - bottom, + left.cast(), + top.cast(), + bottom.cast(), pri_strength, sec_strength, dir, @@ -582,24 +311,25 @@ unsafe extern "C" fn cdef_filter_block_4x4_c( edges, ); } -unsafe extern "C" fn cdef_filter_block_4x8_c( - dst: *mut pixel, +unsafe extern "C" fn cdef_filter_block_4x8_c_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, damping: libc::c_int, edges: CdefEdgeFlags, + _bitdepth_max: libc::c_int, ) { cdef_filter_block_c( - dst, + dst.cast(), stride, - left, - top, - bottom, + left.cast(), + top.cast(), + bottom.cast(), pri_strength, sec_strength, dir, @@ -609,24 +339,25 @@ unsafe extern "C" fn cdef_filter_block_4x8_c( edges, ); } -unsafe extern "C" fn cdef_filter_block_8x8_c( - dst: *mut pixel, +unsafe extern "C" fn cdef_filter_block_8x8_c_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, damping: libc::c_int, edges: CdefEdgeFlags, + _bitdepth_max: libc::c_int, ) { cdef_filter_block_c( - dst, + dst.cast(), stride, - left, - top, - bottom, + left.cast(), + top.cast(), + bottom.cast(), pri_strength, sec_strength, dir, @@ -636,7 +367,15 @@ unsafe extern "C" fn cdef_filter_block_8x8_c( edges, ); } -unsafe extern "C" fn cdef_find_dir_c( +unsafe extern "C" fn cdef_find_dir_c_erased( + mut img: *const libc::c_void, + stride: ptrdiff_t, + var: *mut libc::c_uint, + _bitdepth_max: libc::c_int, +) -> libc::c_int { + cdef_find_dir_rust(img.cast(), stride, var) +} +unsafe fn cdef_find_dir_rust( mut img: *const pixel, stride: ptrdiff_t, var: *mut libc::c_uint, @@ -764,6 +503,8 @@ use crate::src::cpu::dav1d_get_cpu_flags; #[cfg(all(feature = "asm", any(target_arch = "x86", target_arch = "x86_64"),))] unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { use crate::src::x86::cpu::*; + // TODO(legare): Temporary import until init fns are deduplicated. + use crate::src::cdef::*; let flags: libc::c_uint = dav1d_get_cpu_flags(); @@ -771,27 +512,27 @@ unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { return; } - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_8bpc_sse2); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_8bpc_sse2); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_8bpc_sse2); + (*c).fb[0] = dav1d_cdef_filter_8x8_8bpc_sse2; + (*c).fb[1] = dav1d_cdef_filter_4x8_8bpc_sse2; + (*c).fb[2] = dav1d_cdef_filter_4x4_8bpc_sse2; if flags & DAV1D_X86_CPU_FLAG_SSSE3 == 0 { return; } - (*c).dir = Some(dav1d_cdef_dir_8bpc_ssse3); - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_8bpc_ssse3); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_8bpc_ssse3); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_8bpc_ssse3); + (*c).dir = dav1d_cdef_dir_8bpc_ssse3; + (*c).fb[0] = dav1d_cdef_filter_8x8_8bpc_ssse3; + (*c).fb[1] = dav1d_cdef_filter_4x8_8bpc_ssse3; + (*c).fb[2] = dav1d_cdef_filter_4x4_8bpc_ssse3; if flags & DAV1D_X86_CPU_FLAG_SSE41 == 0 { return; } - (*c).dir = Some(dav1d_cdef_dir_8bpc_sse4); - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_8bpc_sse4); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_8bpc_sse4); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_8bpc_sse4); + (*c).dir = dav1d_cdef_dir_8bpc_sse4; + (*c).fb[0] = dav1d_cdef_filter_8x8_8bpc_sse4; + (*c).fb[1] = dav1d_cdef_filter_4x8_8bpc_sse4; + (*c).fb[2] = dav1d_cdef_filter_4x4_8bpc_sse4; #[cfg(target_arch = "x86_64")] { @@ -799,18 +540,18 @@ unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { return; } - (*c).dir = Some(dav1d_cdef_dir_8bpc_avx2); - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_8bpc_avx2); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_8bpc_avx2); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_8bpc_avx2); + (*c).dir = dav1d_cdef_dir_8bpc_avx2; + (*c).fb[0] = dav1d_cdef_filter_8x8_8bpc_avx2; + (*c).fb[1] = dav1d_cdef_filter_4x8_8bpc_avx2; + (*c).fb[2] = dav1d_cdef_filter_4x4_8bpc_avx2; if flags & DAV1D_X86_CPU_FLAG_AVX512ICL == 0 { return; } - (*c).fb[0] = Some(dav1d_cdef_filter_8x8_8bpc_avx512icl); - (*c).fb[1] = Some(dav1d_cdef_filter_4x8_8bpc_avx512icl); - (*c).fb[2] = Some(dav1d_cdef_filter_4x4_8bpc_avx512icl); + (*c).fb[0] = dav1d_cdef_filter_8x8_8bpc_avx512icl; + (*c).fb[1] = dav1d_cdef_filter_4x8_8bpc_avx512icl; + (*c).fb[2] = dav1d_cdef_filter_4x4_8bpc_avx512icl; } } @@ -818,6 +559,8 @@ unsafe extern "C" fn cdef_dsp_init_x86(c: *mut Dav1dCdefDSPContext) { #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] unsafe extern "C" fn cdef_dsp_init_arm(c: *mut Dav1dCdefDSPContext) { use crate::src::arm::cpu::DAV1D_ARM_CPU_FLAG_NEON; + // TODO(legare): Temporary import until init fns are deduplicated. + use crate::src::cdef::*; let flags: libc::c_uint = dav1d_get_cpu_flags(); @@ -825,26 +568,30 @@ unsafe extern "C" fn cdef_dsp_init_arm(c: *mut Dav1dCdefDSPContext) { return; } - (*c).dir = Some(dav1d_cdef_find_dir_8bpc_neon); - (*c).fb[0] = Some(cdef_filter_8x8_neon); - (*c).fb[1] = Some(cdef_filter_4x8_neon); - (*c).fb[2] = Some(cdef_filter_4x4_neon); + (*c).dir = dav1d_cdef_find_dir_8bpc_neon; + (*c).fb[0] = cdef_filter_8x8_neon_erased; + (*c).fb[1] = cdef_filter_4x8_neon_erased; + (*c).fb[2] = cdef_filter_4x4_neon_erased; } #[inline(always)] #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] -unsafe extern "C" fn cdef_filter_4x4_neon( - mut dst: *mut pixel, +unsafe extern "C" fn cdef_filter_4x4_neon_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, damping: libc::c_int, edges: CdefEdgeFlags, + _bitdepth_max: libc::c_int, ) { + // TODO(legare): Temporary import until this fn is deduplicated. + use crate::src::cdef::*; + let mut tmp_buf = Align16([0; 104]); let mut tmp = tmp_buf.0.as_mut_ptr().offset(2 * 8).offset(8); dav1d_cdef_padding4_8bpc_neon(tmp, dst, stride, left, top, bottom, 4, edges); @@ -863,18 +610,22 @@ unsafe extern "C" fn cdef_filter_4x4_neon( #[inline(always)] #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] -unsafe extern "C" fn cdef_filter_4x8_neon( - mut dst: *mut pixel, +unsafe extern "C" fn cdef_filter_4x8_neon_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, damping: libc::c_int, edges: CdefEdgeFlags, + _bitdepth_max: libc::c_int, ) { + // TODO(legare): Temporary import until this fn is deduplicated. + use crate::src::cdef::*; + let mut tmp_buf = Align16([0; 104]); let mut tmp = tmp_buf.0.as_mut_ptr().offset(2 * 8).offset(8); dav1d_cdef_padding4_8bpc_neon(tmp, dst, stride, left, top, bottom, 8, edges); @@ -893,18 +644,22 @@ unsafe extern "C" fn cdef_filter_4x8_neon( #[inline(always)] #[cfg(all(feature = "asm", any(target_arch = "arm", target_arch = "aarch64"),))] -unsafe extern "C" fn cdef_filter_8x8_neon( - mut dst: *mut pixel, +unsafe extern "C" fn cdef_filter_8x8_neon_erased( + dst: *mut libc::c_void, stride: ptrdiff_t, - mut left: *const [pixel; 2], - top: *const pixel, - bottom: *const pixel, + left: *const libc::c_void, + top: *const libc::c_void, + bottom: *const libc::c_void, pri_strength: libc::c_int, sec_strength: libc::c_int, dir: libc::c_int, damping: libc::c_int, edges: CdefEdgeFlags, + _bitdepth_max: libc::c_int, ) { + // TODO(legare): Temporary import until this fn is deduplicated. + use crate::src::cdef::*; + let mut tmp_buf = Align16([0; 200]); let mut tmp = tmp_buf.0.as_mut_ptr().offset(2 * 16).offset(8); dav1d_cdef_padding8_8bpc_neon(tmp, dst, stride, left, top, bottom, 8, edges); @@ -924,10 +679,10 @@ unsafe extern "C" fn cdef_filter_8x8_neon( #[no_mangle] #[cold] pub unsafe extern "C" fn dav1d_cdef_dsp_init_8bpc(c: *mut Dav1dCdefDSPContext) { - (*c).dir = Some(cdef_find_dir_c); - (*c).fb[0] = Some(cdef_filter_block_8x8_c); - (*c).fb[1] = Some(cdef_filter_block_4x8_c); - (*c).fb[2] = Some(cdef_filter_block_4x4_c); + (*c).dir = cdef_find_dir_c_erased; + (*c).fb[0] = cdef_filter_block_8x8_c_erased; + (*c).fb[1] = cdef_filter_block_4x8_c_erased; + (*c).fb[2] = cdef_filter_block_4x4_c_erased; #[cfg(feature = "asm")] cfg_if! { diff --git a/src/cdf.rs b/src/cdf.rs index 47cf95e60..d68f7a79d 100644 --- a/src/cdf.rs +++ b/src/cdf.rs @@ -342,32 +342,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut libc::c_void, - ptrdiff_t, - const_left_pixel_row_2px, - *const libc::c_void, - *const libc::c_void, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const libc::c_void; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/decode.rs b/src/decode.rs index 52791aac9..0cd6671ec 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -514,32 +514,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut libc::c_void, - ptrdiff_t, - const_left_pixel_row_2px, - *const libc::c_void, - *const libc::c_void, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const libc::c_void; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/lf_apply_tmpl_16.rs b/src/lf_apply_tmpl_16.rs index 44c1613d0..dc0f3fd46 100644 --- a/src/lf_apply_tmpl_16.rs +++ b/src/lf_apply_tmpl_16.rs @@ -235,34 +235,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - libc::c_int, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = Option< - unsafe extern "C" fn(*const pixel, ptrdiff_t, *mut libc::c_uint, libc::c_int) -> libc::c_int, ->; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/lf_apply_tmpl_8.rs b/src/lf_apply_tmpl_8.rs index 49bcd5adb..3dd3e5389 100644 --- a/src/lf_apply_tmpl_8.rs +++ b/src/lf_apply_tmpl_8.rs @@ -236,32 +236,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/lib.rs b/src/lib.rs index 3ef3ec3de..3a1d807c2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -232,33 +232,9 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; -pub type pixel = (); -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut libc::c_void, - ptrdiff_t, - const_left_pixel_row_2px, - *const libc::c_void, - *const libc::c_void, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const libc::c_void; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/log.rs b/src/log.rs index 407f82f9e..edd857e6b 100644 --- a/src/log.rs +++ b/src/log.rs @@ -105,33 +105,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -pub type pixel = (); -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut libc::c_void, - ptrdiff_t, - const_left_pixel_row_2px, - *const libc::c_void, - *const libc::c_void, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const libc::c_void; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/lr_apply_tmpl_16.rs b/src/lr_apply_tmpl_16.rs index f53a7781a..e838fffc5 100644 --- a/src/lr_apply_tmpl_16.rs +++ b/src/lr_apply_tmpl_16.rs @@ -244,6 +244,7 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::looprestorationfilter_fn; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; use crate::src::looprestoration::LooprestorationParams; @@ -252,33 +253,6 @@ use crate::src::looprestoration::LR_HAVE_BOTTOM; use crate::src::looprestoration::LR_HAVE_LEFT; use crate::src::looprestoration::LR_HAVE_RIGHT; use crate::src::looprestoration::LR_HAVE_TOP; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - libc::c_int, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = Option< - unsafe extern "C" fn(*const pixel, ptrdiff_t, *mut libc::c_uint, libc::c_int) -> libc::c_int, ->; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/lr_apply_tmpl_8.rs b/src/lr_apply_tmpl_8.rs index ded80e120..663ae8bd3 100644 --- a/src/lr_apply_tmpl_8.rs +++ b/src/lr_apply_tmpl_8.rs @@ -245,6 +245,7 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::looprestorationfilter_fn; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; use crate::src::looprestoration::LooprestorationParams; @@ -253,31 +254,6 @@ use crate::src::looprestoration::LR_HAVE_BOTTOM; use crate::src::looprestoration::LR_HAVE_LEFT; use crate::src::looprestoration::LR_HAVE_RIGHT; use crate::src::looprestoration::LR_HAVE_TOP; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/obu.rs b/src/obu.rs index 1228dbda7..e6913eecd 100644 --- a/src/obu.rs +++ b/src/obu.rs @@ -323,33 +323,10 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; #[derive(Copy, Clone)] #[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut libc::c_void, - ptrdiff_t, - const_left_pixel_row_2px, - *const libc::c_void, - *const libc::c_void, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const libc::c_void; -pub type cdef_dir_fn = - Option libc::c_int>; -#[derive(Copy, Clone)] -#[repr(C)] pub struct Dav1dLoopFilterDSPContext { pub loop_filter_sb: [[loopfilter_sb_fn; 2]; 2], } diff --git a/src/picture.rs b/src/picture.rs index 693ee7405..470b47861 100644 --- a/src/picture.rs +++ b/src/picture.rs @@ -256,32 +256,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut libc::c_void, - ptrdiff_t, - const_left_pixel_row_2px, - *const libc::c_void, - *const libc::c_void, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const libc::c_void; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/recon_tmpl_16.rs b/src/recon_tmpl_16.rs index 7fc6e04ff..b596d1fc8 100644 --- a/src/recon_tmpl_16.rs +++ b/src/recon_tmpl_16.rs @@ -318,34 +318,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - libc::c_int, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = Option< - unsafe extern "C" fn(*const pixel, ptrdiff_t, *mut libc::c_uint, libc::c_int) -> libc::c_int, ->; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/recon_tmpl_8.rs b/src/recon_tmpl_8.rs index 616c17e7e..bc925dd66 100644 --- a/src/recon_tmpl_8.rs +++ b/src/recon_tmpl_8.rs @@ -317,32 +317,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut pixel, - ptrdiff_t, - const_left_pixel_row_2px, - *const pixel, - *const pixel, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const [pixel; 2]; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext { diff --git a/src/thread_task.rs b/src/thread_task.rs index d44b60dc8..dffa84230 100644 --- a/src/thread_task.rs +++ b/src/thread_task.rs @@ -312,32 +312,8 @@ pub struct Dav1dDSPContext { pub cdef: Dav1dCdefDSPContext, pub lr: Dav1dLoopRestorationDSPContext, } +use crate::src::cdef::Dav1dCdefDSPContext; use crate::src::looprestoration::Dav1dLoopRestorationDSPContext; - -#[derive(Copy, Clone)] -#[repr(C)] -pub struct Dav1dCdefDSPContext { - pub dir: cdef_dir_fn, - pub fb: [cdef_fn; 3], -} -pub type cdef_fn = Option< - unsafe extern "C" fn( - *mut libc::c_void, - ptrdiff_t, - const_left_pixel_row_2px, - *const libc::c_void, - *const libc::c_void, - libc::c_int, - libc::c_int, - libc::c_int, - libc::c_int, - CdefEdgeFlags, - ) -> (), ->; -use crate::src::cdef::CdefEdgeFlags; -pub type const_left_pixel_row_2px = *const libc::c_void; -pub type cdef_dir_fn = - Option libc::c_int>; #[derive(Copy, Clone)] #[repr(C)] pub struct Dav1dLoopFilterDSPContext {