aviutl2_sys/cache2.rs
1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use std::ffi::c_void;
4
5use crate::{
6 common::LPCWSTR,
7 filter2::{INPUT_PIXEL_FORMAT, PIXEL_RGBA},
8};
9
10/// キャッシュデータ参照の基底クラス
11/// クラスオブジェクトが生存している間はキャッシュ参照が有効となるように制御されます
12#[repr(C)]
13pub struct CACHE_REFERENCE {
14 pub func_release: Option<unsafe extern "C" fn(instance: *mut c_void)>,
15 pub cache_instance: *mut c_void,
16}
17
18impl Drop for CACHE_REFERENCE {
19 fn drop(&mut self) {
20 if let Some(func_release) = self.func_release
21 && !self.cache_instance.is_null()
22 {
23 unsafe {
24 func_release(self.cache_instance);
25 }
26 }
27 }
28}
29
30/// 画像キャッシュデータ構造体
31#[repr(C)]
32pub struct CACHE_IMAGE {
33 pub reference: CACHE_REFERENCE,
34 /// 画像キャッシュデータへのポインタ (取得失敗時はnullptr)
35 /// ※画像データはPIXEL_RGBA
36 pub buffer: *mut PIXEL_RGBA,
37 /// 画像キャッシュの画像サイズ
38 pub width: i32,
39 /// 画像キャッシュの画像サイズ
40 pub height: i32,
41}
42
43/// 音声キャッシュデータ構造体
44#[repr(C)]
45pub struct CACHE_AUDIO {
46 pub reference: CACHE_REFERENCE,
47 /// 音声キャッシュデータ(左チャンネル)へのポインタ (取得失敗時はnullptr)
48 /// ※音声データはPCM(float)32bit
49 pub buffer0: *mut f32,
50 /// 音声キャッシュデータ(右チャンネル)へのポインタ (取得失敗時はnullptr)
51 /// ※音声データはPCM(float)32bit
52 pub buffer1: *mut f32,
53 /// 音声キャッシュのサンプル数
54 pub sample_num: i32,
55 /// 音声キャッシュのチャンネル数 ( 1 = モノラル / 2 = ステレオ )
56 /// チャンネル数が1の場合は buffer0 のみ利用出来ます
57 pub channel_num: i32,
58}
59
60/// メディアファイルの画像キャッシュデータ構造体
61#[repr(C)]
62pub struct CACHE_FILE_IMAGE {
63 pub reference: CACHE_REFERENCE,
64 /// 画像キャッシュデータへのポインタ (取得失敗時はnullptr)
65 /// ※画像データはINPUT_PIXEL_FORMATのいずれかになります
66 pub buffer: *const c_void,
67 /// 画像キャッシュの画像サイズ
68 pub width: i32,
69 /// 画像キャッシュの画像サイズ
70 pub height: i32,
71 /// 画像キャッシュデータの横1ラインのバイト数
72 pub pitch: i32,
73 /// 画像キャッシュのピクセルフォーマット
74 pub format: INPUT_PIXEL_FORMAT,
75}
76
77/// ビデオ情報構造体
78#[repr(C)]
79pub struct VIDEO_INFO {
80 /// 総時間
81 pub total_time: f64,
82 /// 総フレーム数
83 pub frame_num: i32,
84 /// トラック数
85 pub track_num: i32,
86 /// 解像度
87 pub width: i32,
88 /// 解像度
89 pub height: i32,
90 /// フレームレート
91 pub rate: i32,
92 /// フレームレート
93 pub scale: i32,
94}
95
96/// オーディオ情報構造体
97#[repr(C)]
98pub struct AUDIO_INFO {
99 /// 総時間
100 pub total_time: f64,
101 /// 総サンプル数
102 pub sample_num: i64,
103 /// トラック数
104 pub track_num: i32,
105 /// サンプリングレート
106 pub rate: i32,
107 /// チャンネル数
108 pub channel: i32,
109}
110
111/// キャッシュハンドル
112/// アプリケーションの共用のキャッシュ領域に各種キャッシュデータを作成することが出来ます
113/// ※スクリプトのキャッシュバッファ(cache:xxxx)とは異なりメインメモリに確保されます
114#[repr(C)]
115pub struct CACHE_HANDLE {
116 /// 画像キャッシュデータを取得する
117 /// identifier : キャッシュ識別のポインタ ※任意の静的なポインタを指定する(CACHE_HANDLEやFILTER_PLUGIN_TABLE等)
118 /// name : キャッシュ識別の名前 ※作成した画像キャッシュの識別名
119 /// 戻り値 : 画像キャッシュデータ
120 /// 取得出来ない場合は返却オブジェクトがfalseとなる
121 pub get_image_cache:
122 unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR) -> CACHE_IMAGE,
123
124 /// 画像キャッシュデータを作成する
125 /// identifier : キャッシュ識別のポインタ ※任意の静的なポインタを指定する(CACHE_HANDLEやFILTER_PLUGIN_TABLE等)
126 /// name : キャッシュ識別の名前 ※任意の識別名を付けることが出来る
127 /// width,height : 作成するキャッシュの画像サイズ
128 /// 戻り値 : 画像キャッシュデータ
129 /// 返却されたキャッシュに画像データを書き込むことが出来る
130 pub create_image_cache: unsafe extern "C" fn(
131 identifier: *mut c_void,
132 name: LPCWSTR,
133 width: i32,
134 height: i32,
135 ) -> CACHE_IMAGE,
136
137 /// 音声キャッシュデータを取得する
138 /// identifier : キャッシュ識別のポインタ ※任意の静的なポインタを指定する(CACHE_HANDLEやFILTER_PLUGIN_TABLE等)
139 /// name : キャッシュ識別の名前 ※作成した音声キャッシュの識別名
140 /// 戻り値 : 音声キャッシュデータ
141 /// 取得出来ない場合は返却オブジェクトがfalseとなる
142 pub get_audio_cache:
143 unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR) -> CACHE_AUDIO,
144
145 /// 音声キャッシュデータを作成する
146 /// identifier : キャッシュ識別のポインタ ※任意の静的なポインタを指定する(CACHE_HANDLEやFILTER_PLUGIN_TABLE等)
147 /// name : キャッシュ識別の名前 ※任意の識別名を付けることが出来る
148 /// sample_num : 作成する音声キャッシュのサンプル数
149 /// channel_num : 作成する音声キャッシュのチャンネル数 ( 1 = モノラル / 2 = ステレオ )
150 /// 戻り値 : 音声キャッシュデータ
151 /// 返却されたキャッシュに音声データを書き込むことが出来る
152 pub create_audio_cache: unsafe extern "C" fn(
153 identifier: *mut c_void,
154 name: LPCWSTR,
155 sample_num: i32,
156 channel_num: i32,
157 ) -> CACHE_AUDIO,
158
159 /// 新しい関数に差し替えるので廃止します
160 pub deprecated_get_image_file_cache: unsafe extern "C" fn(file: LPCWSTR) -> CACHE_IMAGE,
161
162 /// メディアファイルのビデオ情報を取得する
163 /// file : メディアファイルのパス
164 /// info : ビデオ情報の格納先へのポインタ
165 /// info_size : ビデオ情報の格納先のサイズ ※VIDEO_INFOと異なる場合はサイズ分のみ取得されます
166 /// 戻り値 : 取得出来た場合はtrue
167 pub get_video_file_info:
168 unsafe extern "C" fn(file: LPCWSTR, info: *mut VIDEO_INFO, info_size: i32) -> bool,
169
170 /// メディアファイルのオーディオ情報を取得する
171 /// file : メディアファイルのパス
172 /// info : オーディオ情報の格納先へのポインタ
173 /// info_size : オーディオ情報の格納先のサイズ ※AUDIO_INFOと異なる場合はサイズ分のみ取得されます
174 /// 戻り値 : 取得出来た場合はtrue
175 pub get_audio_file_info:
176 unsafe extern "C" fn(file: LPCWSTR, info: *mut AUDIO_INFO, info_size: i32) -> bool,
177
178 /// 画像ファイルから画像データをキャッシュ経由で取得する
179 /// file : 画像ファイルのパス
180 /// 戻り値 : 画像キャッシュデータ
181 /// 取得出来ない場合は返却オブジェクトがfalseとなる
182 pub get_image_file_cache: unsafe extern "C" fn(file: LPCWSTR) -> CACHE_FILE_IMAGE,
183
184 /// メディアファイルから画像データをキャッシュ経由で取得する
185 /// file : メディアファイルのパス
186 /// track : トラック番号
187 /// frame : 取得するフレーム番号
188 /// 戻り値 : 画像キャッシュデータ
189 /// 取得出来ない場合は返却オブジェクトがfalseとなる
190 pub get_video_file_cache:
191 unsafe extern "C" fn(file: LPCWSTR, track: i32, frame: i32) -> CACHE_FILE_IMAGE,
192
193 /// メディアファイルから画像データをキャッシュ経由で取得する
194 /// file : メディアファイルのパス
195 /// track : ビデオトラック番号
196 /// time : 取得するフレームの時間
197 /// 戻り値 : 画像キャッシュデータ
198 /// 取得出来ない場合は返却オブジェクトがfalseとなる
199 pub get_video_file_cache_by_time:
200 unsafe extern "C" fn(file: LPCWSTR, track: i32, time: f64) -> CACHE_FILE_IMAGE,
201
202 /// メディアファイルから音声データをキャッシュ経由で取得する
203 /// ※音声データはPCM(float)32bit2ch
204 /// file : メディアファイルのパス
205 /// track : オーディオトラック番号
206 /// sample_index : 取得するサンプル位置
207 /// sample_num : 取得するサンプル数
208 /// buffer0 : サンプル(左チャンネル)取得先のバッファへのポインタ
209 /// buffer1 : サンプル(右チャンネル)取得先のバッファへのポインタ
210 /// 戻り値 : 実際に取得したサンプル数
211 pub get_audio_file_data: unsafe extern "C" fn(
212 file: LPCWSTR,
213 track: i32,
214 sample_index: i64,
215 sample_num: i32,
216 buffer0: *mut f32,
217 buffer1: *mut f32,
218 ) -> i32,
219
220 /// 画像キャッシュデータをクリアする
221 /// identifier : キャッシュ識別のポインタ ※任意の静的なポインタを指定する(CACHE_HANDLEやFILTER_PLUGIN_TABLE等)
222 /// name : キャッシュ識別の名前 ※作成した画像キャッシュの識別名
223 pub clear_image_cache: unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR),
224
225 /// 音声キャッシュデータをクリアする
226 /// identifier : キャッシュ識別のポインタ ※任意の静的なポインタを指定する(CACHE_HANDLEやFILTER_PLUGIN_TABLE等)
227 /// name : キャッシュ識別の名前 ※作成した音声キャッシュの識別名
228 pub clear_audio_cache: unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR),
229}