Skip to main content

aviutl2_sys/
output2.rs

1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use crate::{common::LPCWSTR, plugin2::PROJECT_FILE};
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    /// frame : フレーム番号
36    /// format : 画像フォーマット
37    /// 0(BI_RGB) = RGB24bit / 'P''A''6''4' = PA64 / 'H''F''6''4' = HF64 / 'Y''U''Y''2' = YUY2 / 'Y''C''4''8' = YC48
38    /// ※PA64はDXGI_FORMAT_R16G16B16A16_UNORM(乗算済みα)です
39    /// ※HF64はDXGI_FORMAT_R16G16B16A16_FLOAT(乗算済みα)です(内部フォーマット)
40    /// ※YC48は互換対応のフォーマットです
41    /// 戻り値 : データへのポインタ
42    /// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
43    pub func_get_video: Option<extern "C" fn(frame: i32, format: u32) -> *mut c_void>,
44    /// PCM形式の音声データへのポインタを取得します
45    /// start : 開始サンプル番号
46    /// length : 読み込むサンプル数
47    /// readed : 読み込まれたサンプル数
48    /// format : 音声フォーマット
49    /// 1(WAVE_FORMAT_PCM) = PCM16bit / 3(WAVE_FORMAT_IEEE_FLOAT) = PCM(float)32bit
50    /// 戻り値 : データへのポインタ
51    /// 音声データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
52    pub func_get_audio: Option<
53        extern "C" fn(start: i32, length: i32, readed: *mut i32, format: u32) -> *mut c_void,
54    >,
55    /// 中断するか調べます
56    /// 戻り値 : trueなら中断
57    pub func_is_abort: Option<extern "C" fn() -> bool>,
58    /// 残り時間を表示させます
59    /// now : 処理しているフレーム番号
60    /// total : 処理する総フレーム数
61    /// 戻り値 : trueなら成功
62    pub func_rest_time_disp: Option<extern "C" fn(now: i32, total: i32)>,
63    /// データ取得のバッファ数(フレーム数)を設定します ※標準は4になります
64    /// バッファ数の半分のデータを先読みリクエストするようになります
65    /// video : 画像データのバッファ数
66    /// audio : 音声データのバッファ数
67    pub func_set_buffer_size: Option<extern "C" fn(video_size: i32, audio_size: i32)>,
68}
69
70impl OUTPUT_INFO {
71    /// 画像データあり
72    pub const FLAG_VIDEO: i32 = 1;
73    /// 画像データあり
74    pub const FLAG_AUDIO: i32 = 2;
75}
76
77/// 出力プラグイン構造体
78#[repr(C)]
79pub struct OUTPUT_PLUGIN_TABLE {
80    /// フラグ
81    pub flag: i32,
82    /// プラグインの名前
83    pub name: LPCWSTR,
84    /// ファイルのフィルタ
85    pub filefilter: LPCWSTR,
86    /// プラグインの情報
87    pub information: LPCWSTR,
88    /// 出力時に呼ばれる関数へのポインタ
89    /// 戻り値 : 成功時はtrueを返却
90    pub func_output: Option<extern "C" fn(oip: *mut OUTPUT_INFO) -> bool>,
91    /// 出力設定のダイアログを要求された時に呼ばれる関数へのポインタ (nullptrなら呼ばれません)
92    /// 戻り値 : 成功時はtrueを返却
93    pub func_config: Option<extern "C" fn(hwnd: HWND, dll_hinst: HINSTANCE) -> bool>,
94    /// 出力設定のテキスト情報を取得する時に呼ばれる関数へのポインタ (nullptrなら呼ばれません)
95    /// 戻り値 : 出力設定のテキスト情報へのポインタ (次に関数が呼ばれるまで内容を有効にしておく)
96    pub func_get_config_text: Option<extern "C" fn() -> LPCWSTR>,
97    /// プロジェクトファイル側から出力設定の読み込み要求時に呼ばれる関数へのポインタ (FLAG_PROJECT_CONFIGが有効の時のみ呼ばれます)
98    /// project : プロジェクトファイル構造体へのポインタ
99    /// 戻り値 : 成功時はtrueを返却
100    pub func_load_project_config: Option<extern "C" fn(project: *mut PROJECT_FILE) -> bool>,
101    /// プロジェクトファイル側への出力設定の書き込み要求時に呼ばれる関数へのポインタ (FLAG_PROJECT_CONFIGが有効の時のみ呼ばれます)
102    /// project : プロジェクトファイル構造体へのポインタ
103    /// 戻り値 : 成功時はtrueを返却
104    pub func_save_project_config: Option<extern "C" fn(project: *mut PROJECT_FILE) -> bool>,
105}
106
107impl OUTPUT_PLUGIN_TABLE {
108    /// 画像をサポートする
109    pub const FLAG_VIDEO: i32 = 1;
110    /// 音声をサポートする
111    pub const FLAG_AUDIO: i32 = 2;
112    /// 静止画出力のみサポートする (OUTPUT_INFOが1フレーム出力になります)
113    /// ※静止画出力では出力完了時の通知やサウンド再生をしません
114    pub const FLAG_IMAGE: i32 = 4;
115    /// プロジェクトファイルの設定保持をサポートする
116    /// ※プロジェクトファイル側に出力設定を保持する場合に指定します
117    pub const FLAG_PROJECT_CONFIG: i32 = 8;
118}