aviutl2_sys/
input2.rs

1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use crate::common::LPCWSTR;
4use std::ffi::c_void;
5
6pub use windows_sys::Win32::{
7    Foundation::{HINSTANCE, HWND},
8    Graphics::Gdi::BITMAPINFOHEADER,
9    Media::Audio::WAVEFORMATEX,
10};
11
12/// 入力ファイル情報構造体
13#[repr(C)]
14pub struct INPUT_INFO {
15    /// フラグ
16    pub flag: i32,
17    /// フレームレート
18    pub rate: i32,
19    /// フレームレート(スケール)
20    pub scale: i32,
21    /// フレーム数
22    pub n: i32,
23    /// 画像フォーマットへのポインタ
24    ///
25    /// # Safety
26    /// 次に関数が呼ばれるまで内容を有効にしておく
27    ///
28    /// # See Also
29    /// [`BITMAPINFOHEADER`]
30    /// [`crate::common::BI_RGB`]
31    /// [`crate::common::BI_YUY2`]
32    /// [`crate::common::BI_PA64`]
33    /// [`crate::common::BI_YC48`]
34    /// [`crate::common::BI_HF64`]
35    pub format: *const BITMAPINFOHEADER,
36    /// 画像フォーマットのサイズ
37    pub format_size: i32,
38    /// 音声サンプル数
39    pub audio_n: i32,
40    /// 音声フォーマットへのポインタ
41    ///
42    /// # Safety
43    /// 次に関数が呼ばれるまで内容を有効にしておく
44    pub audio_format: *const WAVEFORMATEX,
45    /// 音声フォーマットのサイズ
46    pub audio_format_size: i32,
47}
48
49impl INPUT_INFO {
50    /// 画像データあり
51    pub const FLAG_VIDEO: i32 = 1;
52    /// 音声データあり
53    pub const FLAG_AUDIO: i32 = 2;
54    /// フレーム番号を時間から算出する
55    /// (func_time_to_frame()が呼ばれるようになる)
56    pub const FLAG_TIME_TO_FRAME: i32 = 16;
57}
58
59/// 入力ファイルハンドル
60pub type INPUT_HANDLE = *mut c_void;
61
62/// 入力プラグイン構造体
63#[repr(C)]
64pub struct INPUT_PLUGIN_TABLE {
65    /// フラグ
66    pub flag: i32,
67    /// プラグインの名前
68    pub name: LPCWSTR,
69    /// 入力ファイルフィルタ
70    pub filefilter: LPCWSTR,
71    /// プラグインの情報
72    pub information: LPCWSTR,
73    /// 入力ファイルをオープンする関数へのポインタ
74    ///
75    /// # Args
76    /// - `file`: ファイル名
77    ///
78    /// # Returns
79    /// `INPUT_HANDLE`
80    pub func_open: Option<unsafe extern "C" fn(file: LPCWSTR) -> INPUT_HANDLE>,
81    /// 入力ファイルをクローズする関数へのポインタ
82    ///
83    /// # Args
84    /// - `ih`: 入力ファイルハンドル
85    ///
86    /// # Returns
87    /// `true`なら成功
88    pub func_close: Option<extern "C" fn(ih: INPUT_HANDLE) -> bool>,
89    /// 入力ファイルの情報を取得する関数へのポインタ
90    ///
91    /// # Args
92    /// - `ih`: 入力ファイルハンドル
93    /// - `iip`: 入力ファイル情報構造体へのポインタ
94    ///
95    /// # Returns
96    /// `true`なら成功
97    pub func_info_get: Option<extern "C" fn(ih: INPUT_HANDLE, iip: *mut INPUT_INFO) -> bool>,
98    /// 画像データを読み込む関数へのポインタ
99    ///
100    /// # Args
101    /// - `ih`: 入力ファイルハンドル
102    /// - `frame`: 読み込むフレーム番号
103    /// - `buf`: データを読み込むバッファへのポインタ
104    ///
105    /// # Returns
106    /// 読み込んだデータサイズ
107    pub func_read_video:
108        Option<extern "C" fn(ih: INPUT_HANDLE, frame: i32, buf: *mut c_void) -> i32>,
109    /// 音声データを読み込む関数へのポインタ
110    ///
111    /// # Args
112    /// - `ih`: 入力ファイルハンドル
113    /// - `start`: 読み込み開始サンプル番号
114    /// - `length`: 読み込むサンプル数
115    /// - `buf`: データを読み込むバッファへのポインタ
116    ///
117    /// # Returns
118    /// 読み込んだサンプル数
119    pub func_read_audio:
120        Option<extern "C" fn(ih: INPUT_HANDLE, start: i32, length: i32, buf: *mut c_void) -> i32>,
121    /// 入力設定のダイアログを要求された時に呼ばれる関数へのポインタ (nullなら呼ばれません)
122    ///
123    /// # Args
124    /// - `hwnd`: ウィンドウハンドル
125    /// - `dll_hinst`: インスタンスハンドル
126    ///
127    /// # Returns
128    /// `true`なら成功
129    pub func_config: Option<extern "C" fn(hwnd: HWND, dll_hinst: HINSTANCE) -> bool>,
130    /// 入力ファイルの読み込み対象トラックを設定する関数へのポインタ (FLAG_MULTI_TRACKが有効の時のみ呼ばれます)
131    ///
132    /// `func_open()`の直後にトラック数取得、トラック番号設定が呼ばれます。※オープン直後の設定以降は呼ばれません
133    ///
134    /// # Args
135    /// - `ih`: 入力ファイルハンドル
136    /// - `track_type`: メディア種別 ( 0 = 映像 / 1 = 音声 )
137    /// - `track_index`: トラック番号 ( -1 が指定された場合はトラック数の取得 )
138    ///
139    /// # Returns
140    /// 設定したトラック番号 (失敗した場合は -1 を返却)
141    /// トラック数の取得の場合は設定可能なトラックの数 (メディアが無い場合は 0 を返却)
142    ///
143    /// # See Also
144    /// [`INPUT_PLUGIN_TABLE::FLAG_MULTI_TRACK`]
145    /// [`INPUT_PLUGIN_TABLE::TRACK_TYPE_VIDEO`]
146    /// [`INPUT_PLUGIN_TABLE::TRACK_TYPE_AUDIO`]
147    pub func_set_track:
148        Option<extern "C" fn(ih: INPUT_HANDLE, track_type: i32, track_index: i32) -> i32>,
149    /// 映像の時間から該当フレーム番号を算出する時に呼ばれる関数へのポインタ (FLAG_TIME_TO_FRAMEが有効の時のみ呼ばれます)
150    ///
151    /// 画像データを読み込む前に呼び出され、結果のフレーム番号で読み込むようになります。
152    ///
153    /// # Remarks
154    /// FLAG_TIME_TO_FRAMEを利用する場合のINPUT_INFOのrate,scale情報は平均フレームレートを表す値を設定してください
155    ///
156    /// # Args
157    /// - `ih`: 入力ファイルハンドル
158    /// - `time`: 映像の時間(秒)
159    ///
160    /// # Returns
161    /// 映像の時間に対応するフレーム番号
162    pub func_time_to_frame: Option<extern "C" fn(ih: INPUT_HANDLE, time: f64) -> i32>,
163}
164
165impl INPUT_PLUGIN_TABLE {
166    /// 画像をサポートする
167    pub const FLAG_VIDEO: i32 = 1;
168    /// 音声をサポートする
169    pub const FLAG_AUDIO: i32 = 2;
170    /// 画像・音声データの同時取得をサポートする
171    /// ※同一ハンドルで画像と音声の取得関数が同時に呼ばれる
172    /// ※異なるハンドルで各関数が同時に呼ばれる
173    pub const FLAG_CONCURRENT: i32 = 16;
174    /// マルチトラックをサポートする ※func_set_track()が呼ばれるようになる
175    pub const FLAG_MULTI_TRACK: i32 = 32;
176
177    pub const TRACK_TYPE_VIDEO: i32 = 0;
178    pub const TRACK_TYPE_AUDIO: i32 = 1;
179}