1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use std::ffi::c_void;
4
5use crate::common::LPCWSTR;
6
7#[repr(C)]
8pub union FILTER_ITEM {
9 pub track: FILTER_ITEM_TRACK,
10 pub checkbox: FILTER_ITEM_CHECKBOX,
11 pub color: FILTER_ITEM_COLOR,
12 pub select: FILTER_ITEM_SELECT,
13 pub file: FILTER_ITEM_FILE,
14}
15
16#[repr(C)]
18#[derive(Clone, Copy)]
19pub struct FILTER_ITEM_TRACK {
20 pub r#type: LPCWSTR,
22 pub name: LPCWSTR,
24 pub value: f64,
26 pub s: f64,
28 pub e: f64,
30 pub step: f64,
32}
33
34#[repr(C)]
36#[derive(Clone, Copy)]
37pub struct FILTER_ITEM_CHECKBOX {
38 pub r#type: LPCWSTR,
40 pub name: LPCWSTR,
42 pub value: bool,
44}
45
46#[repr(C)]
48#[derive(Clone, Copy)]
49pub struct FILTER_ITEM_COLOR {
50 pub r#type: LPCWSTR,
52 pub name: LPCWSTR,
54 pub value: FILTER_ITEM_COLOR_VALUE,
56}
57
58#[repr(C)]
60#[derive(Clone, Copy)]
61pub union FILTER_ITEM_COLOR_VALUE {
62 pub code: u32,
63 pub bgrx: [u8; 4],
64}
65
66#[repr(C)]
68#[derive(Clone, Copy)]
69pub struct FILTER_ITEM_SELECT {
70 pub r#type: LPCWSTR,
72 pub name: LPCWSTR,
74 pub value: i32,
76 pub items: *const FILTER_ITEM_SELECT_ITEM,
78}
79
80#[repr(C)]
82#[derive(Clone, Copy)]
83pub struct FILTER_ITEM_SELECT_ITEM {
84 pub name: LPCWSTR,
86 pub value: i32,
88}
89
90#[repr(C)]
92#[derive(Clone, Copy)]
93pub struct FILTER_ITEM_FILE {
94 pub r#type: LPCWSTR,
96 pub name: LPCWSTR,
98 pub value: LPCWSTR,
100 pub filefilter: LPCWSTR,
102}
103
104#[repr(C)]
106pub struct PIXEL_RGBA {
107 pub r: u8,
108 pub g: u8,
109 pub b: u8,
110 pub a: u8,
111}
112
113#[repr(C)]
115pub struct SCENE_INFO {
116 pub width: i32,
118 pub height: i32,
120 pub rate: i32,
122 pub scale: i32,
124 pub sample_rate: i32,
126}
127
128#[repr(C)]
130pub struct OBJECT_INFO {
131 pub id: i64,
133 pub frame: i32,
135 pub frame_total: i32,
137 pub time: f64,
139 pub time_total: f64,
141 pub width: i32,
143 pub height: i32,
145 pub sample_index: i64,
147 pub sample_total: i64,
149 pub sample_num: i32,
151 pub channel_num: i32,
153 pub effect_id: i64,
156}
157
158#[repr(C)]
160pub struct FILTER_PROC_VIDEO {
161 pub scene: *const SCENE_INFO,
163
164 pub object: *const OBJECT_INFO,
166
167 pub get_image_data: unsafe extern "C" fn(buffer: *mut PIXEL_RGBA),
170
171 pub set_image_data: unsafe extern "C" fn(buffer: *const PIXEL_RGBA, width: i32, height: i32),
175}
176
177#[repr(C)]
179pub struct FILTER_PROC_AUDIO {
180 pub scene: *const SCENE_INFO,
182
183 pub object: *const OBJECT_INFO,
185
186 pub get_sample_data: unsafe extern "C" fn(buffer: *mut f32, channel: i32),
190
191 pub set_sample_data: unsafe extern "C" fn(buffer: *const f32, channel: i32),
195}
196
197impl FILTER_PLUGIN_TABLE {
198 pub const FLAG_VIDEO: i32 = 1;
200 pub const FLAG_AUDIO: i32 = 2;
202 pub const FLAG_INPUT: i32 = 4;
204}
205
206#[repr(C)]
208pub struct FILTER_PLUGIN_TABLE {
209 pub flag: i32,
212 pub name: LPCWSTR,
214 pub label: LPCWSTR,
216 pub information: LPCWSTR,
218
219 pub items: *const *const c_void,
221
222 pub func_proc_video: Option<extern "C" fn(video: *mut FILTER_PROC_VIDEO) -> bool>,
224
225 pub func_proc_audio: Option<extern "C" fn(audio: *mut FILTER_PROC_AUDIO) -> bool>,
227}