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

IVMRWindowlessControl

COM
IID0eb1088c-4dcd-46f0-878f-39dae86a51b7継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

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

メソッド 15

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ネイティブのビデオ矩形のアスペクト比の高さを受け取るポインタ。

戻り値

メソッドが成功した場合、S_OK を返します。4 つの入力パラメータがすべて NULL の場合は E_POINTER を返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

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

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

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

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

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

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 5 HRESULT GetMaxIdealVideoSize(INT* lpWidth, INT* lpHeight)

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

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

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 6 HRESULT SetVideoPosition(RECT* lpSRCRect, RECT* lpDSTRect)

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

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

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 7 HRESULT GetVideoPosition(RECT* lpSRCRect, RECT* lpDSTRect)

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

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

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 8 HRESULT GetAspectRatioMode(DWORD* lpAspectRatioMode)

GetAspectRatioMode メソッドは、VMR がソースビデオのアスペクト比を保持するかどうかを照会します。(IVMRWindowlessControl.GetAspectRatioMode)

lpAspectRatioModeDWORD*outアスペクト比モードを示す VMR_ASPECT_RATIO_MODE 値を受け取る変数へのポインタ。

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
E_POINTER
NULL ポインタ引数
S_OK
成功
vtbl 9 HRESULT SetAspectRatioMode(DWORD AspectRatioMode)

SetAspectRatioMode メソッドは、VMR がソースビデオのアスペクト比を保持するかどうかを指定します。(IVMRWindowlessControl.SetAspectRatioMode)

AspectRatioModeDWORDinVMR_ASPECT_RATIO_MODE 列挙型のメンバーを指定します。

戻り値

HRESULT 値を返します。取り得る値には以下が含まれます。

リターンコード 説明
E_INVALIDARG
無効な引数
S_OK
成功
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 10 HRESULT SetVideoClippingWindow(HWND hwnd)

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

hwndHWNDinビデオのクリッピング先となるウィンドウを指定します。

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 11 HRESULT RepaintVideo(HWND hwnd, HDC hdc)

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

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

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 12 HRESULT DisplayModeChanged()

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

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

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

vtbl 13 HRESULT GetCurrentImage(BYTE** lpDib)

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

lpDibBYTE**outBYTE 配列へのポインタのアドレス。

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

このメソッドは現在表示されている画像を返します。画像はパックされた Windows DIB の形式で返されます。画像は BITMAPINFOHEADER 構造体で始まり、場合によってはパレットエントリやカラーマスクを含み、その後に画像データが続きます。

VMR が画像用のメモリを割り当て、そのポインタを lpDib 変数で返します。呼び出し元は CoTaskMemFree を呼び出してメモリを解放する必要があります。

このメソッドは、フィルターが実行中、停止中、一時停止中のいずれの状態であっても、いつでも呼び出すことができます。ただし、このメソッドを頻繁に呼び出すとビデオ再生のパフォーマンスが低下します。

C++
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境界色を指定します。

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

境界色は、宛先矩形のうちビデオを含まない領域を塗りつぶすために使用される色です。通常、次の 2 つのケースで使用されます。(1) ビデオが 2 つのモニターにまたがる場合、および (2) VMR が指定された宛先矩形に収まるようにビデオをレターボックス表示することでムービーのアスペクト比を維持しようとする場合です。IVMRWindowlessControl::SetAspectRatioMode メソッドを参照してください。

vtbl 15 HRESULT GetBorderColor(COLORREF* lpClr)

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

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

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
vtbl 16 HRESULT SetColorKey(COLORREF Clr)

SetColorKey メソッドは、VMR が使用するソースカラーキー値を設定します。

ClrCOLORREFinソースカラーキーを指定します。

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。

解説(Remarks)

カラーキーの制御は、VMR がオーバーレイサーフェスを使用している場合にのみ意味を持ちます。

vtbl 17 HRESULT GetColorKey(COLORREF* lpClr)

GetColorKey メソッドは、VMR が使用している現在のソースカラーキー値を取得します。

lpClrCOLORREF*out現在のカラーキー値を受け取る COLORREF 変数へのポインタ。

戻り値

メソッドが成功した場合、S_OK を返します。失敗した場合はエラーコードを返します。

リターンコード 説明
VFW_E_WRONG_STATE
VMR がウィンドウレスモードではありません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVMRWindowlessControl "{0EB1088C-4DCD-46F0-878F-39DAE86A51B7}"
#usecom global IVMRWindowlessControl IID_IVMRWindowlessControl "{}"
#comfunc global IVMRWindowlessControl_GetNativeVideoSize      3 var,var,var,var
#comfunc global IVMRWindowlessControl_GetMinIdealVideoSize    4 var,var
#comfunc global IVMRWindowlessControl_GetMaxIdealVideoSize    5 var,var
#comfunc global IVMRWindowlessControl_SetVideoPosition        6 var,var
#comfunc global IVMRWindowlessControl_GetVideoPosition        7 var,var
#comfunc global IVMRWindowlessControl_GetAspectRatioMode      8 var
#comfunc global IVMRWindowlessControl_SetAspectRatioMode      9 int
#comfunc global IVMRWindowlessControl_SetVideoClippingWindow  10 sptr
#comfunc global IVMRWindowlessControl_RepaintVideo            11 sptr,sptr
#comfunc global IVMRWindowlessControl_DisplayModeChanged      12
#comfunc global IVMRWindowlessControl_GetCurrentImage         13 var
#comfunc global IVMRWindowlessControl_SetBorderColor          14 int
#comfunc global IVMRWindowlessControl_GetBorderColor          15 var
#comfunc global IVMRWindowlessControl_SetColorKey             16 int
#comfunc global IVMRWindowlessControl_GetColorKey             17 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。