aviutl2_sys/
filter2.rs

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/// トラックバー項目構造体
17#[repr(C)]
18#[derive(Clone, Copy)]
19pub struct FILTER_ITEM_TRACK {
20    /// 設定の種別(L"track")
21    pub r#type: LPCWSTR,
22    /// 設定名
23    pub name: LPCWSTR,
24    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
25    pub value: f64,
26    /// 設定値の最小
27    pub s: f64,
28    /// 設定値の最大
29    pub e: f64,
30    /// 設定値の単位(1.0 / 0.1 / 0.01 / 0.001)
31    pub step: f64,
32}
33
34/// チェックボックス項目構造体
35#[repr(C)]
36#[derive(Clone, Copy)]
37pub struct FILTER_ITEM_CHECKBOX {
38    /// 設定の種別(L"check")
39    pub r#type: LPCWSTR,
40    /// 設定名
41    pub name: LPCWSTR,
42    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
43    pub value: bool,
44}
45
46/// 色選択項目構造体
47#[repr(C)]
48#[derive(Clone, Copy)]
49pub struct FILTER_ITEM_COLOR {
50    /// 設定の種別(L"color")
51    pub r#type: LPCWSTR,
52    /// 設定名
53    pub name: LPCWSTR,
54    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
55    pub value: FILTER_ITEM_COLOR_VALUE,
56}
57
58/// 色選択項目の設定値の色
59#[repr(C)]
60#[derive(Clone, Copy)]
61pub union FILTER_ITEM_COLOR_VALUE {
62    pub code: u32,
63    pub bgrx: [u8; 4],
64}
65
66/// 選択リスト項目構造体
67#[repr(C)]
68#[derive(Clone, Copy)]
69pub struct FILTER_ITEM_SELECT {
70    /// 設定の種別(L"select")
71    pub r#type: LPCWSTR,
72    /// 設定名
73    pub name: LPCWSTR,
74    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
75    pub value: i32,
76    /// 選択肢リスト (FILTER_ITEM_SELECT_ITEMを列挙して名前がnullのFILTER_ITEM_SELECT_ITEMで終端したリストへのポインタ)
77    pub items: *const FILTER_ITEM_SELECT_ITEM,
78}
79
80/// 選択リスト項目構造体の選択肢項目
81#[repr(C)]
82#[derive(Clone, Copy)]
83pub struct FILTER_ITEM_SELECT_ITEM {
84    /// 選択肢の名前
85    pub name: LPCWSTR,
86    /// 選択肢の値
87    pub value: i32,
88}
89
90/// ファイル選択項目構造体
91#[repr(C)]
92#[derive(Clone, Copy)]
93pub struct FILTER_ITEM_FILE {
94    /// 設定の種別(L"file")
95    pub r#type: LPCWSTR,
96    /// 設定名
97    pub name: LPCWSTR,
98    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
99    pub value: LPCWSTR,
100    /// ファイルフィルタ
101    pub filefilter: LPCWSTR,
102}
103
104/// RGBA32bit構造体
105#[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/// シーン情報構造体
114#[repr(C)]
115pub struct SCENE_INFO {
116    /// シーンの解像度(幅)
117    pub width: i32,
118    /// シーンの解像度(高さ)
119    pub height: i32,
120    /// シーンのフレームレート
121    pub rate: i32,
122    /// シーンのフレームレート(スケール)
123    pub scale: i32,
124    /// シーンのサンプリングレート
125    pub sample_rate: i32,
126}
127
128/// オブジェクト情報構造体
129#[repr(C)]
130pub struct OBJECT_INFO {
131    /// オブジェクトのID (アプリ起動毎の固有ID)
132    pub id: i64,
133    /// オブジェクトの現在のフレーム番号
134    pub frame: i32,
135    /// オブジェクトの総フレーム数
136    pub frame_total: i32,
137    /// オブジェクトの現在の時間(秒)
138    pub time: f64,
139    /// オブジェクトの総時間(秒)
140    pub time_total: f64,
141    /// オブジェクトの現在の画像サイズの幅 (画像フィルタのみ)
142    pub width: i32,
143    /// オブジェクトの現在の画像サイズの高さ (画像フィルタのみ)
144    pub height: i32,
145    /// オブジェクトの現在の音声サンプル位置 (音声フィルタのみ)
146    pub sample_index: i64,
147    /// オブジェクトの総サンプル数 (音声フィルタのみ)
148    pub sample_total: i64,
149    /// オブジェクトの現在の音声サンプル数 (音声フィルタのみ)
150    pub sample_num: i32,
151    /// オブジェクトの現在の音声チャンネル数 (音声フィルタのみ) ※通常2になります
152    pub channel_num: i32,
153    /// オブジェクトの内の対象エフェクトのID (アプリ起動毎の固有ID)
154    /// ※処理対象のフィルタ効果、オブジェクト入出力の固有ID
155    pub effect_id: i64,
156}
157
158/// 画像フィルタ処理用構造体
159#[repr(C)]
160pub struct FILTER_PROC_VIDEO {
161    /// シーン情報
162    pub scene: *const SCENE_INFO,
163
164    /// オブジェクト情報
165    pub object: *const OBJECT_INFO,
166
167    /// 現在の画像のデータを取得する(VRAMからデータを取得します)
168    /// buffer: 画像データの格納先へのポインタ
169    pub get_image_data: unsafe extern "C" fn(buffer: *mut PIXEL_RGBA),
170
171    /// 現在の画像のデータを設定します(VRAMへデータを書き込みます)
172    /// buffer: 画像データへのポインタ
173    /// width,height: 画像サイズ
174    pub set_image_data: unsafe extern "C" fn(buffer: *const PIXEL_RGBA, width: i32, height: i32),
175}
176
177/// 音声フィルタ処理用構造体
178#[repr(C)]
179pub struct FILTER_PROC_AUDIO {
180    /// シーン情報
181    pub scene: *const SCENE_INFO,
182
183    /// オブジェクト情報
184    pub object: *const OBJECT_INFO,
185
186    /// 現在の音声のデータを取得する
187    /// buffer: 音声データの格納先へのポインタ ※音声データはPCM(float)32bit
188    /// channel: 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
189    pub get_sample_data: unsafe extern "C" fn(buffer: *mut f32, channel: i32),
190
191    /// 現在の音声のデータを設定する
192    /// buffer: 音声データへのポインタ ※音声データはPCM(float)32bit
193    /// channel: 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
194    pub set_sample_data: unsafe extern "C" fn(buffer: *const f32, channel: i32),
195}
196
197impl FILTER_PLUGIN_TABLE {
198    /// 画像フィルタをサポートする
199    pub const FLAG_VIDEO: i32 = 1;
200    /// 音声フィルタをサポートする
201    pub const FLAG_AUDIO: i32 = 2;
202    /// オブジェクトの初期入力をする (メディアオブジェクトにする場合)
203    pub const FLAG_INPUT: i32 = 4;
204}
205
206/// フィルタプラグイン構造体
207#[repr(C)]
208pub struct FILTER_PLUGIN_TABLE {
209    /// フラグ
210    /// 画像と音声のフィルタ処理は別々のスレッドで処理されます
211    pub flag: i32,
212    /// プラグインの名前
213    pub name: LPCWSTR,
214    /// ラベルの初期値 (nullptrならデフォルトのラベルになります)
215    pub label: LPCWSTR,
216    /// プラグインの情報
217    pub information: LPCWSTR,
218
219    /// 設定項目の定義 (FILTER_ITEM_XXXポインタを列挙してnull終端したリストへのポインタ)
220    pub items: *const *const c_void,
221
222    /// 画像フィルタ処理関数へのポインタ (FLAG_VIDEOが有効の時のみ呼ばれます)
223    pub func_proc_video: Option<extern "C" fn(video: *mut FILTER_PROC_VIDEO) -> bool>,
224
225    /// 音声フィルタ処理関数へのポインタ (FLAG_AUDIOが有効の時のみ呼ばれます)
226    pub func_proc_audio: Option<extern "C" fn(audio: *mut FILTER_PROC_AUDIO) -> bool>,
227}