IVMRWindowlessControl9
COM公式ドキュメント
IVMRWindowlessControl9 インターフェースは、Video Mixing Renderer Filter 9(VMR-9)がコンテナウィンドウ内でビデオストリームをどのようにレンダリングするかを制御します。
解説(Remarks)
VMR-9 は、このインターフェースをウィンドウレスモードおよびレンダーレスモードでのみサポートします。ウィンドウモードでは、QueryInterface は E_NOINTERFACE を返します。詳細については、VMR Modes of Operation を参照してください。
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
メソッド 13
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetNativeVideoSize メソッドは、引き伸ばされていないビデオのサイズとアスペクト比を取得します。
| lpWidth | INT* | out | ネイティブビデオ矩形の幅を受け取るポインター。 |
| lpHeight | INT* | out | ネイティブビデオ矩形の高さを受け取るポインター。 |
| lpARWidth | INT* | out | ネイティブビデオ矩形のアスペクト比の幅を受け取るポインター。 |
| lpARHeight | INT* | out | ネイティブビデオ矩形のアスペクト比の高さを受け取るポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
VMR が上流フィルターに接続されていない場合、このメソッドは成功しますが、すべてのパラメーターはゼロに設定されます。
lpWidth が 640 で lpHeight が 480 の場合、lpARWidth は 4、lpARHeight は 3 になります。
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
GetMinIdealVideoSize メソッドは、パフォーマンスや画質の著しい低下を招くことなく VMR が表示できる最小のビデオサイズを取得します。
| lpWidth | INT* | out | 理想的な最小幅を受け取るポインター。 |
| lpHeight | INT* | out | 理想的な最小高さを受け取るポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
GetMaxIdealVideoSize メソッドは、パフォーマンスや画質の著しい低下を招くことなく VMR が表示できる最大のビデオサイズを取得します。
| lpWidth | INT* | out | 理想的な最大幅を受け取るポインター。 |
| lpHeight | INT* | out | 理想的な最大高さを受け取るポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
SetVideoPosition メソッドは、ビデオのソース矩形と宛先矩形を設定します。
| lpSRCRect | RECT* | in | ソース矩形を指定する RECT 構造体へのポインター。NULL の場合、ソース矩形は変更されません。既定のソース矩形はビデオ画像全体です。 |
| lpDSTRect | RECT* | in | 宛先矩形を指定する RECT 構造体へのポインター。NULL の場合、宛先矩形は変更されません。既定の宛先矩形は {0, 0, 0, 0} です。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
GetVideoPosition メソッドは、ビデオの表示に使用されている現在のソース矩形と宛先矩形を取得します。
| lpSRCRect | RECT* | out | 現在のソース矩形を受け取るポインター。 |
| lpDSTRect | RECT* | out | 現在の宛先矩形を受け取るポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
GetAspectRatioMode メソッドは、現在のアスペクト比表示モードを取得します。
| lpAspectRatioMode | DWORD* | out | 現在のアスペクト比モードを示す VMR9AspectRatioMode 値を受け取る DWORD へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| lpAspectRatioMode が無効です |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
SetAspectRatioMode メソッドは、現在のアスペクト比表示モードを設定します。
| AspectRatioMode | DWORD | in | アスペクト比モードを指定する VMR9AspectRatioMode 値。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
SetVideoClippingWindow メソッドは、ビデオをクリップする対象となるコンテナウィンドウを指定します。
| hwnd | HWND | in | ビデオをクリップする対象となるウィンドウを指定します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| hwnd パラメーターが NULL です。 | |
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
RepaintVideo メソッドは、現在のビデオフレームを再描画します。
| hwnd | HWND | in | 再描画を行うウィンドウのハンドルを指定します。 |
| hdc | HDC | in | ウィンドウのデバイスコンテキストへのハンドルを指定します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
DisplayModeChanged メソッドは、アプリケーションが WM_DISPLAYCHANGE メッセージを受け取ったことを VMR に通知します。
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
アプリケーションは WM_DISPLAYCHANGE ウィンドウメッセージを受け取るたびにこのメソッドを呼び出す必要がありますが、これは VMR が現在ウィンドウレスモードにある場合に限ります。
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
GetCurrentImage メソッドは、VMR が現在表示している画像のコピーを取得します。
| lpDib | BYTE** | out | DIB を受け取る BYTE へのポインターのアドレス。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
このメソッドは現在表示されている画像を返します。画像はパックされた Windows DIB の形式で返されます。画像は BITMAPINFOHEADER 構造体で始まり、パレットエントリやカラーマスクを含む場合があり、その後に画像データが続きます。
VMR が画像用のメモリを割り当て、lpDib 変数にそのポインターを返します。呼び出し側は CoTaskMemFree を呼び出してメモリを解放する必要があります。
このメソッドは、フィルターの状態(実行中、停止中、一時停止中のいずれか)にかかわらず、いつでも呼び出すことができます。ただし、このメソッドを頻繁に呼び出すとビデオ再生のパフォーマンスが低下します。
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
例
BYTE *lpDib = NULL;
hr = pWindowlessControl->GetCurrentImage(&lpDib);
if (SUCCEEDED(hr))
{
BITMAPINFOHEADER *pBMIH = (BITMAPINFOHEADER*) lpDib;
/* .... */
CoTaskMemFree(lpDib);
}
SetBorderColor メソッドは、VMR が使用する境界色を設定します。
| Clr | COLORREF | in | 色を COLORREF 値として指定します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
境界色は、宛先矩形のうちビデオを含まない領域を塗りつぶすために使用されます。通常、次の 2 つの状況で使用されます。
- ビデオが 2 つのモニターにまたがっている場合
- VMR が、指定された宛先矩形内に収まるようにビデオをレターボックス化してムービーのアスペクト比を維持しようとしている場合。SetAspectRatioMode を参照してください。
GetBorderColor メソッドは、VMR が使用している現在の境界色を取得します。
| lpClr | COLORREF* | out | 現在の境界色を受け取る COLORREF 変数へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がウィンドウレスモードではありません。 |
解説(Remarks)
Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVMRWindowlessControl9 "{8F537D09-F85E-4414-B23B-502E54C79927}" #usecom global IVMRWindowlessControl9 IID_IVMRWindowlessControl9 "{}" #comfunc global IVMRWindowlessControl9_GetNativeVideoSize 3 var,var,var,var #comfunc global IVMRWindowlessControl9_GetMinIdealVideoSize 4 var,var #comfunc global IVMRWindowlessControl9_GetMaxIdealVideoSize 5 var,var #comfunc global IVMRWindowlessControl9_SetVideoPosition 6 var,var #comfunc global IVMRWindowlessControl9_GetVideoPosition 7 var,var #comfunc global IVMRWindowlessControl9_GetAspectRatioMode 8 var #comfunc global IVMRWindowlessControl9_SetAspectRatioMode 9 int #comfunc global IVMRWindowlessControl9_SetVideoClippingWindow 10 sptr #comfunc global IVMRWindowlessControl9_RepaintVideo 11 sptr,sptr #comfunc global IVMRWindowlessControl9_DisplayModeChanged 12 #comfunc global IVMRWindowlessControl9_GetCurrentImage 13 var #comfunc global IVMRWindowlessControl9_SetBorderColor 14 int #comfunc global IVMRWindowlessControl9_GetBorderColor 15 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IVMRWindowlessControl9 "{8F537D09-F85E-4414-B23B-502E54C79927}" #usecom global IVMRWindowlessControl9 IID_IVMRWindowlessControl9 "{}" #comfunc global IVMRWindowlessControl9_GetNativeVideoSize 3 sptr,sptr,sptr,sptr #comfunc global IVMRWindowlessControl9_GetMinIdealVideoSize 4 sptr,sptr #comfunc global IVMRWindowlessControl9_GetMaxIdealVideoSize 5 sptr,sptr #comfunc global IVMRWindowlessControl9_SetVideoPosition 6 sptr,sptr #comfunc global IVMRWindowlessControl9_GetVideoPosition 7 sptr,sptr #comfunc global IVMRWindowlessControl9_GetAspectRatioMode 8 sptr #comfunc global IVMRWindowlessControl9_SetAspectRatioMode 9 int #comfunc global IVMRWindowlessControl9_SetVideoClippingWindow 10 sptr #comfunc global IVMRWindowlessControl9_RepaintVideo 11 sptr,sptr #comfunc global IVMRWindowlessControl9_DisplayModeChanged 12 #comfunc global IVMRWindowlessControl9_GetCurrentImage 13 sptr #comfunc global IVMRWindowlessControl9_SetBorderColor 14 int #comfunc global IVMRWindowlessControl9_GetBorderColor 15 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。