Skip to main content

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}