aviutl2_sys/
output2.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::WAVE_FORMAT_PCM, Multimedia::WAVE_FORMAT_IEEE_FLOAT},
10};
11/// 出力情報構造体
12#[repr(C)]
13pub struct OUTPUT_INFO {
14    /// フラグ
15    pub flag: i32,
16    /// 縦横サイズ
17    pub w: i32,
18    /// 縦横サイズ
19    pub h: i32,
20    /// フレームレート
21    pub rate: i32,
22    /// フレームレート(スケール)
23    pub scale: i32,
24    /// フレーム数
25    pub n: i32,
26    /// 音声サンプリングレート
27    pub audio_rate: i32,
28    /// 音声チャンネル数
29    pub audio_ch: i32,
30    /// 音声サンプリング数
31    pub audio_n: i32,
32    /// セーブファイル名へのポインタ
33    pub savefile: LPCWSTR,
34    /// DIB形式の画像データを取得します
35    ///
36    /// # Safety
37    /// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
38    ///
39    /// # See Also
40    /// [`crate::common::BI_RGB`]
41    /// [`crate::common::BI_YUY2`]
42    /// [`crate::common::BI_PA64`]
43    /// [`crate::common::BI_YC48`]
44    /// [`crate::common::BI_HF64`]
45    pub func_get_video: Option<extern "C" fn(frame: i32, format: u32) -> *mut c_void>,
46    /// PCM形式の音声データへのポインタを取得します
47    ///
48    /// # Safety
49    /// 音声データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
50    ///
51    /// # See Also
52    /// [`WAVE_FORMAT_PCM`]
53    /// [`WAVE_FORMAT_IEEE_FLOAT`]
54    pub func_get_audio: Option<
55        extern "C" fn(start: i32, length: i32, readed: *mut i32, format: u32) -> *mut c_void,
56    >,
57    /// 中断するか調べます
58    ///
59    /// # Returns
60    /// `true`なら中断
61    pub func_is_abort: Option<extern "C" fn() -> bool>,
62    /// 残り時間を表示させます
63    ///
64    /// # Args
65    /// - `now`: 処理しているフレーム番号
66    /// - `total`: 処理する総フレーム数
67    pub func_rest_time_disp: Option<extern "C" fn(now: i32, total: i32)>,
68    /// データ取得のバッファ数(フレーム数)を設定します ※標準は4になります
69    ///
70    /// バッファ数の半分のデータを先読みリクエストするようになります
71    ///
72    /// # Args
73    /// - `video_size`: 画像データのバッファ数
74    /// - `audio_size`: 音声データのバッファ数
75    pub func_set_buffer_size: Option<extern "C" fn(video_size: i32, audio_size: i32)>,
76}
77
78impl OUTPUT_INFO {
79    /// 画像データあり
80    pub const FLAG_VIDEO: i32 = 1;
81    /// 音声データあり
82    pub const FLAG_AUDIO: i32 = 2;
83}
84
85/// 出力プラグイン構造体
86#[repr(C)]
87pub struct OUTPUT_PLUGIN_TABLE {
88    /// フラグ ※未使用
89    pub flag: i32,
90    /// プラグインの名前
91    pub name: LPCWSTR,
92    /// ファイルのフィルタ
93    pub filefilter: LPCWSTR,
94    /// プラグインの情報
95    pub information: LPCWSTR,
96    /// 出力時に呼ばれる関数へのポインタ
97    pub func_output: Option<extern "C" fn(oip: *mut OUTPUT_INFO) -> bool>,
98    /// 出力設定のダイアログを要求された時に呼ばれる関数へのポインタ (nullなら呼ばれません)
99    pub func_config: Option<extern "C" fn(hwnd: HWND, dll_hinst: HINSTANCE) -> bool>,
100    /// 出力設定のテキスト情報を取得する時に呼ばれる関数へのポインタ (nullなら呼ばれません)
101    ///
102    /// # Returns
103    /// 出力設定のテキスト情報(次に関数が呼ばれるまで内容を有効にしておく)
104    pub func_get_config_text: Option<extern "C" fn() -> LPCWSTR>,
105}
106
107impl OUTPUT_PLUGIN_TABLE {
108    /// 画像をサポートする
109    pub const FLAG_VIDEO: i32 = 1;
110    /// 音声をサポートする
111    pub const FLAG_AUDIO: i32 = 2;
112}