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/// クラスオブジェクトが生存している間はキャッシュ参照が有効となるように制御されます。
13#[repr(C)]
14pub struct CACHE_REFERENCE {
15    pub func_release: Option<unsafe extern "C" fn(instance: *mut c_void)>,
16    pub cache_instance: *mut c_void,
17}
18
19impl Drop for CACHE_REFERENCE {
20    fn drop(&mut self) {
21        if let Some(func_release) = self.func_release
22            && !self.cache_instance.is_null()
23        {
24            unsafe {
25                func_release(self.cache_instance);
26            }
27        }
28    }
29}
30
31/// 画像キャッシュデータ構造体
32#[repr(C)]
33pub struct CACHE_IMAGE {
34    pub reference: CACHE_REFERENCE,
35    /// 画像キャッシュデータへのポインタ (取得失敗時はnullptr)
36    pub buffer: *mut PIXEL_RGBA,
37    /// 画像キャッシュの画像サイズ
38    pub width: i32,
39    pub height: i32,
40}
41
42/// 音声キャッシュデータ構造体
43#[repr(C)]
44pub struct CACHE_AUDIO {
45    pub reference: CACHE_REFERENCE,
46    /// 音声キャッシュデータ(左チャンネル)へのポインタ (取得失敗時はnullptr)
47    pub buffer0: *mut f32,
48    /// 音声キャッシュデータ(右チャンネル)へのポインタ (取得失敗時はnullptr)
49    pub buffer1: *mut f32,
50    /// 音声キャッシュのサンプル数
51    pub sample_num: i32,
52    /// 音声キャッシュのチャンネル数 ( 1 = モノラル / 2 = ステレオ )
53    pub channel_num: i32,
54}
55
56/// メディアファイルの画像キャッシュデータ構造体
57#[repr(C)]
58pub struct CACHE_FILE_IMAGE {
59    pub reference: CACHE_REFERENCE,
60    /// 画像キャッシュデータへのポインタ (取得失敗時はnullptr)
61    pub buffer: *const c_void,
62    /// 画像キャッシュの画像サイズ
63    pub width: i32,
64    pub height: i32,
65    /// 画像キャッシュデータの横1ラインのバイト数
66    pub pitch: i32,
67    /// 画像キャッシュのピクセルフォーマット
68    pub format: INPUT_PIXEL_FORMAT,
69}
70
71/// ビデオ情報構造体
72#[repr(C)]
73pub struct VIDEO_INFO {
74    /// 総時間
75    pub total_time: f64,
76    /// 総フレーム数
77    pub frame_num: i32,
78    /// トラック数
79    pub track_num: i32,
80    /// 解像度
81    pub width: i32,
82    pub height: i32,
83    /// フレームレート
84    pub rate: i32,
85    pub scale: i32,
86}
87
88/// オーディオ情報構造体
89#[repr(C)]
90pub struct AUDIO_INFO {
91    /// 総時間
92    pub total_time: f64,
93    /// 総サンプル数
94    pub sample_num: i64,
95    /// トラック数
96    pub track_num: i32,
97    /// サンプリングレート
98    pub rate: i32,
99    /// チャンネル数
100    pub channel: i32,
101}
102
103/// キャッシュハンドル
104#[repr(C)]
105pub struct CACHE_HANDLE {
106    /// 画像キャッシュデータを取得する
107    pub get_image_cache:
108        unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR) -> CACHE_IMAGE,
109
110    /// 画像キャッシュデータを作成する
111    pub create_image_cache: unsafe extern "C" fn(
112        identifier: *mut c_void,
113        name: LPCWSTR,
114        width: i32,
115        height: i32,
116    ) -> CACHE_IMAGE,
117
118    /// 音声キャッシュデータを取得する
119    pub get_audio_cache:
120        unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR) -> CACHE_AUDIO,
121
122    /// 音声キャッシュデータを作成する
123    pub create_audio_cache: unsafe extern "C" fn(
124        identifier: *mut c_void,
125        name: LPCWSTR,
126        sample_num: i32,
127        channel_num: i32,
128    ) -> CACHE_AUDIO,
129
130    /// 新しい関数に差し替えるので廃止します
131    pub deprecated_get_image_file_cache: unsafe extern "C" fn(file: LPCWSTR) -> CACHE_IMAGE,
132
133    /// メディアファイルのビデオ情報を取得する
134    pub get_video_file_info:
135        unsafe extern "C" fn(file: LPCWSTR, info: *mut VIDEO_INFO, info_size: i32) -> bool,
136
137    /// メディアファイルのオーディオ情報を取得する
138    pub get_audio_file_info:
139        unsafe extern "C" fn(file: LPCWSTR, info: *mut AUDIO_INFO, info_size: i32) -> bool,
140
141    /// 画像ファイルから画像データをキャッシュ経由で取得する
142    pub get_image_file_cache: unsafe extern "C" fn(file: LPCWSTR) -> CACHE_FILE_IMAGE,
143
144    /// メディアファイルから画像データをキャッシュ経由で取得する
145    pub get_video_file_cache:
146        unsafe extern "C" fn(file: LPCWSTR, track: i32, frame: i32) -> CACHE_FILE_IMAGE,
147
148    /// メディアファイルから画像データをキャッシュ経由で取得する
149    pub get_video_file_cache_by_time:
150        unsafe extern "C" fn(file: LPCWSTR, track: i32, time: f64) -> CACHE_FILE_IMAGE,
151
152    /// メディアファイルから音声データをキャッシュ経由で取得する
153    pub get_audio_file_data: unsafe extern "C" fn(
154        file: LPCWSTR,
155        track: i32,
156        sample_index: i64,
157        sample_num: i32,
158        buffer0: *mut f32,
159        buffer1: *mut f32,
160    ) -> i32,
161
162    /// 画像キャッシュデータをクリアする
163    pub clear_image_cache: unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR),
164
165    /// 音声キャッシュデータをクリアする
166    pub clear_audio_cache: unsafe extern "C" fn(identifier: *mut c_void, name: LPCWSTR),
167}