Skip to content

Commit

Permalink
#[no_mangle] fns: Deduplicate most non-bpc, non-*_c declarations …
Browse files Browse the repository at this point in the history
…into `use` imports (#490)

The `#[no_mangle]`s that are remaining are:
* Bitdepth-specific `fn`s (many of these)
* `*_c` `fn`s (many of these)
* `DAV1D_API` `fn`s, which must remain `#[no_mangle]`
* `static`s used by asm, which must remain `#[no_mangle]`
* `fn`s not in the `rav1d` library (e.x. in `tools/`), which are lower
priority
  • Loading branch information
kkysen authored Sep 25, 2023
2 parents 8db9f8c + ac3f2b9 commit 827310b
Show file tree
Hide file tree
Showing 10 changed files with 49 additions and 105 deletions.
3 changes: 1 addition & 2 deletions src/cdf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5648,8 +5648,7 @@ pub unsafe fn dav1d_cdf_thread_copy(dst: *mut CdfContext, src: *const CdfThreadC
};
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_cdf_thread_alloc(
pub unsafe fn dav1d_cdf_thread_alloc(
c: *mut Dav1dContext,
cdf: *mut CdfThreadContext,
have_frame_mt: c_int,
Expand Down
1 change: 0 additions & 1 deletion src/cpu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ pub extern "C" fn dav1d_set_cpu_flags_mask(mask: c_uint) {
dav1d_cpu_flags_mask.store(mask, Ordering::SeqCst);
}

#[no_mangle]
#[cold]
pub(crate) fn dav1d_num_logical_processors(_c: *mut Dav1dContext) -> c_int {
num_cpus::get() as c_int
Expand Down
53 changes: 11 additions & 42 deletions src/decode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,18 @@ use crate::include::dav1d::headers::DAV1D_TX_SWITCHABLE;
use crate::include::dav1d::headers::DAV1D_WM_TYPE_AFFINE;
use crate::include::dav1d::headers::DAV1D_WM_TYPE_IDENTITY;
use crate::include::dav1d::headers::DAV1D_WM_TYPE_TRANSLATION;
use crate::include::dav1d::picture::Dav1dPicture;
use crate::include::stdatomic::atomic_int;
use crate::include::stdatomic::atomic_uint;
use crate::src::align::Align16;
use crate::src::cdef::Dav1dCdefDSPContext;
use crate::src::cdf::dav1d_cdf_thread_alloc;
use crate::src::cdf::dav1d_cdf_thread_copy;
use crate::src::cdf::dav1d_cdf_thread_init_static;
use crate::src::cdf::dav1d_cdf_thread_ref;
use crate::src::cdf::dav1d_cdf_thread_unref;
use crate::src::cdf::dav1d_cdf_thread_update;
use crate::src::cdf::CdfMvComponent;
use crate::src::cdf::CdfMvContext;
use crate::src::cdf::CdfThreadContext;
use crate::src::ctx::CaseSet;
use crate::src::data::dav1d_data_props_copy;
use crate::src::data::dav1d_data_unref_internal;
Expand Down Expand Up @@ -157,6 +156,7 @@ use crate::src::lf_mask::dav1d_create_lf_mask_intra;
use crate::src::lf_mask::Av1Filter;
use crate::src::lf_mask::Av1Restoration;
use crate::src::lf_mask::Av1RestorationUnit;
use crate::src::log::dav1d_log;
use crate::src::loopfilter::Dav1dLoopFilterDSPContext;
use crate::src::looprestoration::dav1d_loop_restoration_dsp_init;
use crate::src::mc::dav1d_mc_dsp_init;
Expand All @@ -174,9 +174,11 @@ use crate::src::msac::dav1d_msac_decode_symbol_adapt4;
use crate::src::msac::dav1d_msac_decode_symbol_adapt8;
use crate::src::msac::dav1d_msac_decode_uniform;
use crate::src::msac::dav1d_msac_init;
use crate::src::picture::dav1d_picture_alloc_copy;
use crate::src::picture::dav1d_picture_get_event_flags;
use crate::src::picture::dav1d_picture_ref;
use crate::src::picture::dav1d_picture_unref_internal;
use crate::src::picture::dav1d_thread_picture_alloc;
use crate::src::picture::dav1d_thread_picture_ref;
use crate::src::picture::dav1d_thread_picture_unref;
use crate::src::picture::Dav1dThreadPicture;
Expand Down Expand Up @@ -210,6 +212,8 @@ use crate::src::tables::dav1d_wedge_ctx_lut;
use crate::src::tables::dav1d_ymode_size_context;
use crate::src::tables::interintra_allowed_mask;
use crate::src::tables::wedge_allowed_mask;
use crate::src::thread_task::dav1d_task_create_tile_sbrow;
use crate::src::thread_task::dav1d_task_frame_init;
use crate::src::thread_task::FRAME_ERROR;
use crate::src::thread_task::TILE_ERROR;
use crate::src::warpmv::dav1d_find_affine_int;
Expand Down Expand Up @@ -249,11 +253,6 @@ extern "C" {
fn dav1d_cdef_dsp_init_8bpc(c: *mut Dav1dCdefDSPContext);
#[cfg(feature = "bitdepth_16")]
fn dav1d_cdef_dsp_init_16bpc(c: *mut Dav1dCdefDSPContext);
fn dav1d_cdf_thread_alloc(
c: *mut Dav1dContext,
cdf: *mut CdfThreadContext,
have_frame_mt: c_int,
) -> c_int;
#[cfg(feature = "bitdepth_8")]
fn dav1d_film_grain_dsp_init_8bpc(c: *mut Dav1dFilmGrainDSPContext);
#[cfg(feature = "bitdepth_16")]
Expand All @@ -270,17 +269,6 @@ extern "C" {
fn dav1d_loop_filter_dsp_init_8bpc(c: *mut Dav1dLoopFilterDSPContext);
#[cfg(feature = "bitdepth_16")]
fn dav1d_loop_filter_dsp_init_16bpc(c: *mut Dav1dLoopFilterDSPContext);
fn dav1d_thread_picture_alloc(
c: *mut Dav1dContext,
f: *mut Dav1dFrameContext,
bpc: c_int,
) -> c_int;
fn dav1d_picture_alloc_copy(
c: *mut Dav1dContext,
dst: *mut Dav1dPicture,
w: c_int,
src: *const Dav1dPicture,
) -> c_int;
#[cfg(feature = "bitdepth_8")]
fn dav1d_recon_b_intra_8bpc(
t: *mut Dav1dTaskContext,
Expand Down Expand Up @@ -339,13 +327,6 @@ extern "C" {
fn dav1d_read_coef_blocks_8bpc(t: *mut Dav1dTaskContext, bs: BlockSize, b: *const Av1Block);
#[cfg(feature = "bitdepth_16")]
fn dav1d_read_coef_blocks_16bpc(t: *mut Dav1dTaskContext, bs: BlockSize, b: *const Av1Block);
fn dav1d_log(c: *mut Dav1dContext, format: *const c_char, _: ...);
fn dav1d_task_create_tile_sbrow(
f: *mut Dav1dFrameContext,
pass: c_int,
cond_signal: c_int,
) -> c_int;
fn dav1d_task_frame_init(f: *mut Dav1dFrameContext);
}

fn init_quant_tables(
Expand Down Expand Up @@ -4203,8 +4184,7 @@ unsafe fn read_restoration_info(
}
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_decode_tile_sbrow(t: *mut Dav1dTaskContext) -> c_int {
pub unsafe fn dav1d_decode_tile_sbrow(t: *mut Dav1dTaskContext) -> c_int {
let f: *const Dav1dFrameContext = (*t).f;
let root_bl: BlockLevel = (if (*(*f).seq_hdr).sb128 != 0 {
BL_128X128 as c_int
Expand Down Expand Up @@ -4438,10 +4418,7 @@ pub unsafe extern "C" fn dav1d_decode_tile_sbrow(t: *mut Dav1dTaskContext) -> c_
return 0 as c_int;
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_decode_frame_init(f: *mut Dav1dFrameContext) -> c_int {
let f = &mut *f; // TODO(kkysen) propagate to arg once we deduplicate the fn decl

pub unsafe fn dav1d_decode_frame_init(f: &mut Dav1dFrameContext) -> c_int {
let c = &*f.c;

if f.sbh > f.lf.start_of_tile_row_sz {
Expand Down Expand Up @@ -4888,10 +4865,7 @@ pub unsafe extern "C" fn dav1d_decode_frame_init(f: *mut Dav1dFrameContext) -> c
0
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_decode_frame_init_cdf(f: *mut Dav1dFrameContext) -> c_int {
let f = &mut *f; // TODO(kkysen) propagate to arg once we deduplicate the fn decl

pub unsafe fn dav1d_decode_frame_init_cdf(f: &mut Dav1dFrameContext) -> c_int {
let c = &*f.c;

if (*f.frame_hdr).refresh_context != 0 {
Expand Down Expand Up @@ -5055,9 +5029,7 @@ unsafe fn dav1d_decode_frame_main(f: &mut Dav1dFrameContext) -> c_int {
0
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_decode_frame_exit(f: *mut Dav1dFrameContext, retval: c_int) {
let f = &mut *f; // TODO(kkysen) propagate to arg once we deduplicate the fn decl
pub unsafe fn dav1d_decode_frame_exit(f: &mut Dav1dFrameContext, retval: c_int) {
let c = &*f.c;
if !f.sr_cur.p.data[0].is_null() {
f.task_thread.error = 0;
Expand Down Expand Up @@ -5147,10 +5119,7 @@ fn get_upscale_x0(in_w: c_int, out_w: c_int, step: c_int) -> c_int {
x0 & 0x3fff
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_submit_frame(c: *mut Dav1dContext) -> c_int {
let c = &mut *c; // TODO(kkysen) propagate to arg once we deduplicate the fn decl

pub unsafe fn dav1d_submit_frame(c: &mut Dav1dContext) -> c_int {
// wait for c->out_delayed[next] and move into c->out if visible
let (f, out_delayed) = if c.n_fc > 1 {
pthread_mutex_lock(&mut c.task_thread.lock);
Expand Down
26 changes: 8 additions & 18 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use crate::include::stdatomic::atomic_int;
use crate::include::stdatomic::atomic_uint;
use crate::src::cdf::dav1d_cdf_thread_unref;
use crate::src::cpu::dav1d_init_cpu;
use crate::src::cpu::dav1d_num_logical_processors;
use crate::src::data::dav1d_data_create_internal;
use crate::src::data::dav1d_data_props_copy;
use crate::src::data::dav1d_data_props_set_defaults;
Expand All @@ -33,6 +34,7 @@ use crate::src::data::dav1d_data_ref;
use crate::src::data::dav1d_data_unref_internal;
use crate::src::data::dav1d_data_wrap_internal;
use crate::src::data::dav1d_data_wrap_user_data_internal;
use crate::src::decode::dav1d_decode_frame_exit;
use crate::src::filmgrain::Dav1dFilmGrainDSPContext;
use crate::src::internal::CodedBlockInfo;
use crate::src::internal::Dav1dContext;
Expand All @@ -44,15 +46,18 @@ use crate::src::intra_edge::dav1d_init_mode_tree;
use crate::src::levels::Av1Block;
use crate::src::levels::BL_128X128;
use crate::src::levels::BL_64X64;
use crate::src::log::dav1d_log;
use crate::src::log::dav1d_log_default_callback;
use crate::src::mem::dav1d_alloc_aligned;
use crate::src::mem::dav1d_free_aligned;
use crate::src::mem::dav1d_freep_aligned;
use crate::src::mem::dav1d_mem_pool_end;
use crate::src::mem::dav1d_mem_pool_init;
use crate::src::mem::freep;
use crate::src::obu::dav1d_parse_obus;
use crate::src::picture::dav1d_default_picture_alloc;
use crate::src::picture::dav1d_default_picture_release;
use crate::src::picture::dav1d_picture_alloc_copy;
use crate::src::picture::dav1d_picture_get_event_flags;
use crate::src::picture::dav1d_picture_move_ref;
use crate::src::picture::dav1d_picture_ref;
Expand All @@ -65,8 +70,9 @@ use crate::src::picture::PICTURE_FLAG_NEW_TEMPORAL_UNIT;
use crate::src::r#ref::dav1d_ref_dec;
use crate::src::r#ref::Dav1dRef;
use crate::src::refmvs::dav1d_refmvs_clear;
use crate::src::refmvs::dav1d_refmvs_dsp_init;
use crate::src::refmvs::dav1d_refmvs_init;
use crate::src::refmvs::Dav1dRefmvsDSPContext;
use crate::src::thread_task::dav1d_task_delayed_fg;
use crate::src::thread_task::dav1d_worker_task;
use crate::src::thread_task::FRAME_ERROR;
use crate::stderr;
Expand Down Expand Up @@ -107,7 +113,6 @@ use libc::dlsym;
use libc::sysconf;

extern "C" {
fn dav1d_num_logical_processors(c: *mut Dav1dContext) -> c_int;
#[cfg(feature = "bitdepth_16")]
fn dav1d_apply_grain_16bpc(
dsp: *const Dav1dFilmGrainDSPContext,
Expand All @@ -120,31 +125,16 @@ extern "C" {
out: *mut Dav1dPicture,
in_0: *const Dav1dPicture,
);
fn dav1d_picture_alloc_copy(
c: *mut Dav1dContext,
dst: *mut Dav1dPicture,
w: c_int,
src: *const Dav1dPicture,
) -> c_int;
fn pthread_create(
__newthread: *mut pthread_t,
__attr: *const pthread_attr_t,
__start_routine: Option<unsafe extern "C" fn(*mut c_void) -> *mut c_void>,
__arg: *mut c_void,
) -> c_int;
fn dav1d_refmvs_dsp_init(dsp: *mut Dav1dRefmvsDSPContext);
fn pthread_once(
__once_control: *mut pthread_once_t,
__init_routine: Option<unsafe extern "C" fn() -> ()>,
) -> c_int;
fn dav1d_log(c: *mut Dav1dContext, format: *const c_char, _: ...);
fn dav1d_parse_obus(c: *mut Dav1dContext, in_0: *mut Dav1dData, global: c_int) -> c_int;
fn dav1d_task_delayed_fg(
c: *mut Dav1dContext,
out: *mut Dav1dPicture,
in_0: *const Dav1dPicture,
);
fn dav1d_decode_frame_exit(f: *mut Dav1dFrameContext, retval: c_int);
}

#[repr(C)]
Expand Down Expand Up @@ -1210,7 +1200,7 @@ pub unsafe extern "C" fn dav1d_flush(c: *mut Dav1dContext) {
}
let f: *mut Dav1dFrameContext =
&mut *((*c).fc).offset(next as isize) as *mut Dav1dFrameContext;
dav1d_decode_frame_exit(f, -(1 as c_int));
dav1d_decode_frame_exit(&mut *f, -(1 as c_int));
(*f).n_tile_data = 0 as c_int;
(*f).task_thread.retval = 0 as c_int;
let out_delayed: *mut Dav1dThreadPicture = &mut *((*c).frame_thread.out_delayed)
Expand Down
1 change: 0 additions & 1 deletion src/log.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ pub unsafe extern "C" fn dav1d_log_default_callback(
vfprintf(stderr, format, ap.as_va_list());
}

#[no_mangle]
#[cold]
pub unsafe extern "C" fn dav1d_log(c: *mut Dav1dContext, format: *const c_char, args: ...) {
if c.is_null() {
Expand Down
19 changes: 7 additions & 12 deletions src/obu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ use crate::src::cdf::dav1d_cdf_thread_unref;
use crate::src::data::dav1d_data_props_copy;
use crate::src::data::dav1d_data_ref;
use crate::src::data::dav1d_data_unref_internal;
use crate::src::decode::dav1d_submit_frame;
use crate::src::env::get_poc_diff;
use crate::src::getbits::dav1d_bytealign_get_bits;
use crate::src::getbits::dav1d_get_bit;
Expand All @@ -89,6 +90,7 @@ use crate::src::levels::OBU_META_HDR_MDCV;
use crate::src::levels::OBU_META_ITUT_T35;
use crate::src::levels::OBU_META_SCALABILITY;
use crate::src::levels::OBU_META_TIMECODE;
use crate::src::log::dav1d_log;
use crate::src::picture::dav1d_picture_get_event_flags;
use crate::src::picture::dav1d_thread_picture_ref;
use crate::src::picture::dav1d_thread_picture_unref;
Expand All @@ -101,6 +103,7 @@ use crate::src::r#ref::dav1d_ref_create;
use crate::src::r#ref::dav1d_ref_create_using_pool;
use crate::src::r#ref::dav1d_ref_dec;
use crate::src::r#ref::dav1d_ref_inc;
use crate::src::r#ref::dav1d_ref_is_writable;
use crate::src::r#ref::Dav1dRef;
use crate::src::tables::dav1d_default_wm_params;
use crate::src::thread_task::FRAME_ERROR;
Expand All @@ -118,11 +121,6 @@ use std::ffi::c_uint;
use std::ffi::c_ulong;
use std::ffi::c_void;

extern "C" {
fn dav1d_submit_frame(c: *mut Dav1dContext) -> c_int;
fn dav1d_log(c: *mut Dav1dContext, format: *const c_char, _: ...);
}

#[inline]
unsafe extern "C" fn dav1d_get_bits_pos(c: *const GetBits) -> c_uint {
return (((*c).ptr).offset_from((*c).ptr_start) as c_long as c_uint)
Expand Down Expand Up @@ -1635,12 +1633,7 @@ unsafe extern "C" fn dav1d_parse_obus_skip(
return len.wrapping_add(init_byte_pos) as c_int;
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_parse_obus(
c: *mut Dav1dContext,
in_0: *mut Dav1dData,
global: c_int,
) -> c_int {
pub unsafe fn dav1d_parse_obus(c: *mut Dav1dContext, in_0: *mut Dav1dData, global: c_int) -> c_int {
let mut gb: GetBits = GetBits {
state: 0,
bits_left: 0,
Expand Down Expand Up @@ -1940,6 +1933,8 @@ pub unsafe extern "C" fn dav1d_parse_obus(
return -(12 as c_int);
}
}
// ensure that the reference is writable
debug_assert!(dav1d_ref_is_writable((*c).frame_hdr_ref) != 0);
(*c).frame_hdr = (*(*c).frame_hdr_ref).data as *mut Dav1dFrameHeader;
memset(
(*c).frame_hdr as *mut c_void,
Expand Down Expand Up @@ -2273,7 +2268,7 @@ pub unsafe extern "C" fn dav1d_parse_obus(
if (*c).n_tile_data == 0 {
return dav1d_parse_obus_error(c, in_0);
}
res = dav1d_submit_frame(c);
res = dav1d_submit_frame(&mut *c);
if res < 0 {
return res;
}
Expand Down
11 changes: 3 additions & 8 deletions src/picture.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use crate::src::data::dav1d_data_props_copy;
use crate::src::data::dav1d_data_props_set_defaults;
use crate::src::internal::Dav1dContext;
use crate::src::internal::Dav1dFrameContext;
use crate::src::log::dav1d_log;
use crate::src::mem::dav1d_mem_pool_pop;
use crate::src::mem::dav1d_mem_pool_push;
use crate::src::mem::Dav1dMemPool;
Expand All @@ -40,10 +41,6 @@ use std::ffi::c_uint;
use std::ffi::c_ulong;
use std::ffi::c_void;

extern "C" {
fn dav1d_log(c: *mut Dav1dContext, format: *const c_char, _: ...);
}

pub type PictureFlags = c_uint;
pub const PICTURE_FLAG_NEW_TEMPORAL_UNIT: PictureFlags = 4;
pub const PICTURE_FLAG_NEW_OP_PARAMS_INFO: PictureFlags = 2;
Expand Down Expand Up @@ -239,8 +236,7 @@ unsafe extern "C" fn picture_alloc_with_edges(
return 0 as c_int;
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_thread_picture_alloc(
pub unsafe fn dav1d_thread_picture_alloc(
c: *mut Dav1dContext,
f: *mut Dav1dFrameContext,
bpc: c_int,
Expand Down Expand Up @@ -295,8 +291,7 @@ pub unsafe extern "C" fn dav1d_thread_picture_alloc(
return res;
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_picture_alloc_copy(
pub unsafe fn dav1d_picture_alloc_copy(
c: *mut Dav1dContext,
dst: *mut Dav1dPicture,
w: c_int,
Expand Down
3 changes: 1 addition & 2 deletions src/ref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,7 @@ pub unsafe fn dav1d_ref_dec(pref: *mut *mut Dav1dRef) {
}
}

#[no_mangle]
pub unsafe extern "C" fn dav1d_ref_is_writable(r#ref: *mut Dav1dRef) -> c_int {
pub unsafe fn dav1d_ref_is_writable(r#ref: *mut Dav1dRef) -> c_int {
return (::core::intrinsics::atomic_load_seqcst(&mut (*r#ref).ref_cnt as *mut atomic_int) == 1
&& !((*r#ref).data).is_null()) as c_int;
}
3 changes: 1 addition & 2 deletions src/refmvs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1659,9 +1659,8 @@ unsafe extern "C" fn refmvs_dsp_init_arm(c: *mut Dav1dRefmvsDSPContext) {
}
}

#[no_mangle]
#[cold]
pub unsafe extern "C" fn dav1d_refmvs_dsp_init(c: *mut Dav1dRefmvsDSPContext) {
pub unsafe fn dav1d_refmvs_dsp_init(c: *mut Dav1dRefmvsDSPContext) {
(*c).load_tmvs = Some(load_tmvs_c);
(*c).save_tmvs = Some(save_tmvs_c);
(*c).splat_mv = Some(splat_mv_rust);
Expand Down
Loading

0 comments on commit 827310b

Please sign in to comment.