1 /********************************************************************************
2  * input.h: 入力プラグイン ヘッダーファイル for AviUtl version 0.99k 以降
3  ********************************************************************************
4  * Copyright (c) 1999-2012 Kenkun
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  *******************************************************************************/
24 
25 //	入力ファイル情報構造体
26 typedef struct {
27 	int					flag;				//	フラグ
28 											//	INPUT_INFO_FLAG_VIDEO	: 画像データあり
29 											//	INPUT_INFO_FLAG_AUDIO	: 音声データあり
30 											//	INPUT_INFO_FLAG_VIDEO_RANDOM_ACCESS	: キーフレームを気にせずにfunc_read_video()を呼び出します
31 											//	※標準ではキーフレームからシーケンシャルにfunc_read_video()が呼ばれるように制御されます
32 	int					rate,scale;			//	フレームレート
33 	int					n;					//	フレーム数
34 	BITMAPINFOHEADER	*format;			//	画像フォーマットへのポインタ(次に関数が呼ばれるまで内容を有効にしておく)
35 	int					format_size;		//	画像フォーマットのサイズ
36 	int					audio_n;			//	音声サンプル数
37 	WAVEFORMATEX		*audio_format;		//	音声フォーマットへのポインタ(次に関数が呼ばれるまで内容を有効にしておく)
38 	int					audio_format_size;	//	音声フォーマットのサイズ
39 	DWORD				handler;			//	画像codecハンドラ
40 	int					reserve[7];
41 } INPUT_INFO;
42 #define	INPUT_INFO_FLAG_VIDEO				1
43 #define	INPUT_INFO_FLAG_AUDIO				2
44 #define	INPUT_INFO_FLAG_VIDEO_RANDOM_ACCESS	8
45 //	※画像フォーマットにはRGB,YUY2とインストールされているcodecのものが使えます。
46 //	また、'Y''C''4''8'(biBitCountは48)でPIXEL_YC形式フォーマットで扱えます。(YUY2フィルタモードでは使用出来ません)
47 //	音声フォーマットにはPCMとインストールされているcodecのものが使えます。
48 
49 //	入力ファイルハンドル
50 typedef void*	INPUT_HANDLE;
51 
52 //	入力プラグイン構造体
53 typedef struct {
54 	int		flag;				//	フラグ
55 								//	INPUT_PLUGIN_FLAG_VIDEO	: 画像をサポートする
56 								//	INPUT_PLUGIN_FLAG_AUDIO	: 音声をサポートする
57 	LPSTR	name;				//	プラグインの名前
58 	LPSTR	filefilter;			//	入力ファイルフィルタ
59 	LPSTR	information;		//	プラグインの情報
60 	BOOL 	(*func_init)( void );
61 								//	DLL開始時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
62 	BOOL 	(*func_exit)( void );
63 								//	DLL終了時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
64 	INPUT_HANDLE (*func_open)( LPSTR file );
65 								//	入力ファイルをオープンする関数へのポインタ
66 								//	file	: ファイル名
67 								//	戻り値	: TRUEなら入力ファイルハンドル
68 	BOOL 	(*func_close)( INPUT_HANDLE ih );
69 								//	入力ファイルをクローズする関数へのポインタ
70 								//	ih		: 入力ファイルハンドル
71 								//	戻り値	: TRUEなら成功
72 	BOOL 	(*func_info_get)( INPUT_HANDLE ih,INPUT_INFO *iip );
73 								//	入力ファイルの情報を取得する関数へのポインタ
74 								//	ih		: 入力ファイルハンドル
75 								//	iip		: 入力ファイル情報構造体へのポインタ
76 								//	戻り値	: TRUEなら成功
77 	int 	(*func_read_video)( INPUT_HANDLE ih,int frame,void *buf );
78 								//	画像データを読み込む関数へのポインタ
79 								//	ih		: 入力ファイルハンドル
80 								//	frame	: 読み込むフレーム番号
81 								//	buf		: データを読み込むバッファへのポインタ
82 								//	戻り値	: 読み込んだデータサイズ
83 	int 	(*func_read_audio)( INPUT_HANDLE ih,int start,int length,void *buf );
84 								//	音声データを読み込む関数へのポインタ
85 								//	ih		: 入力ファイルハンドル
86 								//	start	: 読み込み開始サンプル番号
87 								//	length	: 読み込むサンプル数
88 								//	buf		: データを読み込むバッファへのポインタ
89 								//	戻り値	: 読み込んだサンプル数
90 	BOOL 	(*func_is_keyframe)( INPUT_HANDLE ih,int frame );
91 								//	キーフレームか調べる関数へのポインタ (NULLなら全てキーフレーム)
92 								//	ih		: 入力ファイルハンドル
93 								//	frame	: フレーム番号
94 								//	戻り値	: キーフレームなら成功
95 	BOOL	(*func_config)( HWND hwnd,HINSTANCE dll_hinst );
96 								//	入力設定のダイアログを要求された時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
97 								//	hwnd		: ウィンドウハンドル
98 								//	dll_hinst	: インスタンスハンドル
99 								//	戻り値		: TRUEなら成功
100 	int		reserve[16];
101 } INPUT_PLUGIN_TABLE;
102 #define	INPUT_PLUGIN_FLAG_VIDEO		1
103 #define	INPUT_PLUGIN_FLAG_AUDIO		2
104 
105 BOOL func_init( void );
106 BOOL func_exit( void );
107 INPUT_HANDLE func_open( LPSTR file );
108 BOOL func_close( INPUT_HANDLE ih );
109 BOOL func_info_get( INPUT_HANDLE ih,INPUT_INFO *iip );
110 int func_read_video( INPUT_HANDLE ih,int frame,void *buf );
111 int func_read_audio( INPUT_HANDLE ih,int start,int length,void *buf );
112 BOOL func_is_keyframe( INPUT_HANDLE ih,int frame );
113 BOOL func_config( HWND hwnd,HINSTANCE dll_hinst );
114 
115 
116