diff --git a/tests/seek_stress.rs b/tests/seek_stress.rs index 37ed40db7..f26afc1c4 100644 --- a/tests/seek_stress.rs +++ b/tests/seek_stress.rs @@ -6,7 +6,7 @@ #[path = "../tools/input"] mod input { mod annexb; - mod input; + pub mod input; mod ivf; mod section5; } // mod input @@ -20,6 +20,15 @@ mod output { } // mod output #[path = "../tools/dav1d_cli_parse.rs"] mod dav1d_cli_parse; + +use crate::dav1d_cli_parse::parse; +use crate::dav1d_cli_parse::CLISettings; +use crate::dav1d_cli_parse::REALTIME_DISABLE; +use crate::input::input::input_close; +use crate::input::input::input_open; +use crate::input::input::input_read; +use crate::input::input::input_seek; +use crate::input::input::DemuxerContext; use rav1d::include::dav1d::common::Dav1dDataProps; use rav1d::include::dav1d::common::Dav1dUserData; use rav1d::include::dav1d::data::Dav1dData; @@ -62,50 +71,6 @@ use std::ffi::c_uint; use std::ffi::c_ulonglong; use std::ffi::c_void; -extern "C" { - pub type DemuxerContext; - fn input_open( - c_out: *mut *mut DemuxerContext, - name: *const c_char, - filename: *const c_char, - fps: *mut c_uint, - num_frames: *mut c_uint, - timebase: *mut c_uint, - ) -> c_int; - fn input_read(ctx: *mut DemuxerContext, data: *mut Dav1dData) -> c_int; - fn input_seek(ctx: *mut DemuxerContext, pts: u64) -> c_int; - fn input_close(ctx: *mut DemuxerContext); - fn parse( - argc: c_int, - argv: *const *mut c_char, - cli_settings: *mut CLISettings, - lib_settings: *mut Dav1dSettings, - ); -} - -#[repr(C)] -pub struct CLISettings { - pub outputfile: *const c_char, - pub inputfile: *const c_char, - pub demuxer: *const c_char, - pub muxer: *const c_char, - pub frametimes: *const c_char, - pub verify: *const c_char, - pub limit: c_uint, - pub skip: c_uint, - pub quiet: c_int, - pub realtime: CLISettings_realtime, - pub realtime_fps: c_double, - pub realtime_cache: c_uint, - pub neg_stride: c_int, -} - -pub type CLISettings_realtime = c_uint; - -pub const REALTIME_CUSTOM: CLISettings_realtime = 2; -pub const REALTIME_INPUT: CLISettings_realtime = 1; -pub const REALTIME_DISABLE: CLISettings_realtime = 0; - unsafe extern "C" fn get_seed() -> c_uint { let mut ts: libc::timespec = libc::timespec { tv_sec: 0, diff --git a/tools/dav1d.rs b/tools/dav1d.rs index c6959b1de..be3d32d55 100644 --- a/tools/dav1d.rs +++ b/tools/dav1d.rs @@ -5,18 +5,32 @@ mod input { mod annexb; - mod input; + pub mod input; mod ivf; mod section5; } // mod input mod output { mod md5; mod null; - mod output; + pub mod output; mod y4m2; mod yuv; } // mod output mod dav1d_cli_parse; + +use crate::dav1d_cli_parse::parse; +use crate::dav1d_cli_parse::CLISettings; +use crate::dav1d_cli_parse::REALTIME_CUSTOM; +use crate::dav1d_cli_parse::REALTIME_DISABLE; +use crate::input::input::input_close; +use crate::input::input::input_open; +use crate::input::input::input_read; +use crate::input::input::DemuxerContext; +use crate::output::output::output_close; +use crate::output::output::output_open; +use crate::output::output::output_verify; +use crate::output::output::output_write; +use crate::output::output::MuxerContext; use libc::fclose; use libc::fflush; use libc::fileno; @@ -74,59 +88,6 @@ use std::ffi::c_uint; use std::ffi::c_ulonglong; use std::ffi::c_void; -extern "C" { - pub type DemuxerContext; - pub type MuxerContext; - fn input_open( - c_out: *mut *mut DemuxerContext, - name: *const c_char, - filename: *const c_char, - fps: *mut c_uint, - num_frames: *mut c_uint, - timebase: *mut c_uint, - ) -> c_int; - fn input_read(ctx: *mut DemuxerContext, data: *mut Dav1dData) -> c_int; - fn input_close(ctx: *mut DemuxerContext); - fn output_open( - c: *mut *mut MuxerContext, - name: *const c_char, - filename: *const c_char, - p: *const Dav1dPictureParameters, - fps: *const c_uint, - ) -> c_int; - fn output_write(ctx: *mut MuxerContext, pic: *mut Dav1dPicture) -> c_int; - fn output_close(ctx: *mut MuxerContext); - fn output_verify(ctx: *mut MuxerContext, hash_string: *const c_char) -> c_int; - fn parse( - argc: c_int, - argv: *const *mut c_char, - cli_settings: *mut CLISettings, - lib_settings: *mut Dav1dSettings, - ); -} - -#[repr(C)] -pub struct CLISettings { - pub outputfile: *const c_char, - pub inputfile: *const c_char, - pub demuxer: *const c_char, - pub muxer: *const c_char, - pub frametimes: *const c_char, - pub verify: *const c_char, - pub limit: c_uint, - pub skip: c_uint, - pub quiet: c_int, - pub realtime: CLISettings_realtime, - pub realtime_fps: c_double, - pub realtime_cache: c_uint, - pub neg_stride: c_int, -} - -pub type CLISettings_realtime = c_uint; -pub const REALTIME_CUSTOM: CLISettings_realtime = 2; -pub const REALTIME_INPUT: CLISettings_realtime = 1; -pub const REALTIME_DISABLE: CLISettings_realtime = 0; - unsafe extern "C" fn get_time_nanos() -> u64 { let mut ts: libc::timespec = libc::timespec { tv_sec: 0, diff --git a/tools/dav1d_cli_parse.rs b/tools/dav1d_cli_parse.rs index e8f0d4e75..a83b10c5c 100644 --- a/tools/dav1d_cli_parse.rs +++ b/tools/dav1d_cli_parse.rs @@ -1,5 +1,7 @@ use libc::fprintf; +use libc::getopt_long; use libc::memset; +use libc::option; use libc::sprintf; use libc::strcat; use libc::strcmp; @@ -34,23 +36,17 @@ use std::process::exit; extern "C" { static mut optarg: *mut c_char; static mut optind: c_int; - fn getopt_long( - ___argc: c_int, - ___argv: *const *mut c_char, - __shortopts: *const c_char, - __longopts: *const option, - __longind: *mut c_int, - ) -> c_int; fn vfprintf(_: *mut libc::FILE, _: *const c_char, _: ::core::ffi::VaList) -> c_int; } -#[repr(C)] -pub struct option { - pub name: *const c_char, - pub has_arg: c_int, - pub flag: *mut c_int, - pub val: c_int, -} +// TODO(kkysen) These are used in `dav1d.rs` and `seek_stress.rs` +// but are still marked as unused since `[[bin]]` are only supposed to be one file in `cargo`. +pub type CLISettings_realtime = c_uint; +#[allow(dead_code)] +pub const REALTIME_CUSTOM: CLISettings_realtime = 2; +#[allow(dead_code)] +pub const REALTIME_INPUT: CLISettings_realtime = 1; +pub const REALTIME_DISABLE: CLISettings_realtime = 0; #[repr(C)] pub struct CLISettings { @@ -69,8 +65,6 @@ pub struct CLISettings { pub neg_stride: c_int, } -pub type CLISettings_realtime = c_uint; - #[repr(C)] pub struct EnumParseTable { pub str_0: *const c_char, @@ -620,8 +614,7 @@ unsafe extern "C" fn parse_enum( return res; } -#[no_mangle] -pub unsafe extern "C" fn parse( +pub unsafe fn parse( argc: c_int, argv: *const *mut c_char, cli_settings: *mut CLISettings, diff --git a/tools/input/input.rs b/tools/input/input.rs index 0db17beac..64ed44599 100644 --- a/tools/input/input.rs +++ b/tools/input/input.rs @@ -59,8 +59,7 @@ static mut demuxers: [*const Demuxer; 4] = unsafe { ] }; -#[no_mangle] -pub unsafe extern "C" fn input_open( +pub unsafe fn input_open( c_out: *mut *mut DemuxerContext, name: *const c_char, filename: *const c_char, @@ -181,13 +180,14 @@ pub unsafe extern "C" fn input_open( return 0 as c_int; } -#[no_mangle] -pub unsafe extern "C" fn input_read(ctx: *mut DemuxerContext, data: *mut Dav1dData) -> c_int { +pub unsafe fn input_read(ctx: *mut DemuxerContext, data: *mut Dav1dData) -> c_int { return ((*(*ctx).impl_0).read).expect("non-null function pointer")((*ctx).data, data); } -#[no_mangle] -pub unsafe extern "C" fn input_seek(ctx: *mut DemuxerContext, pts: u64) -> c_int { +// TODO(kkysen) These are used in `dav1d.rs` and `seek_stress.rs` +// but are still marked as unused since `[[bin]]` are only supposed to be one file in `cargo`. +#[allow(dead_code)] +pub unsafe fn input_seek(ctx: *mut DemuxerContext, pts: u64) -> c_int { return if ((*(*ctx).impl_0).seek).is_some() { ((*(*ctx).impl_0).seek).expect("non-null function pointer")((*ctx).data, pts) } else { @@ -195,8 +195,7 @@ pub unsafe extern "C" fn input_seek(ctx: *mut DemuxerContext, pts: u64) -> c_int }; } -#[no_mangle] -pub unsafe extern "C" fn input_close(ctx: *mut DemuxerContext) { +pub unsafe fn input_close(ctx: *mut DemuxerContext) { ((*(*ctx).impl_0).close).expect("non-null function pointer")((*ctx).data); free(ctx as *mut c_void); } diff --git a/tools/output/output.rs b/tools/output/output.rs index 09c4faf1b..313e12d00 100644 --- a/tools/output/output.rs +++ b/tools/output/output.rs @@ -89,8 +89,10 @@ unsafe extern "C" fn find_extension(f: *const c_char) -> *const c_char { }; } -#[no_mangle] -pub unsafe extern "C" fn output_open( +// TODO(kkysen) These are used in `dav1d.rs` and `seek_stress.rs` +// but are still marked as unused since `[[bin]]` are only supposed to be one file in `cargo`. +#[allow(dead_code)] +pub unsafe fn output_open( c_out: *mut *mut MuxerContext, name: *const c_char, filename: *const c_char, @@ -348,8 +350,10 @@ unsafe extern "C" fn assemble_filename( safe_strncat(filename, filename_size, ptr, strlen(ptr) as c_int); } -#[no_mangle] -pub unsafe extern "C" fn output_write(ctx: *mut MuxerContext, p: *mut Dav1dPicture) -> c_int { +// TODO(kkysen) These are used in `dav1d.rs` and `seek_stress.rs` +// but are still marked as unused since `[[bin]]` are only supposed to be one file in `cargo`. +#[allow(dead_code)] +pub unsafe fn output_write(ctx: *mut MuxerContext, p: *mut Dav1dPicture) -> c_int { let mut res; if (*ctx).one_file_per_frame != 0 && ((*(*ctx).impl_0).write_header).is_some() { let mut filename: [c_char; 1024] = [0; 1024]; @@ -379,16 +383,20 @@ pub unsafe extern "C" fn output_write(ctx: *mut MuxerContext, p: *mut Dav1dPictu return 0 as c_int; } -#[no_mangle] -pub unsafe extern "C" fn output_close(ctx: *mut MuxerContext) { +// TODO(kkysen) These are used in `dav1d.rs` and `seek_stress.rs` +// but are still marked as unused since `[[bin]]` are only supposed to be one file in `cargo`. +#[allow(dead_code)] +pub unsafe fn output_close(ctx: *mut MuxerContext) { if (*ctx).one_file_per_frame == 0 && ((*(*ctx).impl_0).write_trailer).is_some() { ((*(*ctx).impl_0).write_trailer).expect("non-null function pointer")((*ctx).data); } free(ctx as *mut c_void); } -#[no_mangle] -pub unsafe extern "C" fn output_verify(ctx: *mut MuxerContext, md5_str: *const c_char) -> c_int { +// TODO(kkysen) These are used in `dav1d.rs` and `seek_stress.rs` +// but are still marked as unused since `[[bin]]` are only supposed to be one file in `cargo`. +#[allow(dead_code)] +pub unsafe fn output_verify(ctx: *mut MuxerContext, md5_str: *const c_char) -> c_int { let res = if ((*(*ctx).impl_0).verify).is_some() { ((*(*ctx).impl_0).verify).expect("non-null function pointer")((*ctx).data, md5_str) } else {