//---------------------------------------------------------------------- // フィルタプラグイン ヘッダーファイル for AviUtl version 0.98 以降 // By KENくん //---------------------------------------------------------------------- // -D097d : 0.97d以降 0.98以前との互換モード // YC構造体 typedef struct { short y; // 画素(輝度)データ ( 0 〜 4096 ) short cb; // 画素(色差(青))データ ( -2048 〜 2048 ) short cr; // 画素(色差(赤))データ ( -2048 〜 2048 ) } PIXEL_YC; // 画素データは範囲外に出ていることがあります // また範囲内に収めなくてもかまいません // PIXEL構造体 typedef struct { unsigned char b,g,r; // 画素(RGB)データ (0〜255) } PIXEL; // フィルタPROC用構造体 typedef struct { int flag; // FILTER_PROC_INFO_FLAG_* PIXEL_YC *ycp_edit; // 画像データへのポインタ PIXEL_YC *ycp_temp; // テンポラリ画像領域へのポインタ // ycp_editとycp_tempは入れ替え可 int w,h; // 現在の画像のサイズ (変更可) int max_w,max_h; // 画像領域のサイズ int frame; // 現在のフレーム番号 (番号は0から) int frame_n; // 総フレーム数 int org_w,org_h; // 元の画像のサイズ // 以下、オーディオフィルタのみ有効 // オーディオ形式はPCM16bit (1サンプルは mono = 2byte ,stereo = 4byte) short *audiop; // オーディオデータへのポインタ int audio_n; // オーディオサンプルの総数 int audio_ch; // オーディオチャンネル数 // (ここまで) PIXEL *pixelp; // 現在は使用されていません // 0.97d では "DIB形式のデータへのポインタ (表示フィルタの時のみ)" void *editp; // エディットハンドル int reserved[10]; // 拡張用に予約 } FILTER_PROC_INFO; // ・フィルタのフラグ // フィールドオーダーを標準と逆に扱う (標準はボトム->トップ) #define FILTER_PROC_INFO_FLAG_INVERT_FIELD_ORDER 0x00010000 #ifndef 097d // 解除方法を反転する (インターレース解除フィルタのみ) #define FILTER_PROC_INFO_FLAG_INVERT_INTERLACE 0x00020000 // ※ インターレース解除フィルタ時はycp_editに初期画像データが入っていません。 // ※ インターレース解除フィルタ時はycp_edit,ycp_temp,w,hを変更できません。 #endif // フレームステータス構造体 typedef struct { int video; // 実際の映像データ番号 int audio; // 実際の音声データ番号 int inter; // FRAME_STATUS_INTER_* int index24fps; // 24fpsの周期 int config; // フレームの設定環境の番号 int vcm; // フレームの圧縮設定の番号 int edit_flag; // EDIT_FRAME_EDIT_FLAG_* int reserved[9]; // 拡張用に予約されてます } FRAME_STATUS; // ・フレームのインターレース // 標準 #define FRAME_STATUS_INTER_NORMAL 0 // 反転 #define FRAME_STATUS_INTER_REVERSE 1 // 奇数 #define FRAME_STATUS_INTER_ODD 2 // 偶数 #define FRAME_STATUS_INTER_EVEN 3 // 二重化 #define FRAME_STATUS_INTER_MIX 4 // 自動 #define FRAME_STATUS_INTER_AUTO 5 // ・編集フラグ // キーフレーム #define EDIT_FRAME_EDIT_FLAG_KEYFRAME 1 // マークフレーム #define EDIT_FRAME_EDIT_FLAG_MARKFRAME 2 // 優先間引きフレーム #define EDIT_FRAME_EDIT_FLAG_DELFRAME 4 // コピーフレーム #define EDIT_FRAME_EDIT_FLAG_NULLFRAME 8 // ファイルインフォメーション構造体 typedef struct { int flag; // FILE_INFO_FLAG_* LPSTR name; // 編集ファイル名 int w,h; // 元のサイズ int video_rate,video_scale; // フレームレート int audio_rate; // 音声サンプリングレート int audio_ch; // 音声チャンネル数 int reserved[8]; // 拡張用に予約 } FILE_INFO; // ・ファイルのフラグ // 映像が存在する #define FILE_INFO_FLAG_VIDEO 1 // 音声が存在する #define FILE_INFO_FLAG_AUDIO 2 // システムインフォメーション構造体 typedef struct { int flag; // SYS_INFO_FLAG_* LPSTR info; // バージョン情報 int filter_n; // 登録されてるフィルタの数 int min_w,min_h; // 編集出来る最小画像サイズ int max_w,max_h; // 編集出来る最大画像サイズ int max_frame; // 編集出来る最大フレーム数 LPSTR edit_name; // 編集ファイル名 (*) LPSTR project_name; // プロジェクトファイル名 (*) LPSTR output_name; // 出力ファイル名 (*) #ifdef 097d int reserved[8]; // 拡張用に予約 #else int vram_w,vram_h; // 編集用画像領域のサイズ ...って何? int reserved[6]; // 拡張用に予約 #endif } SYS_INFO; // (*) ファイル名が決まっていない時は何も入っていません // ・システムフラグ // 編集中 #define SYS_INFO_FLAG_EDIT 1 // VFAPI動作時 #define SYS_INFO_FLAG_VFAPI 2 // 外部関数構造体 typedef struct { void *(*get_ycp_ofs)( void *editp, int n, int ofs ); // ※出来るだけget_ycp_source_cache()の方を使用するようにしてください // 指定したフレームのAVIファイル上でのオフセット分移動した // フレームの画像データのポインタを取得 // データはフィルタ前のものです // editp : エディットハンドル // n : フレーム番号 // ofs : フレームからのオフセット // 戻り値 : 画像データへのポインタ (NULLなら失敗) // 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効 void *(*get_ycp)( void *editp, int n ); // ※出来るだけget_ycp_source_cache()の方を使用するようにしてください // 指定したフレームの画像データのポインタを取得 // データはフィルタ前のものです // editp : エディットハンドル // n : フレーム番号 // 戻り値 : 画像データへのポインタ (NULLなら失敗) // 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効 void *(*get_pixelp)( void *editp, int n ); // 指定したフレームのDIB形式(RGB24bit)の画像データのポインタを取得 // データはフィルタ前のものです // editp : エディットハンドル // n : フレーム番号 // 戻り値 : DIB形式データへのポインタ (NULLなら失敗) // 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効 int (*get_audio)( void *editp, int n, void *buf ); // 指定したフレームのオーディオデータを取得 // データはフィルタ前のものです // editp : エディットハンドル // n : フレーム番号 // buf : 格納するバッファ (NULLならサンプル数の取得のみ) // 戻り値 : 読み込んだサンプル数 BOOL (*is_editing)( void *editp ); // 現在編集中か調べます // editp : エディットハンドル // 戻り値 : TRUEなら編集中 // 編集中、とは、VFAPI 動作でも出力中でもない、という意味か? BOOL (*is_saving)( void *editp ); // 現在保存中か調べます // editp : エディットハンドル // 戻り値 : TRUEなら保存中 // 保存中、とは .auf の書き出しではなく、AVI,WAV,出力プラグインによる // 出力の最中である、ということらしい。 int (*get_frame)( void *editp ); // 現在の表示フレームを取得 // editp : エディットハンドル // 戻り値 : 現在のフレーム番号 int (*get_frame_n)( void *editp ); // 総フレーム数を取得 // editp : エディットハンドル // 戻り値 : 現在の総フレーム数 BOOL (*get_frame_size)( void *editp, int *w, int *h ); // フィルタ前のフレームのサイズを取得 // editp : エディットハンドル // w,h : 画像サイズの格納ポインタ // 戻り値 : TRUEなら成功 int (*set_frame)( void *editp, int n ); // 現在の表示フレームを変更 // editp : エディットハンドル // n : フレーム番号 // 戻り値 : 設定されたフレーム番号 int (*set_frame_n)( void *editp, int n ); // 総フレーム数を変更 // editp : エディットハンドル // n : フレーム数 // 戻り値 : 設定された総フレーム数 BOOL (*copy_frame)( void *editp, int d, int s ); // フレームを他のフレームにコピー // editp : エディットハンドル // d : コピー先フレーム番号 // s : コピー元フレーム番号 // 戻り値 : TRUEなら成功 BOOL (*copy_video)( void *editp, int d, int s ); // フレームの映像だけを他のフレームにコピー // editp : エディットハンドル // d : コピー先フレーム番号 // s : コピー元フレーム番号 // 戻り値 : TRUEなら成功 BOOL (*copy_audio)( void *editp, int d, int s ); // フレームの音声だけを他のフレームにコピー // editp : エディットハンドル // d : コピー先フレーム番号 // s : コピー元フレーム番号 // 戻り値 : TRUEなら成功 BOOL (*copy_clip)( HWND hwnd, void *pixelp, int w, int h ); // クリップボードにDIB形式(RGB24bit)の画像をコピー // hwnd : ウィンドウハンドル // pixelp : DIB形式データへのポインタ // w,h : 画像サイズ // 戻り値 : TRUEなら成功 BOOL (*paste_clip)( HWND hwnd, void *editp, int n ); // クリップボードから画像を張りつけます // hwnd : ウィンドウハンドル // editp : エディットハンドル // n : フレーム番号 // 戻り値 : TRUEなら成功 BOOL (*get_frame_status)( void *editp, int n, FRAME_STATUS *fsp ); // フレームのステータスを取得します // editp : エディットハンドル // n : フレーム番号 // fsp : フレームステータスへのポインタ // 戻り値 : TRUEなら成功 BOOL (*set_frame_status)( void *editp, int n, FRAME_STATUS *fsp ); // フレームのステータスを変更します // editp : エディットハンドル // n : フレーム番号 // fsp : フレームステータスへのポインタ // 戻り値 : TRUEなら成功 BOOL (*is_saveframe)( void *editp, int n ); // 実際に保存されるフレームか調べます // editp : エディットハンドル // n : フレーム番号 // 戻り値 : TRUEなら保存されます BOOL (*is_keyframe)( void *editp, int n ); // キーフレームかどうか調べます // editp : エディットハンドル // n : フレーム番号 // 戻り値 : TRUEならキーフレーム BOOL (*is_recompress)( void *editp, int n ); // 再圧縮が必要か調べます // editp : エディットハンドル // n : フレーム番号 // 戻り値 : TRUEなら再圧縮が必要 BOOL (*filter_window_update)( void *fp ); // 設定ウィンドウのトラックバーとチェックボックスを再描画します // fp : フィルタ構造体のポインタ // 戻り値 : TRUEなら成功 BOOL (*is_filter_window_disp)( void *fp ); // 設定ウィンドウが表示されているか調べます // fp : フィルタ構造体のポインタ // 戻り値 : TRUEなら表示されている BOOL (*get_file_info)( void *editp, FILE_INFO *fip ); // 編集ファイルの情報を取得 // editp : エディットハンドル // fip : ファイルインフォメーション構造体へのポインタ // 戻り値 : TRUEなら成功 LPSTR (*get_config_name)( void *editp, int n ); // 設定環境の名前を取得 // editp : エディットハンドル // n : 設定環境の番号 // 戻り値 : 設定環境の名前へのポインタ BOOL (*is_filter_active)( void *fp ); // フィルタが有効になっているか調べます // fp : フィルタ構造体のポインタ // 戻り値 : TRUEならフィルタ有効 BOOL (*get_pixel_filtered)( void *editp, int n, void *pixelp, int *w, int *h ) // 指定したフレームのDIB形式(RGB24bit)の画像データを取得 // データはフィルタ後のものです // editp : エディットハンドル // n : フレーム番号 // pixelp : DIB形式データを格納するポインタ // (NULLなら画像サイズだけを返します) // w,h : 画像のサイズ (NULLならDIB形式データだけを返します) // 戻り値 : TRUEなら成功 // ここで得られるデータは、BITMAPHEADERなしの PIXEL[max_w][max_h] のみらしい。 int (*get_audio_filtered)( void *editp, int n, void *buf ); // 指定したフレームのオーディオデータを取得 // データはフィルタ後のものです // editp* : エディットハンドル // n : フレーム番号 // buf : 格納するバッファ (NULLならサンプル数の取得のみ) // 戻り値 : 読み込んだサンプル数 BOOL (*get_select_frame)( void *editp, int *s, int *e ); // 選択開始終了フレームを取得 // editp : エディットハンドル // s : 選択開始フレーム // e : 選択終了フレーム // 戻り値 : TRUEなら成功 BOOL (*set_select_frame)( void *editp, int s, int e ); // 選択開始終了フレームを設定 // editp : エディットハンドル // s : 選択開始フレーム // e : 選択終了フレーム // 戻り値 : TRUEなら成功 BOOL (*rgb2yc)( PIXEL_YC *ycp, PIXEL *pixelp, int w ); // PIXELからPIXEL_YCに変換 // ycp : PIXEL_YC構造体へのポインタ // pixelp : PIXEL構造体へのポインタ // w : 構造体の数 // 戻り値 : TRUEなら成功 BOOL (*yc2rgb)( PIXEL *pixelp, PIXEL_YC *ycp, int w ); // PIXEL_YCからPIXELに変換 // pixelp : PIXEL構造体へのポインタ // ycp : PIXEL_YC構造体へのポインタ // w : 構造体の数 // 戻り値 : TRUEなら成功 BOOL (*dlg_get_load_name)( LPSTR name, LPSTR filter, LPSTR def ); // ファイルダイアログを使って読み込むファイル名を取得 // name : ファイル名を格納するポインタ // filter : ファイルフィルタ // def : デフォルトのファイル名 // 戻り値 : TRUEなら成功 FALSEならキャンセル BOOL (*dlg_get_save_name)( LPSTR name, LPSTR filter, LPSTR def ); // ファイルダイアログを使って書き込むファイル名を取得 // name : ファイル名を格納するポインタ // filter : ファイルフィルタ // def : デフォルトのファイル名 // 戻り値 : TRUEなら成功 FALSEならキャンセル int (*ini_load_int)( void *fp, LPSTR key, int n ); // INIファイルから数値を読み込む // fp : フィルタ構造体のポインタ // key : アクセス用のキーの名前 // n : デフォルトの数値 // 戻り値 : 読み込んだ数値 int (*ini_save_int)( void *fp, LPSTR key, int n ); // INIファイルに数値を書き込む // fp : フィルタ構造体のポインタ // key : アクセス用のキーの名前 // n : 書き込む数値 // 戻り値 : 書き込んだ数値 BOOL (*ini_load_str)( void *fp, LPSTR key, LPSTR str, LPSTR def ); // INIファイルから文字列を読み込む // fp : フィルタ構造体のポインタ // key : アクセス用のキーの名前 // str : 文字列を読み込むバッファ // def : デフォルトの文字列 // 戻り値 : TRUEなら成功 BOOL (*ini_save_str)( void *fp, LPSTR key, LPSTR str ); // INIファイルに文字列を書き込む // fp : フィルタ構造体のポインタ // key : アクセス用のキーの名前 // n : 書き込む文字列 // 戻り値 : TRUEなら成功 BOOL (*get_source_file_info)(void *editp, FILE_INFO *fip, int source_file_id) // 指定したファイルIDのファイルの情報を取得 // editp : エディットハンドル // fip : ファイルインフォメーション構造体へのポインタ // souce_file_id : ファイルID // 戻り値 : TRUEなら成功 BOOL (*get_source_video_number)( void *editp, int n, int *source_file_id, int *source_video_number ); // 指定したフレームのソースのファイルIDとフレーム番号を取得 // editp : エディットハンドル // n : フレーム番号 // souce_file_id : ファイルIDを格納するポインタ // souce_video_number : フレーム番号を格納するポインタ // 戻り値 : TRUEなら成功 BOOL (*get_sys_info)( void *editp,SYS_INFO *sip ); // システムの情報を取得 // editp : エディットハンドル // sip : システムインフォメーション構造体へのポインタ // 戻り値 : TRUEなら成功 void *(*get_filterp)( int filter_id ); // 指定のフィルタIDのフィルタ構造体へのポインタを取得 // filter_id : フィルタID (0〜登録されているフィルタの数-1までの値) // 戻り値 : フィルタ構造体へのポインタ (NULLなら失敗) void *(*get_ycp_filtering)( void *fp, void *editp, int n, void *reserved ); // ※出来るだけget_ycp_filtering_cache()の方を使用するようにしてください // 指定したフレームの画像データのポインタを取得 // データは自分のフィルタの直前までフィルタしたもの(*) // fp : フィルタ構造体のポインタ // editp : エディットハンドル // n : フレーム番号 // reserved : NULLを指定してください // 戻り値 : 画像データへのポインタ (NULLなら失敗) // 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効 // (*) 097d では "データはfpで指定したフィルタの直前までフィルタしたもの" // とあるが、実際の挙動がどちらなのかは不明。 int (*get_audio_filtering)( void *fp, void *editp, int n, void *buf ); // 指定したフレームのオーディオデータを取得 // データは自分のフィルタの直前までフィルタしたもの (* 上に同じ) // fp : フィルタ構造体のポインタ // editp : エディットハンドル // n : フレーム番号 // buf : 格納するバッファ (NULLならサンプル数の取得のみ) // 戻り値 : 読み込んだサンプル数 BOOL (*set_ycp_filtering_cache_size)( void *fp, int w, int h, int d, int flag ); // get_ycp_filtering_cache()のキャッシュの設定をします // 設定値が変わった時のみキャッシュ領域を再確保します // キャッシュ領域はフィルタがアクティブの時のみ確保されます // fp : フィルタ構造体のポインタ // w : キャッシュ領域の幅 // h : キャッシュ領域の高さ // d : キャッシュするフレーム数 // flag : NULLを指定してください // 戻り値 : TRUEなら成功 // どうやって使うんだかさっぱりわかりません ;_; void *(*get_ycp_filtering_cache)( void *fp, void *editp, int n ); // 指定したフレームの画像データのキャッシュポインタを取得 // set_ycp_filtering_cache_size()の設定にしたがってキャッシュされます // データは自分のフィルタの直前までフィルタしたものです // fp : フィルタ構造体のポインタ // editp : エディットハンドル // n : フレーム番号 // 戻り値 : 画像データへのキャッシュポインタ (NULLなら失敗) // 画像データポインタの内容はキャッシュから破棄されるまで有効 #ifdef 097d int reserved[2]; #else void *(*get_ycp_source_cache)( void *editp, int n, int ofs ); // 指定したフレームの画像データのポインタを取得 // データはフィルタ前のものです // editp : エディットハンドル // n : フレーム番号 // ofs : 元のAVI上でのフレームのオフセット // 戻り値 : 画像データへのポインタ (NULLなら失敗) // 画像データポインタの内容はキャッシュから破棄されるまで有効 void *(*get_disp_pixelp)( void *editp, DWORD format ); // 表示されているフレームの画像データのポインタを取得 // データはフィルタ後のものです // 表示フィルタのみ使用可能 // editp : エディットハンドル // format : 画像フォーマット( 0 = RGB24bit / 'Y''U''Y''2' = YUY2 ) // 戻り値 : 画像データへのポインタ (NULLなら失敗) // 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効 BOOL (*get_pixel_source)( void *editp, int n, void *pixelp, DWORD format ); // 指定したフレームの画像データを取得 // データはフィルタ前のものです // editp : エディットハンドル // n : フレーム番号 // pixelp : DIB形式データを格納するポインタ // format : 画像フォーマット( 0 = RGB24bit / 'Y''U''Y''2' = YUY2 ) // 戻り値 : TRUEなら成功 BOOL (*get_pixel_filtered_ex)( void *editp, int n, void *pixelp, int *w, int *h, DWORD format ); // 指定したフレームの画像データを取得 // データはフィルタ後のものです // editp : エディットハンドル // n : フレーム番号 // pixelp : DIB形式データを格納するポインタ (NULLなら画像サイズだけを返します) // w,h : 画像のサイズ (NULLならDIB形式データだけを返します) // format : 画像フォーマット( 0 = RGB24bit / 'Y''U''Y''2' = YUY2 ) // 戻り値 : TRUEなら成功 int reserved[14]; #endif } EXFUNC; // フィルタ構造体 typedef struct { int flag; // FILTER_FLAG_* int x,y; // 設定ウインドウのサイズ // (FILTER_FLAG_WINDOW_SIZEが立っている時に有効) TCHAR *name; // フィルタの名前 // 以下のリストは、長さ0のときは NULL を指定しておけばよい int track_n; // トラックバーの数 TCHAR **track_name; // トラックバーの名前リスト int *track_default; // トラックバーの初期値リスト int *track_s; // トラックバーの数値の下限リスト (NULLなら0) int *track_e; // トラックバーの数値の上限リスト (NULLなら256) int check_n; // チェックボックスの数 TCHAR **check_name; // チェックボックスの名前リスト int *check_default; // チェックボックスの初期値リスト // フィルタルーチン1 // NULL なら呼ばれない // 返り値BOOLの意味は不明。 BOOL (*func_proc)( void *fp, FILTER_PROC_INFO *fpip ); // フィルタ処理関数 BOOL (*func_init)( void *fp ); // 開始時に呼ばれる関数 BOOL (*func_exit)( void *fp ); // 終了時に呼ばれる関数 BOOL (*func_update)( void *fp ); // 自分の設定が変更されたときに呼ばれる関数 BOOL (*func_WndProc)( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, void *editp, void *fp ); // 設定ウィンドウにウィンドウメッセージが来た時に呼ばれる関数 // VFAPI動作時には呼ばれません // 通常のメッセージ以外に下記の拡張メッセージが送られます // 戻り値をTRUEにすると編集内容が更新されたとして全体が再描画されます int *track,*check; // システムで使用 // 次2つは FILTER_FLAG_EX_DATAが立っている時に有効 void *ex_data_ptr; // 拡張データ領域へのポインタ int ex_data_size; // 拡張データサイズ TCHAR *information; // フィルタ情報へのポインタ // FILTER_FLAG_(EX_)INFORMATIONが立っている時に有効 // フィルタルーチン2 BOOL (*func_save_start)( void *fp,int s,int e,void *editp ); // 出力が開始される直前に呼ばれる関数 BOOL (*func_save_end)( void *fp,void *editp ); // 出力が終了した直前に呼ばれる関数 EXFUNC *exfunc; // 外部関数テーブルへのポインタ HWND hwnd; // ウィンドウハンドル HINSTANCE dll_hinst; // DLLのインスタンスハンドル #ifdef 097d int reserved[8]; // 拡張用に予約 #else void *ex_data_def; // 拡張データの初期値データ領域へのポインタ // (NULLなら初期化されません) // フィルタルーチン3 BOOL (*func_is_saveframe)( void *fp, void *editp, int saveno, int frame, int fps, int edit_flag, int inter ); // インターレース解除フィルタで保存するフレームを決める時に呼ばれる関数 int reserved[6]; // 拡張用に予約。NULLにしてください。 #endif } FILTER; // ・フィルタのフラグ // 内部的に使用? #define FILTER_FLAG_ACTIVE 1 // フィルタを常にアクティブにします #define FILTER_FLAG_ALWAYS_ACTIVE 4 // 設定をポップアップメニューにします #define FILTER_FLAG_CONFIG_POPUP 8 // 設定をチェックボックスメニューにします #define FILTER_FLAG_CONFIG_CHECK 16 // 設定をラジオボタンメニューにします #define FILTER_FLAG_CONFIG_RADIO 32 // 拡張データを保存出来るようにします #define FILTER_FLAG_EX_DATA 1024 // フィルタのプライオリティを常に最上位にします #define FILTER_FLAG_PRIORITY_HIGHEST 2048 // フィルタのプライオリティを常に最下位にします #define FILTER_FLAG_PRIORITY_LOWEST 4096 // 設定ウィンドウをサイズ変更可能にします #define FILTER_FLAG_WINDOW_THICKFRAME 8192 // 設定ウィンドウのサイズを指定出来るようにします #define FILTER_FLAG_WINDOW_SIZE 16384 // 表示フィルタにします #define FILTER_FLAG_DISP_FILTER 32768 // 再描画をplugin側で処理するようにします #define FILTER_FLAG_REDRAW 0x20000 // フィルタの拡張情報を設定できるようにします #define FILTER_FLAG_EX_INFORMATION 0x40000 // FILTER_FLAG_EX_INFORMATION を使うようにして下さい #define FILTER_FLAG_INFORMATION 0x80000 // 設定ウィンドウを表示しないようにします #define FILTER_FLAG_NO_CONFIG 0x100000 // オーディオフィルタにします #define FILTER_FLAG_AUDIO_FILTER 0x200000 // チェックボックスをラジオボタンにします #define FILTER_FLAG_RADIO_BUTTON 0x400000 // 設定ウィンドウに水平スクロールバーを付けます #define FILTER_FLAG_WINDOW_HSCROLL 0x800000 // 設定ウィンドウに垂直スクロールバーを付けます #define FILTER_FLAG_WINDOW_VSCROLL 0x1000000 #ifndef 097 // インターレース解除フィルタにします #define FILTER_FLAG_INTERLACE_FILTER 0x4000000 // インターレース解除フィルタ内でセーブするフレームを指定します #define FILTER_FLAG_INTERLACE_SAVEFRAME 0x8000000 // この定数は宣言されていないので値不明 #endif // インポートメニューを作ります #define FILTER_FLAG_IMPORT 0x10000000 // エクスポートメニューを作ります #define FILTER_FLAG_EXPORT 0x20000000 // ・拡張イベントメッセージ // 各フィルタ設定や編集内容が変更された直後 #define WM_FILTER_UPDATE (WM_USER+100) // 編集ファイルがオープンされた直後 #define WM_FILTER_FILE_OPEN (WM_USER+101) // 編集ファイルがクローズされる直前 #define WM_FILTER_FILE_CLOSE (WM_USER+102) // 開始直後 #define WM_FILTER_INIT (WM_USER+103) // 終了直前 #define WM_FILTER_EXIT (WM_USER+104) // 出力が開始される直前 #define WM_FILTER_SAVE_START (WM_USER+105) // 出力が終了した直後 #define WM_FILTER_SAVE_END (WM_USER+106) // インポートが選択された直後 #define WM_FILTER_IMPORT (WM_USER+107) // エクスポートが選択された直後 #define WM_FILTER_EXPORT (WM_USER+108) // フィルタの有効/無効が変更された直後 #ifndef 097d #define WM_FILTER_CHANGE_ACTIVE (WM_USER+109) // フィルタウィンドウの表示/非表示が変更された直後 #define WM_FILTER_CHANGE_WINDOW (WM_USER+110) // 自分のフィルタの設定が変更された直後 #define WM_FILTER_CHANGE_PARAM (WM_USER+111) #endif // フィルタDLL用構造体 typedef struct { int flag; int x,y; TCHAR *name; int track_n; TCHAR **track_name; int *track_default; int *track_s,*track_e; int check_n; TCHAR **check_name; int *check_default; BOOL (*func_proc)( FILTER *fp, FILTER_PROC_INFO *fpip ); BOOL (*func_init)( FILTER *fp ); BOOL (*func_exit)( FILTER *fp ); BOOL (*func_update)( FILTER *fp ); BOOL (*func_WndProc)( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, void *editp, FILTER *fp ); int *track, *check; void *ex_data_ptr; int ex_data_size; TCHAR *information; BOOL (*func_save_start)( FILTER *fp, int s, int e, void *editp ); BOOL (*func_save_end)( FILTER *fp, void *editp ); EXFUNC *exfunc; HWND hwnd; HINSTANCE dll_hinst; #ifdef 097d int reserved[8]; #else void *ex_data_def; BOOL (*func_is_saveframe)( FILTER *fp, void *editp, int saveno, int frame, int fps, int edit_flag, int inter ); int reserved[6]; #endif } FILTER_DLL; // これは何? // #define MID_FILTER_BUTTON 12004 // フィルタ本体のプロトタイプ BOOL func_proc( FILTER *fp, FILTER_PROC_INFO *fpip ); BOOL func_init( FILTER *fp ); BOOL func_exit( FILTER *fp ); BOOL func_update( FILTER *fp ); BOOL func_WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, void *editp, FILTER *fp ); BOOL func_save_start( FILTER *fp, int s, int e, void *editp ); BOOL func_save_end( FILTER *fp, void *editp ); #ifndef 097d BOOL func_is_saveframe( FILTER *fp, void *editp, int saveno, int frame, int fps, int edit_flag, int inter ); #endif