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

IVMRFilterConfig

COM
IID9e5530c5-7034-48b4-bb46-0b8a6efc8e36継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVMRFilterConfig インターフェイスは、Video Mixing Renderer Filter 7 (VMR-7) の動作モードとビデオレンダリング機構を構成するために使用します。

メソッド 7

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

vtbl 3 HRESULT SetImageCompositor(IVMRImageCompositor* lpVMRImgCompositor)

SetImageCompositor メソッドは、アプリケーションが提供するイメージコンポジターをインストールします。

lpVMRImgCompositorIVMRImageCompositor*inイメージコンポジターの IVMRImageCompositor インターフェイスへのポインター。

戻り値

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

リターンコード 説明
VFW_E_WRONG_STATE
現在ミキサーがロードされていません。

解説(Remarks)

このメソッドを使用して、VMR の既定のコンポジターをアプリケーションが提供するカスタムコンポジターに置き換えます。イメージコンポジターはミキサーのサブコンポーネントです。

コンポジターは、VMR がウィンドウレスモードまたはウィンドウモードのときに自動的にロードされます。VMR がレンダーレスモードのときは、IVMRFilterConfig::SetNumberOfStreams を呼び出してコンポジターをロードする必要があります。VMR は IVMRImageCompositor インターフェイスの参照カウントをすべて管理します。

vtbl 4 HRESULT SetNumberOfStreams(DWORD dwMaxStreams)

SetNumberOfStreams メソッドは、混合するストリームの数を設定し、VMR にミキサーモードへ移行するよう指示します。

dwMaxStreamsDWORDinVMR が混合する必要のある入力ストリームの最大数を格納するダブルワード。MAX_MIXER_STREAMS (16) を超えてはなりません。

戻り値

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

リターンコード 説明
E_FAIL
ミキサーは既に構成されています。
E_INVALIDARG
16 を超える入力ストリーム用にミキサーを構成しようとしました。
E_OUTOFMEMORY
ストリームを管理するためのメモリを割り当てられませんでした。

解説(Remarks)

dwMaxStreams には、必要な入力ピンの数を指定します。VMR の接続後にピンを追加または削除することはできません。必要となる入力ストリームの数が事前にわからない場合は、dxMaxStreams に必要となる可能性のある最大数を設定してください。dwMaxStreams には 1 も有効な値です。この値では追加のピンは作成されませんが、VMR を「ミキサーモード」へ強制的に移行させます。そのため、このメソッドを呼び出した後は、SetRenderingMode を呼び出してモードを VMRMode_Renderless に設定することはできません。

VMR は指定された数だけの入力ピンを作成しますが、それらすべてをサポートするのに十分なビデオメモリがあるかどうかの判定は試みません。これは、この時点ではメディアタイプや矩形の寸法を知る手段がないためです。後で上流のフィルターがピンへ接続しようとしたときにメディアタイプが判明するため、VMR はそこでビデオメモリを調べ、ストリームを処理するのに十分でない場合は接続を失敗させます。

注意 VMR は複数のストリームをサポートしますが、それらはすべて単一のクロックを共有するため、あるストリームを他のストリームとは独立してシークすることはできません。入力ストリームを独立してシークする必要がある場合は、別の手法を使用する必要があります。詳細については VMRMulti サンプルを参照してください。
vtbl 5 HRESULT GetNumberOfStreams(DWORD* pdwMaxStreams)

GetNumberOfStreams メソッドは、混合されている入力ストリームの数を取得します。

pdwMaxStreamsDWORD*out混合されているストリームの数を受け取るダブルワードへのポインター。これは VMR の入力ピンの数に等しくなります。

戻り値

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

リターンコード 説明
E_POINTER
pdwMaxStreams が無効です。
vtbl 6 HRESULT SetRenderingPrefs(DWORD dwRenderFlags)

SetRenderingPrefs メソッドは、ビデオレンダリングに関するさまざまなアプリケーション設定を行います。

dwRenderFlagsDWORDinレンダリング設定を指定する VMRRenderPrefs 値のビットごとの OR を格納するダブルワード。

戻り値

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

リターンコード 説明
VFW_E_WRONG_STATE
アロケーター/プレゼンターが存在しません。
E_INVALIDARG
dwRenderFlags が無効です。

