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

IMFVideoDisplayControl

COM
IIDa490b1e4-ab84-4d31-a1b2-181e03b1077a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Enhanced Video Renderer (EVR) がビデオを表示する方法を制御します。

メソッド 16

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

vtbl 3 HRESULT GetNativeVideoSize(SIZE* pszVideo, SIZE* pszARVideo)

ビデオレンダラーによる引き伸ばしが行われる前の、ビデオのサイズとアスペクト比を取得します。

pszVideoSIZE*inoutネイティブのビデオ矩形のサイズを受け取ります。このパラメーターは NULL にできます。
pszARVideoSIZE*inoutビデオのアスペクト比を受け取ります。このパラメーターは NULL にできます。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
少なくとも一方のパラメーターは非 NULL でなければなりません。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

いずれのビデオストリームにもメディアタイプが設定されていない場合、メソッドは成功しますが、すべてのパラメーターはゼロに設定されます。

pszVideo または pszARVideoNULL に設定できますが、両方を同時に設定することはできません。

vtbl 4 HRESULT GetIdealVideoSize(SIZE* pszMin, SIZE* pszMax)

パフォーマンスや画質を著しく低下させることなく Enhanced Video Renderer (EVR) が表示できるサイズの範囲を取得します。

pszMinSIZE*inout最小の理想サイズを受け取ります。このパラメーターは NULL にできます。
pszMaxSIZE*inout最大の理想サイズを受け取ります。このパラメーターは NULL にできます。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
少なくとも一方のパラメーターは非 NULL でなければなりません。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

pszMin または pszMaxNULL に設定できますが、両方を同時に設定することはできません。

vtbl 5 HRESULT SetVideoPosition(MFVideoNormalizedRect* pnrcSource, RECT* prcDest)

ビデオのソース矩形と表示先矩形を設定します。

pnrcSourceMFVideoNormalizedRect*inソース矩形を指定する MFVideoNormalizedRect 構造体へのポインター。このパラメーターは NULL にできます。NULL の場合、ソース矩形は変更されません。
prcDestRECT*in表示先矩形を指定します。このパラメーターは NULL にできます。NULL の場合、表示先矩形は変更されません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
少なくとも一方のパラメーターは非 NULL でなければなりません。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

ソース矩形は、ビデオのどの部分を表示するかを定義します。これは正規化座標で指定します。詳細については MFVideoNormalizedRect 構造体を参照してください。ビデオ画像全体を表示するには、ソース矩形を {0, 0, 1, 1} に設定します。既定のソース矩形は {0, 0, 1, 1} です。

表示先矩形は、クリッピングウィンドウ内でビデオが表示される矩形を定義します。これはウィンドウのクライアント領域を基準としたピクセル単位で指定します。ウィンドウ全体を埋めるには、表示先矩形を {0, 0, width, height} に設定します。ここで widthheight はウィンドウのクライアント領域の寸法です。既定の表示先矩形は {0, 0, 0, 0} です。

これらの矩形のうち一方だけを更新するには、もう一方のパラメーターを NULL に設定します。pnrcSource または prcDestNULL に設定できますが、両方を同時に設定することはできません。

表示先矩形 (prcDest) を設定する前に、IMFVideoDisplayControl::SetVideoWindow を呼び出してビデオウィンドウを設定する必要があります。(Media Foundation バージョンの EVR では、MFCreateVideoRendererActivate 関数でビデオウィンドウを指定することもできます。) ビデオウィンドウが指定されていない場合、SetVideoPositionE_POINTER を返します。

vtbl 6 HRESULT GetVideoPosition(MFVideoNormalizedRect* pnrcSource, RECT* prcDest)

ビデオのソース矩形と表示先矩形を取得します。

pnrcSourceMFVideoNormalizedRect*outソース矩形を受け取る MFVideoNormalizedRect 構造体へのポインター。
prcDestRECT*out現在の表示先矩形を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
1 つ以上の必須パラメーターが NULL です。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。
vtbl 7 HRESULT SetAspectRatioMode(DWORD dwAspectRatioMode)

Enhanced Video Renderer (EVR) がソースビデオのアスペクト比をどのように扱うかを指定します。

