#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
use std::{ffi::c_void, mem::MaybeUninit};
use crate::{common::LPCWSTR, plugin2::EDIT_SECTION};
#[repr(C)]
pub union FILTER_ITEM {
pub track: FILTER_ITEM_TRACK,
pub checkbox: FILTER_ITEM_CHECKBOX,
pub color: FILTER_ITEM_COLOR,
pub select: FILTER_ITEM_SELECT,
pub file: FILTER_ITEM_FILE,
pub data: FILTER_ITEM_DATA,
pub group: FILTER_ITEM_GROUP,
pub button: FILTER_ITEM_BUTTON,
pub string: FILTER_ITEM_STRING,
pub text: FILTER_ITEM_TEXT,
pub folder: FILTER_ITEM_FOLDER,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_TRACK {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: f64,
pub s: f64,
pub e: f64,
pub step: f64,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_CHECKBOX {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: bool,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_COLOR {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: FILTER_ITEM_COLOR_VALUE,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub union FILTER_ITEM_COLOR_VALUE {
pub code: u32,
pub bgrx: [u8; 4],
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_SELECT {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: i32,
pub items: *const FILTER_ITEM_SELECT_ITEM,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_SELECT_ITEM {
pub name: LPCWSTR,
pub value: i32,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_FILE {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: LPCWSTR,
pub filefilter: LPCWSTR,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_DATA {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: *mut c_void,
pub size: i32,
pub default_value: [MaybeUninit<u8>; 1024],
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_GROUP {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub default_visible: bool,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_BUTTON {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub callback: extern "C" fn(edit_section: *mut EDIT_SECTION),
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_STRING {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: LPCWSTR,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_TEXT {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: LPCWSTR,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct FILTER_ITEM_FOLDER {
pub r#type: LPCWSTR,
pub name: LPCWSTR,
pub value: LPCWSTR,
}
#[repr(C)]
pub struct PIXEL_RGBA {
pub r: u8,
pub g: u8,
pub b: u8,
pub a: u8,
}
#[repr(C)]
pub struct SCENE_INFO {
pub width: i32,
pub height: i32,
pub rate: i32,
pub scale: i32,
pub sample_rate: i32,
}
#[repr(C)]
pub struct OBJECT_INFO {
pub id: i64,
pub frame: i32,
pub frame_total: i32,
pub time: f64,
pub time_total: f64,
pub width: i32,
pub height: i32,
pub sample_index: i64,
pub sample_total: i64,
pub sample_num: i32,
pub channel_num: i32,
pub effect_id: i64,
}
#[repr(C)]
pub struct FILTER_PROC_VIDEO {
pub scene: *const SCENE_INFO,
pub object: *const OBJECT_INFO,
pub get_image_data: unsafe extern "C" fn(buffer: *mut PIXEL_RGBA),
pub set_image_data: unsafe extern "C" fn(buffer: *const PIXEL_RGBA, width: i32, height: i32),
pub get_image_texture2d: unsafe extern "C" fn() -> *mut c_void,
pub get_framebuffer_texture2d: unsafe extern "C" fn() -> *mut c_void,
}
#[repr(C)]
pub struct FILTER_PROC_AUDIO {
pub scene: *const SCENE_INFO,
pub object: *const OBJECT_INFO,
pub get_sample_data: unsafe extern "C" fn(buffer: *mut f32, channel: i32),
pub set_sample_data: unsafe extern "C" fn(buffer: *const f32, channel: i32),
}
impl FILTER_PLUGIN_TABLE {
pub const FLAG_VIDEO: i32 = 1;
pub const FLAG_AUDIO: i32 = 2;
pub const FLAG_INPUT: i32 = 4;
pub const FLAG_FILTER: i32 = 8;
}
#[repr(C)]
pub struct FILTER_PLUGIN_TABLE {
pub flag: i32,
pub name: LPCWSTR,
pub label: LPCWSTR,
pub information: LPCWSTR,
pub items: *const *const c_void,
pub func_proc_video: Option<extern "C" fn(video: *mut FILTER_PROC_VIDEO) -> bool>,
pub func_proc_audio: Option<extern "C" fn(audio: *mut FILTER_PROC_AUDIO) -> bool>,
}