aviutl2_sys/
plugin2.rs

1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use crate::common::LPCWSTR;
4use crate::{
5    filter2::FILTER_PLUGIN_TABLE, input2::INPUT_PLUGIN_TABLE, module2::SCRIPT_MODULE_TABLE,
6    output2::OUTPUT_PLUGIN_TABLE,
7};
8use std::ffi::c_void;
9use std::os::raw::c_char;
10
11pub use windows_sys::Win32::Foundation::HWND;
12
13pub type LPCSTR = *const c_char;
14
15/// オブジェクトハンドル
16pub type OBJECT_HANDLE = *mut c_void;
17
18/// レイヤー・フレーム情報構造体
19/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
20#[repr(C)]
21pub struct OBJECT_LAYER_FRAME {
22    /// レイヤー番号
23    pub layer: i32,
24    /// 開始フレーム番号
25    pub start: i32,
26    /// 終了フレーム番号
27    pub end: i32,
28}
29
30/// 編集情報構造体
31/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
32#[repr(C)]
33pub struct EDIT_INFO {
34    /// シーンの解像度
35    pub width: i32,
36    /// シーンの解像度
37    pub height: i32,
38    /// シーンのフレームレート
39    pub rate: i32,
40    /// シーンのフレームレート
41    pub scale: i32,
42    /// シーンのサンプリングレート
43    pub sample_rate: i32,
44    /// 現在のカーソルのフレーム番号
45    pub frame: i32,
46    /// 現在の選択レイヤー番号
47    pub layer: i32,
48    /// オブジェクトが存在する最大のフレーム番号
49    pub frame_max: i32,
50    /// オブジェクトが存在する最大のレイヤー番号
51    pub layer_max: i32,
52}
53
54/// 編集セクション構造体
55/// メニュー選択やプロジェクト編集のコールバック関数内で利用出来ます
56/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
57#[repr(C)]
58pub struct EDIT_SECTION {
59    /// 編集情報
60    pub info: *mut EDIT_INFO,
61
62    /// 指定の位置にオブジェクトエイリアスを作成します
63    /// alias : オブジェクトエイリアスデータ(UTF-8)へのポインタ
64    ///      オブジェクトエイリアスファイルと同じフォーマットになります
65    /// layer : 作成するレイヤー番号
66    /// frame : 作成するフレーム番号
67    /// length : オブジェクトのフレーム数 ※エイリアスデータにフレーム情報が無い場合に利用します
68    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
69    ///      既に存在するオブジェクトに重なったり、エイリアスデータが不正な場合に失敗します
70    pub create_object_from_alias:
71        unsafe extern "C" fn(alias: LPCSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
72
73    /// 指定のフレーム番号以降にあるオブジェクトを検索します
74    /// layer : 検索対象のレイヤー番号
75    /// frame : 検索を開始するフレーム番号
76    /// 戻り値 : 検索したオブジェクトのハンドル (見つからない場合はnullptrを返却)
77    pub find_object: unsafe extern "C" fn(layer: i32, frame: i32) -> OBJECT_HANDLE,
78
79    /// オブジェクトに対象エフェクトが何個存在するかを取得します
80    /// object : オブジェクトのハンドル
81    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
82    /// 戻り値 : 対象エフェクトの数 ※存在しない場合は0
83    pub count_object_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> i32,
84
85    /// オブジェクトのレイヤー・フレーム情報を取得します
86    /// object : オブジェクトのハンドル
87    /// 戻り値 : オブジェクトのレイヤー・フレーム情報
88    pub get_object_layer_frame: unsafe extern "C" fn(object: OBJECT_HANDLE) -> OBJECT_LAYER_FRAME,
89
90    /// オブジェクトのエイリアスデータを取得します
91    /// object : オブジェクトのハンドル
92    /// 戻り値 : オブジェクトエイリアスデータ(UTF-8)へのポインタ (取得出来ない場合はnullptrを返却)
93    ///      オブジェクトエイリアスファイルと同じフォーマットになります
94    ///      ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
95    pub get_object_alias: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCSTR,
96
97    /// オブジェクトの設定項目の値を文字列で取得します
98    /// object : オブジェクトのハンドル
99    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
100    ///          同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
101    ///          get_object_item_value(object, L"ぼかし:1", L"範囲"); // 2個目のぼかしを対象とする
102    /// item  : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
103    /// 戻り値 : 取得した設定値(UTF8)へのポインタ (取得出来ない場合はnullptrを返却)
104    ///      エイリアスファイルの設定値と同じフォーマットになります
105    ///      ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
106    pub get_object_item_value:
107        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR, item: LPCWSTR) -> LPCSTR,
108
109    /// オブジェクトの設定項目の値を文字列で設定します
110    /// object : オブジェクトのハンドル
111    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
112    ///          同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
113    ///          get_object_item_value(object, L"ぼかし:1", L"範囲"); // 2個目のぼかしを対象とする
114    /// item  : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
115    /// value : 設定値(UTF8)
116    ///      エイリアスファイルの設定値と同じフォーマットになります
117    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
118    pub set_object_item_value: unsafe extern "C" fn(
119        object: OBJECT_HANDLE,
120        effect: LPCWSTR,
121        item: LPCWSTR,
122        value: LPCSTR,
123    ) -> bool,
124
125    /// オブジェクトを移動します
126    /// object : オブジェクトのハンドル
127    /// layer : 移動先のレイヤー番号
128    /// frame : 移動先のフレーム番号
129    /// 戻り値 : 移動した場合はtrue (移動先にオブジェクトが存在する場合は失敗します)
130    pub move_object: unsafe extern "C" fn(object: OBJECT_HANDLE, layer: i32, frame: i32) -> bool,
131
132    /// オブジェクトを削除します
133    /// object : オブジェクトのハンドル
134    pub delete_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
135
136    /// オブジェクト設定ウィンドウで選択されているオブジェクトのハンドルを取得します
137    /// 戻り値 : オブジェクトのハンドル (未選択の場合はnullptrを返却)
138    pub get_focus_object: unsafe extern "C" fn() -> OBJECT_HANDLE,
139
140    /// オブジェクト設定ウィンドウで選択するオブジェクトを設定します (コールバック処理の終了時に設定されます)
141    /// object : オブジェクトのハンドル
142    pub set_focus_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
143
144    /// 冗長なので後で廃止します
145    pub deprecated_output_log: unsafe extern "C" fn(message: LPCWSTR),
146
147    /// 選択中オブジェクトのハンドルを取得します
148    /// index : 選択中オブジェクトのインデックス(0〜)
149    /// 戻り値 : 指定インデックスのオブジェクトのハンドル (インデックスが範囲外の場合はnullptrを返却)
150    pub get_selected_object: unsafe extern "C" fn(index: i32) -> OBJECT_HANDLE,
151
152    /// 選択中オブジェクトの数を取得します
153    /// 戻り値 : 選択中オブジェクトの数
154    pub get_selected_object_num: unsafe extern "C" fn() -> i32,
155}
156
157/// 編集ハンドル構造体
158#[repr(C)]
159pub struct EDIT_HANDLE {
160    /// プロジェクトデータの編集をする為のコールバック関数(func_proc_edit)を呼び出します
161    /// 編集情報を排他制御する為にコールバック関数内で編集処理をする形になります
162    /// コールバック関数内で編集したオブジェクトは纏めてUndoに登録されます
163    /// コールバック関数はメインスレッドから呼ばれます
164    /// func_proc_edit : 編集処理のコールバック関数
165    /// 戻り値   : trueなら成功
166    ///        編集が出来ない場合(出力中等)に失敗します
167    pub call_edit_section:
168        unsafe extern "C" fn(func_proc_edit: unsafe extern "C" fn(edit: *mut EDIT_SECTION)) -> bool,
169
170    /// call_edit_section()に引数paramを渡せるようにした関数です
171    pub call_edit_section_param: unsafe extern "C" fn(
172        param: *mut c_void,
173        func_proc_edit: unsafe extern "C" fn(param: *mut c_void, edit: *mut EDIT_SECTION),
174    ) -> bool,
175}
176
177/// プロジェクトファイル構造体
178/// プロジェクトファイルのロード、セーブ時のコールバック関数内で利用出来ます
179/// プロジェクトの保存データはプラグイン毎のデータ領域になります
180#[repr(C)]
181pub struct PROJECT_FILE {
182    /// プロジェクトに保存されている文字列(UTF-8)を取得します
183    /// key  : キー名(UTF-8)
184    /// 戻り値 : 取得した文字列へのポインタ (未設定の場合はnullptr)
185    pub get_param_string: unsafe extern "C" fn(key: LPCSTR) -> LPCSTR,
186    /// プロジェクトに文字列(UTF-8)を保存します
187    /// key  : キー名(UTF-8)
188    /// value : 保存する文字列(UTF-8)
189    pub set_param_string: unsafe extern "C" fn(key: LPCSTR, value: LPCSTR),
190    /// プロジェクトに保存されているバイナリデータを取得します
191    /// key  : キー名(UTF-8)
192    /// data  : 取得するデータの格納先へのポインタ
193    /// size  : 取得するデータのサイズ (保存されているサイズと異なる場合は失敗します)
194    /// 戻り値 : 正しく取得出来た場合はtrue
195    pub get_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32) -> bool,
196    /// プロジェクトにバイナリデータを保存します
197    /// key  : キー名(UTF-8)
198    /// data  : 保存するデータへのポインタ
199    /// size  : 保存するデータのサイズ (4096バイト以下)
200    pub set_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32),
201    /// プロジェクトに保存されているデータを全て削除します
202    pub clear_params: unsafe extern "C" fn(),
203}
204
205/// ホストアプリケーション構造体
206#[repr(C)]
207pub struct HOST_APP_TABLE {
208    /// プラグインの情報を設定する
209    /// information : プラグインの情報
210    pub set_plugin_information: unsafe extern "C" fn(information: LPCWSTR),
211
212    /// 入力プラグインを登録する
213    /// input_plugin_table : 入力プラグイン構造体
214    pub register_input_plugin: unsafe extern "C" fn(input_plugin_table: *mut INPUT_PLUGIN_TABLE),
215    /// 出力プラグインを登録する
216    /// output_plugin_table : 出力プラグイン構造体
217    pub register_output_plugin: unsafe extern "C" fn(output_plugin_table: *mut OUTPUT_PLUGIN_TABLE),
218    /// フィルタプラグインを登録する
219    /// filter_plugin_table : フィルタプラグイン構造体
220    pub register_filter_plugin: unsafe extern "C" fn(filter_plugin_table: *mut FILTER_PLUGIN_TABLE),
221    /// スクリプトモジュールを登録する
222    /// script_module_table : スクリプトモジュール構造体
223    pub register_script_module: unsafe extern "C" fn(script_module_table: *mut SCRIPT_MODULE_TABLE),
224
225    /// インポートメニューを登録する
226    /// name    : インポートメニューの名称
227    /// func_proc_import : インポートメニュー選択時のコールバック関数
228    pub register_import_menu: unsafe extern "C" fn(
229        name: LPCWSTR,
230        func_proc_import: unsafe extern "C" fn(*mut EDIT_SECTION),
231    ),
232    /// エクスポートメニューを登録する
233    /// name    : エクスポートメニューの名称
234    /// func_proc_export : エクスポートメニュー選択時のコールバック関数
235    pub register_export_menu: unsafe extern "C" fn(
236        name: LPCWSTR,
237        func_proc_export: unsafe extern "C" fn(*mut EDIT_SECTION),
238    ),
239
240    /// ウィンドウクライアントを登録する
241    /// name  : ウィンドウの名称
242    /// hwnd  : ウィンドウハンドル
243    /// ウィンドウにはWS_CHILDが追加され親ウィンドウが設定されます ※WS_POPUPは削除されます
244    pub register_window_client: unsafe extern "C" fn(name: LPCWSTR, hwnd: HWND),
245
246    /// プロジェクトデータ編集用のハンドルを取得します
247    /// 戻り値 : 編集ハンドル
248    pub create_edit_handle: unsafe extern "C" fn() -> *mut EDIT_HANDLE,
249
250    /// プロジェクトファイルをロードした直後に呼ばれる関数を登録する ※プロジェクトの初期化時にも呼ばれます
251    /// func_project_load : プロジェクトファイルのロード時のコールバック関数
252    pub register_project_load_handler:
253        unsafe extern "C" fn(func_project_load: unsafe extern "C" fn(*mut PROJECT_FILE)),
254    /// プロジェクトファイルをセーブする直前に呼ばれる関数を登録する
255    /// func_project_save : プロジェクトファイルのセーブ時のコールバック関数
256    pub register_project_save_handler:
257        unsafe extern "C" fn(func_project_save: unsafe extern "C" fn(*mut PROJECT_FILE)),
258
259    /// レイヤーメニューを登録する (レイヤー編集でオブジェクト未選択時の右クリックメニューに追加されます)
260    /// name : レイヤーメニューの名称
261    /// func_proc_layer_menu : レイヤーメニュー選択時のコールバック関数
262    pub register_layer_menu: unsafe extern "C" fn(
263        name: LPCWSTR,
264        func_proc_layer_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
265    ),
266
267    /// オブジェクトメニューを登録する (レイヤー編集でオブジェクト選択時の右クリックメニューに追加されます)
268    /// name : オブジェクトメニューの名称
269    /// func_proc_object_menu : オブジェクトメニュー選択時のコールバック関数
270    pub register_object_menu: unsafe extern "C" fn(
271        name: LPCWSTR,
272        func_proc_object_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
273    ),
274}