dwAspectRatioModeDWORDinMFVideoAspectRatioMode 列挙型の 1 つ以上のフラグのビットごとの OR

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
無効なフラグです。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。
vtbl 8 HRESULT GetAspectRatioMode(DWORD* pdwAspectRatioMode)

Enhanced Video Renderer (EVR) がソースビデオのアスペクト比をどのように扱うかを照会します。

pdwAspectRatioModeDWORD*outMFVideoAspectRatioMode 列挙型の 1 つ以上のフラグのビットごとの OR を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。
vtbl 9 HRESULT SetVideoWindow(HWND hwndVideo)

ビデオのクリッピングウィンドウを設定します。

hwndVideoHWNDinEnhanced Video Renderer (EVR) がビデオを描画するウィンドウのハンドル。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
hwndVideo が有効なウィンドウを指定していません。
S_FALSE
DWM のサムネイルが有効化/無効化されませんでした。

解説(Remarks)

アプリケーションが有効なウィンドウハンドルを指定してこのメソッドを呼び出さない限り、EVR はビデオを表示しません。

保護されたコンテンツの場合、このメソッドはそのウィンドウに対する Desktop Window Manager (DWM) のサムネイルプレビューを無効化することがあります。サムネイルプレビューを無効化できない場合、メソッドは S_FALSE を返します。

vtbl 10 HRESULT GetVideoWindow(HWND* phwndVideo)

ビデオのクリッピングウィンドウを取得します。

phwndVideoHWND*outEnhanced Video Renderer (EVR) がビデオを描画するウィンドウのハンドルを受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

既定のクリッピングウィンドウはありません。アプリケーションがクリッピングウィンドウを設定する必要があります。

vtbl 11 HRESULT RepaintVideo()

現在のビデオフレームを再描画します。アプリケーションが WM_PAINT メッセージを受け取るたびに、このメソッドを呼び出してください。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
EVR は現時点でフレームを再描画できません。このエラーは、EVR が全画面モードとウィンドウモードを切り替えている間に発生することがあります。呼び出し元はこのエラーを安全に無視できます。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。
vtbl 12 HRESULT GetCurrentImage(BITMAPINFOHEADER* pBih, BYTE** pDib, DWORD* pcbDib, LONGLONG* pTimeStamp)

ビデオレンダラーが現在表示している画像のコピーを取得します。

pBihBITMAPINFOHEADER*inoutビットマップの記述を受け取る BITMAPINFOHEADER 構造体へのポインター。メソッドを呼び出す前に、構造体の biSize メンバーを sizeof(BITMAPINFOHEADER) に設定してください。
pDibBYTE**outパックされた Windows デバイス非依存ビットマップ (DIB) を含むバッファーへのポインターを受け取ります。呼び出し元は CoTaskMemFree を呼び出してビットマップのメモリを解放する必要があります。
pcbDibDWORD*outpDib で返されるバッファーのサイズをバイト単位で受け取ります。
pTimeStampLONGLONG*inoutキャプチャされた画像のタイムスタンプを受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_LICENSE_INCORRECT_RIGHTS
コンテンツは保護されており、ライセンスは画像のキャプチャを許可していません。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

このメソッドはいつでも呼び出せます。ただし、このメソッドを頻繁に呼び出しすぎると、ビデオ再生のパフォーマンスが低下します。

このメソッドは、サブストリーム、アルファブレンドされたビットマップ、アスペクト比補正、背景色などをすべて含む、最終的に合成された画像のコピーを取得します。

ウィンドウモードでは、ビットマップは IMFVideoDisplayControl::SetVideoPosition で指定された表示先矩形のサイズになります。全画面モードでは、ビットマップはディスプレイのサイズになります。

vtbl 13 HRESULT SetBorderColor(COLORREF Clr)

ビデオの境界色を設定します。

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

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

既定では、ビデオウィンドウが 2 つのモニターにまたがる場合、Enhanced Video Renderer (EVR) はビデオを一方のモニターにクリップし、ウィンドウの残りの部分に境界色を描画します。(クリッピングの動作を変更するには、IMFVideoDisplayControl::SetRenderingPrefs を呼び出します。)

境界色はレターボックスには使用されません。レターボックスの色を変更するには、IMFVideoProcessor::SetBackgroundColor を呼び出します。

vtbl 14 HRESULT GetBorderColor(COLORREF* pClr)

