xmf_sys/
lib.rs

1#![doc = include_str!("../README.md")]
2#![allow(clippy::too_many_arguments)]
3#![allow(non_snake_case)]
4#![cfg_attr(docsrs, feature(doc_auto_cfg))]
5
6mod macros;
7mod vpx;
8
9use std::ffi::{c_char, c_int, c_void};
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::*;
25pub use vpx::*;
26
27pub mod raw {
28    use super::*;
29
30    crate::macros::external_library!(feature = "dlopen", Api, "xmf",
31        functions:
32            // BipBuffer
33            fn XmfBipBuffer_Grow(ctx: *mut XmfBipBuffer, size: usize) -> bool,
34            fn XmfBipBuffer_Clear(ctx: *mut XmfBipBuffer) -> (),
35            fn XmfBipBuffer_UsedSize(ctx: *mut XmfBipBuffer) -> usize,
36            fn XmfBipBuffer_BufferSize(ctx: *mut XmfBipBuffer) -> usize,
37            fn XmfBipBuffer_Read(ctx: *mut XmfBipBuffer, data: *mut u8, size: usize) -> c_int,
38            fn XmfBipBuffer_Write(ctx: *mut XmfBipBuffer, data: *const u8, size: usize) -> c_int,
39            fn XmfBipBuffer_New(size: usize) -> *mut XmfBipBuffer,
40            fn XmfBipBuffer_Free(ctx: *mut XmfBipBuffer) -> (),
41
42            // Recorder
43            fn XmfRecorder_UpdateFrame(ctx: *mut XmfRecorder, buffer: *const u8, updateX: u32, updateY: u32, updateWidth: u32, updateHeight: u32, surfaceStep: u32) -> (),
44            fn XmfRecorder_GetTimeout(ctx: *mut XmfRecorder) -> u32,
45            fn XmfRecorder_Timeout(ctx: *mut XmfRecorder) -> (),
46            fn XmfRecorder_SetMinimumFrameRate(ctx: *mut XmfRecorder, frameRate: u32) -> (),
47            fn XmfRecorder_GetFrameRate(ctx: *mut XmfRecorder) -> u32,
48            fn XmfRecorder_SetFrameRate(ctx: *mut XmfRecorder, frameRate: u32) -> (),
49            fn XmfRecorder_SetFrameSize(ctx: *mut XmfRecorder, frameWidth: u32, frameHeight: u32) -> (),
50            fn XmfRecorder_SetVideoQuality(ctx: *mut XmfRecorder, videoQuality: u32) -> (),
51            fn XmfRecorder_SetCurrentTime(ctx: *mut XmfRecorder, currentTime: u64) -> (),
52            fn XmfRecorder_GetCurrentTime(ctx: *mut XmfRecorder) -> u64,
53            fn XmfRecorder_SetFileName(ctx: *mut XmfRecorder, filename: *const c_char) -> (),
54            fn XmfRecorder_SetBipBuffer(ctx: *mut XmfRecorder, bb: *mut XmfBipBuffer) -> (),
55            fn XmfRecorder_Init(ctx: *mut XmfRecorder) -> bool,
56            fn XmfRecorder_Uninit(ctx: *mut XmfRecorder) -> (),
57            fn XmfRecorder_New() -> *mut XmfRecorder,
58            fn XmfRecorder_Free(ctx: *mut XmfRecorder) -> (),
59
60            // Muxer
61            fn XmfWebMMuxer_Remux(ctx: *mut XmfWebMMuxer, inputPath: *const c_char, outputPath: *const c_char) -> c_int,
62            fn XmfWebMMuxer_New() -> *mut XmfWebMMuxer,
63            fn XmfWebMMuxer_Free(ctx: *mut XmfWebMMuxer) -> (),
64
65            // Image
66            fn XmfImage_LoadFile(filename: *const c_char, data: *mut *mut u8, width: *mut u32, height: *mut u32, step: *mut u32) -> bool,
67            fn XmfImage_SaveFile(filename: *const c_char, data: *const u8, width: u32, height: u32, step: u32) -> bool,
68            fn XmfImage_FreeData(data: *mut u8) -> (),
69
70            // VPX Encoder
71            fn XmfVpxEncoder_Create(config: XmfVpxEncoderConfig) -> *mut XmfVpxEncoder,
72            fn XmfVpxEncoder_EncodeFrame(ctx: *mut XmfVpxEncoder, image: *const XmfVpxImage, pts: i64, duration: usize, flags: u32) -> c_int,
73            fn XmfVpxEncoder_GetEncodedFrame(ctx: *mut XmfVpxEncoder, output: *mut *mut u8, output_size: *mut usize) -> c_int,
74            fn XmfVpxEncoder_Flush(ctx: *mut XmfVpxEncoder) -> c_int,
75            fn XmfVpxEncoder_Destroy(ctx: *mut XmfVpxEncoder) -> c_int,
76            fn XmfVpxEncoder_GetLastError(ctx: *const XmfVpxEncoder) -> XmfVpxEncoderError,
77            fn XmfVpxEncoder_FreeEncodedFrame(input :*mut u8) -> (),
78            fn XmfVpxEncoder_GetPacket(ctx: *mut XmfVpxEncoder, itr:*mut VpxIterator) -> *mut XmfVpxPacket,
79
80            // VPX Decoder
81            fn XmfVpxDecoder_Create(cfg: XmfVpxDecoderConfig) -> *mut XmfVpxDecoder,
82            fn XmfVpxDecoder_Decode(ctx: *mut XmfVpxDecoder, data: *const u8, size: u32) -> c_int,
83            fn XmfVpxDecoder_GetNextFrame(ctx: *mut XmfVpxDecoder) -> *mut XmfVpxImage,
84            fn XmfVpxDecoder_GetLastError(ctx: *mut XmfVpxDecoder) -> XmfVpxDecoderError,
85            fn XmfVpxDecoder_Destroy(ctx: *mut XmfVpxDecoder) -> (),
86
87            // VPX Image
88            fn XmfVpxImage_Destroy(ctx: *mut XmfVpxImage) -> (),
89
90            // VPX Packet
91            fn XmfVpxPacket_Destroy(packet: *mut XmfVpxPacket) -> (),
92            fn XmfVpxPacket_GetKind(packet: *mut XmfVpxPacket) -> XmfVpxPacketKind,
93            fn XmfVpxPacket_GetFrame(packet: *const XmfVpxPacket) -> *mut XmfVpxFrame,
94            fn XmfVpxPacket_IsEmpty(packet: *const XmfVpxPacket) -> bool,
95
96            // VPX Frame
97            fn XmfVpxFrame_Destroy(frame: *mut XmfVpxFrame) -> (),
98            fn XmfVpxFrame_GetSize(frame: *const XmfVpxFrame) -> usize,
99            fn XmfVpxFrame_GetPts(frame: *const XmfVpxFrame) -> i64,
100            fn XmfVpxFrame_GetDuration(frame: *const XmfVpxFrame) -> u64,
101            fn XmfVpxFrame_GetFlags(frame: *const XmfVpxFrame) -> u32,
102            fn XmfVpxFrame_GetPartitionId(frame: *const XmfVpxFrame) -> c_int,
103            fn XmfVpxFrame_GetWidth(frame: *const XmfVpxFrame, layer: c_int) -> u32,
104            fn XmfVpxFrame_GetHeight(frame: *const XmfVpxFrame, layer: c_int) -> u32,
105            fn XmfVpxFrame_GetSpatialLayerEncoded(frame: *const XmfVpxFrame, layer: c_int) -> u8,
106            fn XmfVpxFrame_GetBuffer(frame: *const XmfVpxFrame, buffer: *mut *const u8, size: *mut usize) -> c_int,
107
108    );
109}