1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use std::{ffi::c_void, mem::MaybeUninit};
4
5use crate::{common::LPCWSTR, plugin2::EDIT_SECTION};
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 pub data: FILTER_ITEM_DATA,
15 pub group: FILTER_ITEM_GROUP,
16 pub button: FILTER_ITEM_BUTTON,
17 pub string: FILTER_ITEM_STRING,
18 pub text: FILTER_ITEM_TEXT,
19 pub folder: FILTER_ITEM_FOLDER,
20}
21
22#[repr(C)]
24#[derive(Clone, Copy)]
25pub struct FILTER_ITEM_TRACK {
26 pub r#type: LPCWSTR,
28 pub name: LPCWSTR,
30 pub value: f64,
32 pub s: f64,
34 pub e: f64,
36 pub step: f64,
38}
39
40#[repr(C)]
42#[derive(Clone, Copy)]
43pub struct FILTER_ITEM_CHECKBOX {
44 pub r#type: LPCWSTR,
46 pub name: LPCWSTR,
48 pub value: bool,
50}
51
52#[repr(C)]
54#[derive(Clone, Copy)]
55pub struct FILTER_ITEM_COLOR {
56 pub r#type: LPCWSTR,
58 pub name: LPCWSTR,
60 pub value: FILTER_ITEM_COLOR_VALUE,
62}
63
64#[repr(C)]
66#[derive(Clone, Copy)]
67pub union FILTER_ITEM_COLOR_VALUE {
68 pub code: u32,
69 pub bgrx: [u8; 4],
70}
71
72#[repr(C)]
74#[derive(Clone, Copy)]
75pub struct FILTER_ITEM_SELECT {
76 pub r#type: LPCWSTR,
78 pub name: LPCWSTR,
80 pub value: i32,
82 pub items: *const FILTER_ITEM_SELECT_ITEM,
84}
85
86#[repr(C)]
88#[derive(Clone, Copy)]
89pub struct FILTER_ITEM_SELECT_ITEM {
90 pub name: LPCWSTR,
92 pub value: i32,
94}
95
96#[repr(C)]
98#[derive(Clone, Copy)]
99pub struct FILTER_ITEM_FILE {
100 pub r#type: LPCWSTR,
102 pub name: LPCWSTR,
104 pub value: LPCWSTR,
106 pub filefilter: LPCWSTR,
108}
109
110#[repr(C)]
113#[derive(Clone, Copy)]
114pub struct FILTER_ITEM_DATA {
115 pub r#type: LPCWSTR,
117 pub name: LPCWSTR,
119 pub value: *mut c_void,
121 pub size: i32,
123 pub default_value: [MaybeUninit<u8>; 1024],
125}
126
127#[repr(C)]
131#[derive(Clone, Copy)]
132pub struct FILTER_ITEM_GROUP {
133 pub r#type: LPCWSTR,
135 pub name: LPCWSTR,
137 pub default_visible: bool,
139}
140
141#[repr(C)]
145#[derive(Clone, Copy)]
146pub struct FILTER_ITEM_BUTTON {
147 pub r#type: LPCWSTR,
149 pub name: LPCWSTR,
151 pub callback: extern "C" fn(edit_section: *mut EDIT_SECTION),
153}
154
155#[repr(C)]
158#[derive(Clone, Copy)]
159pub struct FILTER_ITEM_STRING {
160 pub r#type: LPCWSTR,
162 pub name: LPCWSTR,
164 pub value: LPCWSTR,
166}
167
168#[repr(C)]
171#[derive(Clone, Copy)]
172pub struct FILTER_ITEM_TEXT {
173 pub r#type: LPCWSTR,
175 pub name: LPCWSTR,
177 pub value: LPCWSTR,
179}
180
181#[repr(C)]
183#[derive(Clone, Copy)]
184pub struct FILTER_ITEM_FOLDER {
185 pub r#type: LPCWSTR,
187 pub name: LPCWSTR,
189 pub value: LPCWSTR,
191}
192
193#[repr(C)]
195pub struct PIXEL_RGBA {
196 pub r: u8,
197 pub g: u8,
198 pub b: u8,
199 pub a: u8,
200}
201
202#[repr(C)]
204pub struct SCENE_INFO {
205 pub width: i32,
207 pub height: i32,
209 pub rate: i32,
211 pub scale: i32,
213 pub sample_rate: i32,
215}
216
217#[repr(C)]
219pub struct OBJECT_INFO {
220 pub id: i64,
222 pub frame: i32,
224 pub frame_total: i32,
226 pub time: f64,
228 pub time_total: f64,
230 pub width: i32,
232 pub height: i32,
234 pub sample_index: i64,
236 pub sample_total: i64,
238 pub sample_num: i32,
240 pub channel_num: i32,
242 pub effect_id: i64,
245}
246
247#[repr(C)]
249pub struct FILTER_PROC_VIDEO {
250 pub scene: *const SCENE_INFO,
252
253 pub object: *const OBJECT_INFO,
255
256 pub get_image_data: unsafe extern "C" fn(buffer: *mut PIXEL_RGBA),
259
260 pub set_image_data: unsafe extern "C" fn(buffer: *const PIXEL_RGBA, width: i32, height: i32),
264
265 pub get_image_texture2d: unsafe extern "C" fn() -> *mut c_void,
269
270 pub get_framebuffer_texture2d: unsafe extern "C" fn() -> *mut c_void,
274}
275
276#[repr(C)]
278pub struct FILTER_PROC_AUDIO {
279 pub scene: *const SCENE_INFO,
281
282 pub object: *const OBJECT_INFO,
284
285 pub get_sample_data: unsafe extern "C" fn(buffer: *mut f32, channel: i32),
289
290 pub set_sample_data: unsafe extern "C" fn(buffer: *const f32, channel: i32),
294}
295
296impl FILTER_PLUGIN_TABLE {
297 pub const FLAG_VIDEO: i32 = 1;
299 pub const FLAG_AUDIO: i32 = 2;
301 pub const FLAG_INPUT: i32 = 4;
303 pub const FLAG_FILTER: i32 = 8;
306}
307
308#[repr(C)]
310pub struct FILTER_PLUGIN_TABLE {
311 pub flag: i32,
314 pub name: LPCWSTR,
316 pub label: LPCWSTR,
318 pub information: LPCWSTR,
320
321 pub items: *const *const c_void,
323
324 pub func_proc_video: Option<extern "C" fn(video: *mut FILTER_PROC_VIDEO) -> bool>,
326
327 pub func_proc_audio: Option<extern "C" fn(audio: *mut FILTER_PROC_AUDIO) -> bool>,
329}