ビデオの境界色を取得します。

pClrCOLORREF*out境界色を COLORREF 値として受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

境界色は、Enhanced Video Renderer (EVR) がビデオを描画しない領域に使用されます。

境界色はレターボックスには使用されません。レターボックスの色を取得するには、IMFVideoProcessor::GetBackgroundColor を呼び出します。

vtbl 15 HRESULT SetRenderingPrefs(DWORD dwRenderFlags)

ビデオレンダリングに関するさまざまな設定を指定します。

dwRenderFlagsDWORDinMFVideoRenderPrefs 列挙型の 0 個以上のフラグのビットごとの OR

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
無効なフラグです。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。
vtbl 16 HRESULT GetRenderingPrefs(DWORD* pdwRenderFlags)

ビデオレンダリングに関するさまざまな設定を取得します。

pdwRenderFlagsDWORD*outMFVideoRenderPrefs 列挙型の 0 個以上のフラグのビットごとの OR を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。
vtbl 17 HRESULT SetFullscreen(BOOL fFullscreen)

全画面レンダリングモードを設定または解除します。

fFullscreenBOOLinTRUE の場合、Enhanced Video Renderer (EVR) は全画面モードを使用します。FALSE の場合、EVR はアプリケーションが提供するクリッピングウィンドウにビデオを描画します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
ビデオレンダラーはシャットダウンされています。

解説(Remarks)

既定の EVR プレゼンターは、Direct3D の排他モードを使用して全画面モードを実装します。

このメソッドを使用して全画面モードに切り替える場合は、アプリケーションウィンドウを最前面ウィンドウに設定し、ウィンドウのサイズをモニター全体を覆うように変更してください。これにより、アプリケーションウィンドウがすべてのマウスクリックメッセージを受け取ることが保証されます。また、キーボードフォーカスをアプリケーションウィンドウに設定してください。全画面モードを解除する際は、ウィンドウの元のサイズと位置を復元してください。

既定では、全画面モードでもカーソルは表示されたままです。カーソルを非表示にするには、ShowCursor を呼び出します。

全画面モードへの移行および全画面モードからの移行は非同期に行われます。現在のモードを取得するには、IMFVideoDisplayControl::GetFullscreen を呼び出します。

vtbl 18 HRESULT GetFullscreen(BOOL* pfFullscreen)

Enhanced Video Renderer (EVR) が現在全画面モードであるかどうかを照会します。

pfFullscreenBOOL*outブール値を受け取ります。TRUE の場合、EVR は全画面モードです。FALSE の場合、EVR はアプリケーションが提供するクリッピングウィンドウ内にビデオを表示します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
EVR は現在、全画面モードとウィンドウモードを切り替えています。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFVideoDisplayControl "{A490B1E4-AB84-4D31-A1B2-181E03B1077A}"
#usecom global IMFVideoDisplayControl IID_IMFVideoDisplayControl "{}"
#comfunc global IMFVideoDisplayControl_GetNativeVideoSize  3 var,var
#comfunc global IMFVideoDisplayControl_GetIdealVideoSize   4 var,var
#comfunc global IMFVideoDisplayControl_SetVideoPosition    5 var,var
#comfunc global IMFVideoDisplayControl_GetVideoPosition    6 var,var
#comfunc global IMFVideoDisplayControl_SetAspectRatioMode  7 int
#comfunc global IMFVideoDisplayControl_GetAspectRatioMode  8 var
#comfunc global IMFVideoDisplayControl_SetVideoWindow      9 sptr
#comfunc global IMFVideoDisplayControl_GetVideoWindow      10 sptr
#comfunc global IMFVideoDisplayControl_RepaintVideo        11
#comfunc global IMFVideoDisplayControl_GetCurrentImage     12 var,var,var,var
#comfunc global IMFVideoDisplayControl_SetBorderColor      13 int
#comfunc global IMFVideoDisplayControl_GetBorderColor      14 var
#comfunc global IMFVideoDisplayControl_SetRenderingPrefs   15 int
#comfunc global IMFVideoDisplayControl_GetRenderingPrefs   16 var
#comfunc global IMFVideoDisplayControl_SetFullscreen       17 int
#comfunc global IMFVideoDisplayControl_GetFullscreen       18 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。