解説(Remarks)

このメソッドは、アロケーター/プレゼンターの IVMRImagePresenterConfig::SetRenderingPrefs メソッドを呼び出します。(既定のアロケーター/プレゼンターは IVMRImagePresenterConfig を公開します。カスタムのアロケーター/プレゼンターも、必要であればこのインターフェイスを公開できます。) VMR-7 がまだ既定のアロケーター/プレゼンターを作成していない場合、またはアプリケーションが IVMRImagePresenterConfig をサポートしないカスタムのアロケーター/プレゼンターを提供した場合、このメソッドは VFW_E_WRONG_STATE を返します。既定のアロケーター/プレゼンターを作成するには、IVMRFilterConfig::SetRenderingMode を値 VMRMode_Windowed または VMRMode_Windowed で呼び出します。

vtbl 7 HRESULT GetRenderingPrefs(DWORD* pdwRenderFlags)

GetRenderingPrefs メソッドは、VMR が現在使用しているレンダリング設定を取得します。

pdwRenderFlagsDWORD*out現在のレンダリング設定を示す VMRRenderPrefs 列挙型のメンバーを受け取ります。

戻り値

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

リターンコード 説明
E_POINTER
pdwRenderingPrefs が無効です。
VFW_E_WRONG_STATE
現在アロケーター/プレゼンターオブジェクトがロードされていません。

解説(Remarks)

このメソッドは、アロケーター/プレゼンターの IVMRImagePresenterConfig::GetRenderingPrefs メソッドを呼び出します。(既定のアロケーター/プレゼンターは IVMRImagePresenterConfig を公開します。カスタムのアロケーター/プレゼンターも、必要であればこのインターフェイスを公開できます。) VMR-7 がまだ既定のアロケーター/プレゼンターを作成していない場合、またはアプリケーションが IVMRImagePresenterConfig をサポートしないカスタムのアロケーター/プレゼンターを提供した場合、このメソッドは VFW_E_WRONG_STATE を返します。既定のアロケーター/プレゼンターを作成するには、IVMRFilterConfig::SetRenderingMode を値 VMRMode_Windowed または VMRMode_Windowed で呼び出します。

vtbl 8 HRESULT SetRenderingMode(DWORD Mode)

SetRenderingMode メソッドは、VMR が使用するレンダリングモードを設定します。

ModeDWORDinレンダリングモードを VMRMode 値として指定します。

戻り値

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

リターンコード 説明
E_INVALIDARG
無効なレンダリングモードが指定されました。
VFW_E_WRONG_STATE
何らかの理由でモードを変更できません。「解説」を参照してください。

解説(Remarks)

VMR は既定で VMRMode_Windowed です。このメソッドは、VMR を VMRMode_Windowless または VMRMode_Renderless モードにする場合にのみ使用します。いずれかのピンが接続された後はモードを変更できず、また、ピンが接続される前であっても、ウィンドウレスまたはレンダーレスからウィンドウモードへ戻すことはできません。したがって、ModeVMRMode_Windowed を指定しても、いかなる状況でも効果はありません。

vtbl 9 HRESULT GetRenderingMode(DWORD* pMode)

GetRenderingMode メソッドは、VMR が現在使用しているレンダリングモードを取得します。

pModeDWORD*out現在のレンダリングモードを示す VMRMode 値を受け取る DWORD へのポインター。

戻り値

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

リターンコード 説明
E_POINTER
pMode が無効です。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVMRFilterConfig "{9E5530C5-7034-48B4-BB46-0B8A6EFC8E36}"
#usecom global IVMRFilterConfig IID_IVMRFilterConfig "{}"
#comfunc global IVMRFilterConfig_SetImageCompositor  3 sptr
#comfunc global IVMRFilterConfig_SetNumberOfStreams  4 int
#comfunc global IVMRFilterConfig_GetNumberOfStreams  5 var
#comfunc global IVMRFilterConfig_SetRenderingPrefs   6 int
#comfunc global IVMRFilterConfig_GetRenderingPrefs   7 var
#comfunc global IVMRFilterConfig_SetRenderingMode    8 int
#comfunc global IVMRFilterConfig_GetRenderingMode    9 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。