Win32 API 日本語リファレンス
ホームMedia.DirectShow › IVMRWindowlessControl9

IVMRWindowlessControl9

COM
IID8f537d09-f85e-4414-b23b-502e54c79927継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVMRWindowlessControl9 インターフェースは、Video Mixing Renderer Filter 9(VMR-9)がコンテナウィンドウ内でビデオストリームをどのようにレンダリングするかを制御します。

解説(Remarks)

VMR-9 は、このインターフェースをウィンドウレスモードおよびレンダーレスモードでのみサポートします。ウィンドウモードでは、QueryInterfaceE_NOINTERFACE を返します。詳細については、VMR Modes of Operation を参照してください。

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

メソッド 13

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetNativeVideoSize(INT* lpWidth, INT* lpHeight, INT* lpARWidth, INT* lpARHeight)

GetNativeVideoSize メソッドは、引き伸ばされていないビデオのサイズとアスペクト比を取得します。

lpWidthINT*outネイティブビデオ矩形の幅を受け取るポインター。
lpHeightINT*outネイティブビデオ矩形の高さを受け取るポインター。
lpARWidthINT*outネイティブビデオ矩形のアスペクト比の幅を受け取るポインター。
lpARHeightINT*outネイティブビデオ矩形のアスペクト比の高さを受け取るポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

VMR が上流フィルターに接続されていない場合、このメソッドは成功しますが、すべてのパラメーターはゼロに設定されます。

lpWidth が 640 で lpHeight が 480 の場合、lpARWidth は 4、lpARHeight は 3 になります。

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 4 HRESULT GetMinIdealVideoSize(INT* lpWidth, INT* lpHeight)

GetMinIdealVideoSize メソッドは、パフォーマンスや画質の著しい低下を招くことなく VMR が表示できる最小のビデオサイズを取得します。

lpWidthINT*out理想的な最小幅を受け取るポインター。
lpHeightINT*out理想的な最小高さを受け取るポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 5 HRESULT GetMaxIdealVideoSize(INT* lpWidth, INT* lpHeight)

GetMaxIdealVideoSize メソッドは、パフォーマンスや画質の著しい低下を招くことなく VMR が表示できる最大のビデオサイズを取得します。

lpWidthINT*out理想的な最大幅を受け取るポインター。
lpHeightINT*out理想的な最大高さを受け取るポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 6 HRESULT SetVideoPosition(RECT* lpSRCRect, RECT* lpDSTRect)

SetVideoPosition メソッドは、ビデオのソース矩形と宛先矩形を設定します。

lpSRCRectRECT*inソース矩形を指定する RECT 構造体へのポインター。NULL の場合、ソース矩形は変更されません。既定のソース矩形はビデオ画像全体です。
lpDSTRectRECT*in宛先矩形を指定する RECT 構造体へのポインター。NULL の場合、宛先矩形は変更されません。既定の宛先矩形は {0, 0, 0, 0} です。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 7 HRESULT GetVideoPosition(RECT* lpSRCRect, RECT* lpDSTRect)

GetVideoPosition メソッドは、ビデオの表示に使用されている現在のソース矩形と宛先矩形を取得します。

lpSRCRectRECT*out現在のソース矩形を受け取るポインター。
lpDSTRectRECT*out現在の宛先矩形を受け取るポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 8 HRESULT GetAspectRatioMode(DWORD* lpAspectRatioMode)

GetAspectRatioMode メソッドは、現在のアスペクト比表示モードを取得します。

lpAspectRatioModeDWORD*out現在のアスペクト比モードを示す VMR9AspectRatioMode 値を受け取る DWORD へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
lpAspectRatioMode が無効です

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 9 HRESULT SetAspectRatioMode(DWORD AspectRatioMode)

SetAspectRatioMode メソッドは、現在のアスペクト比表示モードを設定します。

AspectRatioModeDWORDinアスペクト比モードを指定する VMR9AspectRatioMode 値。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 10 HRESULT SetVideoClippingWindow(HWND hwnd)

SetVideoClippingWindow メソッドは、ビデオをクリップする対象となるコンテナウィンドウを指定します。

hwndHWNDinビデオをクリップする対象となるウィンドウを指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
E_INVALIDARG
hwnd パラメーターが NULL です。
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 11 HRESULT RepaintVideo(HWND hwnd, HDC hdc)

RepaintVideo メソッドは、現在のビデオフレームを再描画します。

hwndHWNDin再描画を行うウィンドウのハンドルを指定します。
hdcHDCinウィンドウのデバイスコンテキストへのハンドルを指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 12 HRESULT DisplayModeChanged()

DisplayModeChanged メソッドは、アプリケーションが WM_DISPLAYCHANGE メッセージを受け取ったことを VMR に通知します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

アプリケーションは WM_DISPLAYCHANGE ウィンドウメッセージを受け取るたびにこのメソッドを呼び出す必要がありますが、これは VMR が現在ウィンドウレスモードにある場合に限ります。

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

vtbl 13 HRESULT GetCurrentImage(BYTE** lpDib)

GetCurrentImage メソッドは、VMR が現在表示している画像のコピーを取得します。

lpDibBYTE**outDIB を受け取る BYTE へのポインターのアドレス。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
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);
}

vtbl 14 HRESULT SetBorderColor(COLORREF Clr)

SetBorderColor メソッドは、VMR が使用する境界色を設定します。

ClrCOLORREFin色を COLORREF 値として指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

境界色は、宛先矩形のうちビデオを含まない領域を塗りつぶすために使用されます。通常、次の 2 つの状況で使用されます。

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。
vtbl 15 HRESULT GetBorderColor(COLORREF* lpClr)

GetBorderColor メソッドは、VMR が使用している現在の境界色を取得します。

lpClrCOLORREF*out現在の境界色を受け取る COLORREF 変数へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

Vmr9.h より前に DShow.h と D3d9.h をインクルードしてください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。