cadeau_sys/
xmf.rs

1use std::ffi::{c_char, c_int, c_void};
2
3pub type XmfGetTimeFn = unsafe extern "C" fn(*mut c_void) -> u64;
4
5#[repr(C)]
6pub struct XmfTimeSource {
7    pub func: XmfGetTimeFn,
8    pub param: *mut c_void,
9}
10
11pub type XmfBipBuffer = c_void;
12
13pub type XmfWebM = c_void;
14
15pub type XmfRecorder = c_void;
16
17pub type XmfWebMMuxer = c_void;
18
19pub const XMF_MUXER_FILE_OPEN_ERROR: c_int = -1001;
20pub const XMF_MUXER_PARSER_ERROR: c_int = -1002;
21pub const XMF_MUXER_MUXER_ERROR: c_int = -1003;
22
23#[doc(inline)]
24pub use raw::global::*;
25
26pub mod raw {
27    use super::*;
28
29    crate::macros::external_library!(feature = "dlopen", Api, "xmf",
30        functions:
31            // Time
32            fn XmfTime_GetTickCount() -> u64,
33            fn XmfTimeSource_Get(ts: *mut XmfTimeSource) -> u64,
34            fn XmfTimeSource_System(param: *mut c_void) -> u64,
35            fn XmfTimeSource_Manual(param: *mut c_void) -> u64,
36
37            // BipBuffer
38            fn XmfBipBuffer_Grow(ctx: *mut XmfBipBuffer, size: usize) -> bool,
39            fn XmfBipBuffer_Clear(ctx: *mut XmfBipBuffer) -> (),
40            fn XmfBipBuffer_UsedSize(ctx: *mut XmfBipBuffer) -> usize,
41            fn XmfBipBuffer_BufferSize(ctx: *mut XmfBipBuffer) -> usize,
42            fn XmfBipBuffer_Read(ctx: *mut XmfBipBuffer, data: *mut u8, size: usize) -> c_int,
43            fn XmfBipBuffer_Write(ctx: *mut XmfBipBuffer, data: *const u8, size: usize) -> c_int,
44            fn XmfBipBuffer_New(size: usize) -> *mut XmfBipBuffer,
45            fn XmfBipBuffer_Free(ctx: *mut XmfBipBuffer) -> (),
46
47            // WebM
48            fn XmfWebM_Encode(ctx: *mut XmfWebM, srcData: *const u8, x: u16, y: u16, width: u16, height: u16) -> c_int,
49            fn XmfWebM_Finalize(ctx: *mut XmfWebM) -> (),
50            fn XmfWebM_FrameCount(ctx: *mut XmfWebM) -> u64,
51            fn XmfWebM_Duration(ctx: *mut XmfWebM) -> u64,
52            fn XmfWebM_Init(ctx: *mut XmfWebM, frameWidth: u32, frameHeight: u32, frameRate: u32, targetBitRate: u32, filename: *const c_char, bb: *mut XmfBipBuffer, ts: *mut XmfTimeSource) -> bool,
53            fn XmfWebM_Uninit(ctx: *mut XmfWebM) -> (),
54            fn XmfWebM_New() -> *mut XmfWebM,
55            fn XmfWebM_Free(ctx: *mut XmfWebM) -> (),
56
57            // Recorder
58            fn XmfRecorder_UpdateFrame(ctx: *mut XmfRecorder, buffer: *const u8, updateX: u32, updateY: u32, updateWidth: u32, updateHeight: u32, surfaceStep: u32) -> (),
59            fn XmfRecorder_GetTimeout(ctx: *mut XmfRecorder) -> u32,
60            fn XmfRecorder_Timeout(ctx: *mut XmfRecorder) -> (),
61            fn XmfRecorder_SetMinimumFrameRate(ctx: *mut XmfRecorder, frameRate: u32) -> (),
62            fn XmfRecorder_GetFrameRate(ctx: *mut XmfRecorder) -> u32,
63            fn XmfRecorder_SetFrameRate(ctx: *mut XmfRecorder, frameRate: u32) -> (),
64            fn XmfRecorder_SetFrameSize(ctx: *mut XmfRecorder, frameWidth: u32, frameHeight: u32) -> (),
65            fn XmfRecorder_SetVideoQuality(ctx: *mut XmfRecorder, videoQuality: u32) -> (),
66            fn XmfRecorder_SetCurrentTime(ctx: *mut XmfRecorder, currentTime: u64) -> (),
67            fn XmfRecorder_GetCurrentTime(ctx: *mut XmfRecorder) -> u64,
68            fn XmfRecorder_SetFileName(ctx: *mut XmfRecorder, filename: *const c_char) -> (),
69            fn XmfRecorder_SetBipBuffer(ctx: *mut XmfRecorder, bb: *mut XmfBipBuffer) -> (),
70            fn XmfRecorder_Init(ctx: *mut XmfRecorder) -> bool,
71            fn XmfRecorder_Uninit(ctx: *mut XmfRecorder) -> (),
72            fn XmfRecorder_New() -> *mut XmfRecorder,
73            fn XmfRecorder_Free(ctx: *mut XmfRecorder) -> (),
74
75            // Muxer
76            fn XmfWebMMuxer_Remux(ctx: *mut XmfWebMMuxer, inputPath: *const c_char, outputPath: *const c_char) -> c_int,
77            fn XmfWebMMuxer_New() -> *mut XmfWebMMuxer,
78            fn XmfWebMMuxer_Free(ctx: *mut XmfWebMMuxer) -> (),
79
80            // Image
81            fn XmfImage_LoadFile(filename: *const c_char, data: *mut *mut u8, width: *mut u32, height: *mut u32, step: *mut u32) -> bool,
82            fn XmfImage_SaveFile(filename: *const c_char, data: *const u8, width: u32, height: u32, step: u32) -> bool,
83            fn XmfImage_FreeData(data: *mut u8) -> (),
84    );
85}