IVPBaseConfig
COM公式ドキュメント
IVPBaseConfig は、デコーダーやキャプチャデバイスなどのハードウェアデバイスをラップするフィルターに実装されます。ただし、そのデバイスがグラフィックスアダプターへのビデオポートを備えている場合に限ります。
解説(Remarks)
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
メソッド 13
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetConnectInfo メソッドは、VPE オブジェクトがサポートする接続に関する情報を取得します。
| pdwNumConnectInfo | DWORD* | inout | pddVPConnectInfo 配列内の DDVIDEOPORTCONNECT 構造体の数を指定する変数へのポインター。入力時には配列のサイズ(配列要素数)を指定します。出力時には、配列にコピーされた DDVIDEOPORTCONNECT 構造体の実際の数が格納されます。pddVPConnectInfo が NULL の場合、このメソッドは必要な配列サイズを返します。 |
| pddVPConnectInfo | DDVIDEOPORTCONNECT* | outoptional | 呼び出し側が確保した DDVIDEOPORTCONNECT 構造体の配列へのポインター。デバイスはこの配列に接続情報を格納します。 |
戻り値
成功した場合は S_OK を返し、それ以外の場合はエラーコードを返します。
解説(Remarks)
クライアントはまず、pddVPConnectInfo パラメーターに NULL を指定してこのメソッドを呼び出します。デバイスは pdwNumConnectInfo パラメーターに DDVIDEOPORTCONNECT 構造体の数を返します。クライアントはそのサイズの配列を確保し、pddVPConnectInfo パラメーターに配列のアドレスを渡して再度メソッドを呼び出します。デバイスは接続情報をバッファーにコピーし、pdwNumConnectInfo パラメーターにコピーした構造体の実際の数を返します。
DDVIDEOPORTCONNECT 構造体については Windows DDK に記載されています。デバイスはこのメソッドを直接 DdVideoPortGetConnectInfo 呼び出しに変換できます。
クライアントは、このメソッドが返した接続構造体のいずれかを参照するインデックス番号を指定して IVPBaseConfig::SetConnectInfo メソッドを呼び出すことで、接続情報を設定します。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
SetConnectInfo メソッドは、ビデオポートの接続パラメーターを設定します。
| dwChosenEntry | DWORD | in | ドライバーに渡す接続情報のインデックスを指定します。この値は、IVPBaseConfig::GetConnectInfo メソッドが返した配列への 0 から始まるインデックスです。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
GetVPDataInfo メソッドは、現在のビデオポートのデータ情報を取得します。
| pamvpDataInfo | AMVPDATAINFO* | inout | 呼び出し側が確保した AMVPDATAINFO 構造体へのポインター。デバイスはこの構造体にビデオポートに関する情報を格納します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
GetMaxPixelRate メソッドは、指定された幅と高さに対してデバイスが出力する最大ピクセルレートを取得します。
| pamvpSize | AMVPSIZE* | inout | 目的の幅と高さを含む AMVPSIZE 構造体へのポインター。 |
| pdwMaxPixelsPerSecond | DWORD* | inout | 最大ピクセルレート(1 秒あたりのピクセル数)を受け取る変数へのポインター。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
このメソッドは、指定されたサイズに対して見込まれる 1 秒あたりの最大ピクセル数を取得します。デバイスがそのサイズをサポートしていない場合は、サポートするレートとサイズを返します。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
InformVPInputFormats メソッドは、ビデオポートがサポートするビデオ形式をデバイスに通知します。
| dwNumFormats | DWORD | in | pDDPixelFormats パラメーターに含まれるビデオ形式の数。 |
| pDDPixelFormats | DDPIXELFORMAT* | inout | デバイスに送信するピクセル形式構造体(DDPIXELFORMAT)の配列へのポインター。 |
戻り値
解説(Remarks)
指定されたサポート対象のビデオポート形式の配列によって、デバイスが提案する形式が決まる場合があります。
DDPIXELFORMAT 構造体については Windows DDK に記載されています。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
GetVideoFormats メソッドは、ドライバーがサポートするビデオ形式を取得します。
| pdwNumFormats | DWORD* | inout | pddPixelFormats 配列内の DDPIXELFORMAT 構造体の数を指定する変数へのポインター。入力時には配列のサイズ(配列要素数)を指定します。出力時には、配列にコピーされた DDPIXELFORMAT 構造体の実際の数が格納されます。pddPixelFormat が NULL の場合、このメソッドは必要な配列サイズを返します。 |
| pddPixelFormats | DDPIXELFORMAT* | outoptional | 呼び出し側が確保した DDPIXELFORMAT 構造体の配列へのポインター。デバイスはこの配列に形式情報を格納します。 |
戻り値
成功した場合は S_OK を返し、それ以外の場合はエラーコードを返します。
解説(Remarks)
クライアントはまず、pddPixelFormats パラメーターに NULL を指定してこのメソッドを呼び出します。デバイスは pddPixelFormatso パラメーターに DDPIXELFORMAT 構造体の数を返します。クライアントはそのサイズの配列を確保し、pddPixelFormats パラメーターに配列のアドレスを渡して再度メソッドを呼び出します。デバイスは形式情報をバッファーにコピーし、pddPixelFormats パラメーターにコピーした構造体の実際の数を返します。
DDPIXELFORMAT 構造体については Windows DDK に記載されています。
クライアントは、このメソッドが返した形式構造体のいずれかを参照するインデックス番号を指定して IVPBaseConfig::SetVideoFormat メソッドを呼び出すことで、形式を設定します。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
SetVideoFormat メソッドは、ビデオ形式を設定します。
| dwChosenEntry | DWORD | in | 使用するビデオピクセル形式のインデックス(0 から始まる)を指定する値。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
ビデオ形式は IVPBaseConfig::GetVideoFormats を使用して取得します。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
SetInvertPolarity メソッドは、デバイスが使用している現在の極性を反転させます。
戻り値
HRESULT 値を返します。
解説(Remarks)
極性を反転させるとは、デコーダーまたはキャプチャデバイスに対して、偶数フィールドを奇数フィールドとして扱い、その逆も行うよう要求することを意味します。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
GetOverlaySurface メソッドは、呼び出し側がドライバーのオーバーレイサーフェスを使用すべきかどうかを問い合わせます。使用すべき場合、このメソッドはそのサーフェスへのポインターを返します。
| ppddOverlaySurface | IDirectDrawSurface** | out | IDirectDrawSurface インターフェースへのポインターのアドレス。呼び出し側がドライバーのオーバーレイサーフェスを使用すべき場合、この変数にオーバーレイサーフェス用の IDirectDrawSurface インターフェースを設定します。 |
戻り値
オーバーレイサーフェスオブジェクトが返された場合は S_OK を返します。
解説(Remarks)
Overlay Mixer は、ドライバーが Overlay Mixer にドライバーのオーバーレイサーフェスを使用させる必要があるかどうかを判断するためにこの関数を使用します。この関数が NULL を返す場合、Overlay Mixer は独自のサーフェスを確保します。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
SetDirectDrawKernelHandle メソッドは、DirectDraw オブジェクトへのカーネルモードハンドルを設定します。このハンドルにより、デバイスのミニドライバーが DirectDraw と通信できるようになります。
| dwDDKernelHandle | UINT_PTR | in | DirectDraw オブジェクトのカーネルモードハンドルを指定します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
SetVideoPortID メソッドは、使用するハードウェアビデオポートの ID を指定します。
| dwVideoPortID | DWORD | in | ビデオポート ID を指定します。この値は、Windows DDK に記載されている DDVIDEOPORTDESC 構造体の dwVideoPortID メンバーに対応します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
このメソッドは、ミニドライバーがビデオポートと直接通信できるようにするため、ミニドライバー上に DirectDraw ビデオポート ID を設定します。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
SetDDSurfaceKernelHandles メソッドは、オーバーレイサーフェスに使用する DirectDraw サーフェスのカーネルモードハンドルを指定します。
| cHandles | DWORD | in | rgDDKernelHandles 配列内のハンドルの数を指定します。 |
| rgDDKernelHandles | UINT_PTR* | inout | カーネルモードハンドルの配列のアドレス。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
このメソッドは、オーバーレイサーフェス用の DirectDraw ハンドルを設定します。付属するサーフェスは複数存在する場合があるため、配列には複数のサーフェスハンドルが含まれることがあります。
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
SetSurfaceParameters メソッドは、オーバーレイサーフェスのレイアウトをデバイスに通知します。下流のフィルター(Overlay Mixer、VBI Surface Allocator、または Video Port Manager)は、オーバーレイサーフェスを作成した後にこのメソッドを呼び出します。
| dwPitch | DWORD | in | サーフェスのストライド(ピッチとも呼ばれます)をピクセル単位で指定します。 |
| dwXOrigin | DWORD | in | 有効なデータが始まるピクセルの X 座標を指定します。 |
| dwYOrigin | DWORD | in | 有効なデータが始まるピクセルの Y 座標を指定します。 |
戻り値
解説(Remarks)
Vpconfig.h よりも前に Dvp.h と Vptype.h をインクルードしてください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVPBaseConfig "{}" #usecom global IVPBaseConfig IID_IVPBaseConfig "{}" #comfunc global IVPBaseConfig_GetConnectInfo 3 var,var #comfunc global IVPBaseConfig_SetConnectInfo 4 int #comfunc global IVPBaseConfig_GetVPDataInfo 5 var #comfunc global IVPBaseConfig_GetMaxPixelRate 6 var,var #comfunc global IVPBaseConfig_InformVPInputFormats 7 int,var #comfunc global IVPBaseConfig_GetVideoFormats 8 var,var #comfunc global IVPBaseConfig_SetVideoFormat 9 int #comfunc global IVPBaseConfig_SetInvertPolarity 10 #comfunc global IVPBaseConfig_GetOverlaySurface 11 sptr #comfunc global IVPBaseConfig_SetDirectDrawKernelHandle 12 sptr #comfunc global IVPBaseConfig_SetVideoPortID 13 int #comfunc global IVPBaseConfig_SetDDSurfaceKernelHandles 14 int,var #comfunc global IVPBaseConfig_SetSurfaceParameters 15 int,int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IVPBaseConfig "{}" #usecom global IVPBaseConfig IID_IVPBaseConfig "{}" #comfunc global IVPBaseConfig_GetConnectInfo 3 sptr,sptr #comfunc global IVPBaseConfig_SetConnectInfo 4 int #comfunc global IVPBaseConfig_GetVPDataInfo 5 sptr #comfunc global IVPBaseConfig_GetMaxPixelRate 6 sptr,sptr #comfunc global IVPBaseConfig_InformVPInputFormats 7 int,sptr #comfunc global IVPBaseConfig_GetVideoFormats 8 sptr,sptr #comfunc global IVPBaseConfig_SetVideoFormat 9 int #comfunc global IVPBaseConfig_SetInvertPolarity 10 #comfunc global IVPBaseConfig_GetOverlaySurface 11 sptr #comfunc global IVPBaseConfig_SetDirectDrawKernelHandle 12 sptr #comfunc global IVPBaseConfig_SetVideoPortID 13 int #comfunc global IVPBaseConfig_SetDDSurfaceKernelHandles 14 int,sptr #comfunc global IVPBaseConfig_SetSurfaceParameters 15 int,int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。