IVMRFilterConfig
COM公式ドキュメント
IVMRFilterConfig インターフェイスは、Video Mixing Renderer Filter 7 (VMR-7) の動作モードとビデオレンダリング機構を構成するために使用します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetImageCompositor メソッドは、アプリケーションが提供するイメージコンポジターをインストールします。
| lpVMRImgCompositor | IVMRImageCompositor* | in | イメージコンポジターの IVMRImageCompositor インターフェイスへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| リターンコード | 説明 |
|---|---|
| 現在ミキサーがロードされていません。 |
解説(Remarks)
このメソッドを使用して、VMR の既定のコンポジターをアプリケーションが提供するカスタムコンポジターに置き換えます。イメージコンポジターはミキサーのサブコンポーネントです。
コンポジターは、VMR がウィンドウレスモードまたはウィンドウモードのときに自動的にロードされます。VMR がレンダーレスモードのときは、IVMRFilterConfig::SetNumberOfStreams を呼び出してコンポジターをロードする必要があります。VMR は IVMRImageCompositor インターフェイスの参照カウントをすべて管理します。
SetNumberOfStreams メソッドは、混合するストリームの数を設定し、VMR にミキサーモードへ移行するよう指示します。
| dwMaxStreams | DWORD | in | VMR が混合する必要のある入力ストリームの最大数を格納するダブルワード。MAX_MIXER_STREAMS (16) を超えてはなりません。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| リターンコード | 説明 |
|---|---|
| ミキサーは既に構成されています。 | |
| 16 を超える入力ストリーム用にミキサーを構成しようとしました。 | |
| ストリームを管理するためのメモリを割り当てられませんでした。 |
解説(Remarks)
dwMaxStreams には、必要な入力ピンの数を指定します。VMR の接続後にピンを追加または削除することはできません。必要となる入力ストリームの数が事前にわからない場合は、dxMaxStreams に必要となる可能性のある最大数を設定してください。dwMaxStreams には 1 も有効な値です。この値では追加のピンは作成されませんが、VMR を「ミキサーモード」へ強制的に移行させます。そのため、このメソッドを呼び出した後は、SetRenderingMode を呼び出してモードを VMRMode_Renderless に設定することはできません。
VMR は指定された数だけの入力ピンを作成しますが、それらすべてをサポートするのに十分なビデオメモリがあるかどうかの判定は試みません。これは、この時点ではメディアタイプや矩形の寸法を知る手段がないためです。後で上流のフィルターがピンへ接続しようとしたときにメディアタイプが判明するため、VMR はそこでビデオメモリを調べ、ストリームを処理するのに十分でない場合は接続を失敗させます。
GetNumberOfStreams メソッドは、混合されている入力ストリームの数を取得します。
| pdwMaxStreams | DWORD* | out | 混合されているストリームの数を受け取るダブルワードへのポインター。これは VMR の入力ピンの数に等しくなります。 |
戻り値
SetRenderingPrefs メソッドは、ビデオレンダリングに関するさまざまなアプリケーション設定を行います。
| dwRenderFlags | DWORD | in | レンダリング設定を指定する VMRRenderPrefs 値のビットごとの OR を格納するダブルワード。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| リターンコード | 説明 |
|---|---|
| アロケーター/プレゼンターが存在しません。 | |
| dwRenderFlags が無効です。 |
解説(Remarks)
このメソッドは、アロケーター/プレゼンターの IVMRImagePresenterConfig::SetRenderingPrefs メソッドを呼び出します。(既定のアロケーター/プレゼンターは IVMRImagePresenterConfig を公開します。カスタムのアロケーター/プレゼンターも、必要であればこのインターフェイスを公開できます。) VMR-7 がまだ既定のアロケーター/プレゼンターを作成していない場合、またはアプリケーションが IVMRImagePresenterConfig をサポートしないカスタムのアロケーター/プレゼンターを提供した場合、このメソッドは VFW_E_WRONG_STATE を返します。既定のアロケーター/プレゼンターを作成するには、IVMRFilterConfig::SetRenderingMode を値 VMRMode_Windowed または VMRMode_Windowed で呼び出します。
GetRenderingPrefs メソッドは、VMR が現在使用しているレンダリング設定を取得します。
| pdwRenderFlags | DWORD* | out | 現在のレンダリング設定を示す VMRRenderPrefs 列挙型のメンバーを受け取ります。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| リターンコード | 説明 |
|---|---|
| pdwRenderingPrefs が無効です。 | |
| 現在アロケーター/プレゼンターオブジェクトがロードされていません。 |
解説(Remarks)
このメソッドは、アロケーター/プレゼンターの IVMRImagePresenterConfig::GetRenderingPrefs メソッドを呼び出します。(既定のアロケーター/プレゼンターは IVMRImagePresenterConfig を公開します。カスタムのアロケーター/プレゼンターも、必要であればこのインターフェイスを公開できます。) VMR-7 がまだ既定のアロケーター/プレゼンターを作成していない場合、またはアプリケーションが IVMRImagePresenterConfig をサポートしないカスタムのアロケーター/プレゼンターを提供した場合、このメソッドは VFW_E_WRONG_STATE を返します。既定のアロケーター/プレゼンターを作成するには、IVMRFilterConfig::SetRenderingMode を値 VMRMode_Windowed または VMRMode_Windowed で呼び出します。
SetRenderingMode メソッドは、VMR が使用するレンダリングモードを設定します。
| Mode | DWORD | in | レンダリングモードを VMRMode 値として指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| リターンコード | 説明 |
|---|---|
| 無効なレンダリングモードが指定されました。 | |
| 何らかの理由でモードを変更できません。「解説」を参照してください。 |
解説(Remarks)
VMR は既定で VMRMode_Windowed です。このメソッドは、VMR を VMRMode_Windowless または VMRMode_Renderless モードにする場合にのみ使用します。いずれかのピンが接続された後はモードを変更できず、また、ピンが接続される前であっても、ウィンドウレスまたはレンダーレスからウィンドウモードへ戻すことはできません。したがって、Mode に VMRMode_Windowed を指定しても、いかなる状況でも効果はありません。
GetRenderingMode メソッドは、VMR が現在使用しているレンダリングモードを取得します。
| pMode | DWORD* | out | 現在のレンダリングモードを示す VMRMode 値を受け取る DWORD へのポインター。 |
戻り値
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 指定が可能。#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 sptr #comfunc global IVMRFilterConfig_SetRenderingPrefs 6 int #comfunc global IVMRFilterConfig_GetRenderingPrefs 7 sptr #comfunc global IVMRFilterConfig_SetRenderingMode 8 int #comfunc global IVMRFilterConfig_GetRenderingMode 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。