IVMRFilterConfig9
COM公式ドキュメント
IVMRFilterConfig9 インターフェイスは、Video Mixing Renderer Filter 9 によって実装されます。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetImageCompositor メソッドは、アプリケーションが提供するイメージコンポジターオブジェクトをインストールします。
| lpVMRImgCompositor | IVMRImageCompositor9* | in | アプリケーションが提供するイメージコンポジターオブジェクトへのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| VMR フィルターのピンが接続されている場合、コンポジターを変更できません。 | |
| NULL ポインターです。 | |
| メソッドは成功しました。 | |
| VMR がミキシングモードではありません。 |
解説(Remarks)
このメソッドを使用して、VMR の既定のコンポジターを、アプリケーションが提供するカスタムコンポジターに置き換えます。イメージコンポジターはミキサーのサブコンポーネントです。コンポジターを指定する前に、IVMRFilterConfig9::SetNumberOfStreams の呼び出しによってミキサーを読み込んでおく必要があります。
VMR は IVMRImageCompositor9 インターフェイスのすべての参照カウントを管理します。
SetNumberOfStreams メソッドは、ミキシングするストリームの数を設定し、VMR にミキサーモードへ移行するよう指示します。
| dwMaxStreams | DWORD | in | VMR がミキシングする必要のある入力ストリームの最大数を格納したダブルワード。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ミキサーは既に構成されています。 | |
| 16 を超える入力ストリーム用にミキサーを構成しようとしました。 | |
| ストリームを管理するためのメモリを割り当てられませんでした。 |
解説(Remarks)
dwMaxStreams は、必要な入力ピンの数と等しくする必要があります。VMR が接続された後は、ピンを追加または削除できません。必要な入力ストリームの数が事前にわからない場合は、dxMaxStreams に必要となる可能性のある最大数を設定します。dwMaxStreams には 1 という値も有効です。この値では追加のピンは作成されませんが、VMR を強制的に「ミキサーモード」へ移行させます。
VMR は、それらすべてをサポートするのに十分なビデオメモリがあるかどうかを判断しようとせずに、指定された数だけ入力ピンを作成します。これは、この時点ではメディアタイプや矩形の寸法を知る方法がないためです。後で、上流のフィルターがピンへ接続しようとしたときに、その時点でメディアタイプが判明し、VMR はビデオメモリを調べて、ストリームを処理するのに十分なメモリがない場合は接続を失敗させます。
GetNumberOfStreams メソッドは、ミキシングされている入力ストリームの数を取得します。
| pdwMaxStreams | DWORD* | out | ミキシングされているストリームの数を受け取ります。これは VMR の入力ピンの数と等しくなります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| PdwMaxStreams が無効です |
SetRenderingPrefs メソッドは、ビデオレンダリングに関連するさまざまなアプリケーション設定を設定します。
| dwRenderFlags | DWORD | in | レンダリング設定を指定する VMR9RenderPrefs 値のビット単位の OR を格納したダブルワード。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| アロケーター/プレゼンターが存在しません。 | |
| dwRenderFlags が無効です。 |
解説(Remarks)
このメソッドは、アロケーター/プレゼンターの IVMRImagePresenterConfig9::SetRenderingPrefs メソッドを呼び出します。(既定のアロケーター/プレゼンターは IVMRImagePresenterConfig9 を公開します。カスタムのアロケーター/プレゼンターも、必要であればこのインターフェイスを公開できます。) VMR-9 がまだ既定のアロケーター/プレゼンターを作成していない場合、またはアプリケーションが IVMRImagePresenterConfig9 をサポートしないカスタムのアロケーター/プレゼンターを提供した場合、このメソッドは VFW_E_WRONG_STATE を返します。既定のアロケーター/プレゼンターを作成するには、IVMRFilterConfig9::SetRenderingMode を値 VMR9Mode_Windowed または VMR9Mode_Windowed で呼び出します。
GetRenderingPrefs メソッドは、VMR-9 が現在使用しているレンダリング設定のセットを取得します。
| pdwRenderFlags | DWORD* | out | 現在のレンダリング設定を示す VMR9RenderPrefs 値を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| VMR がアロケーター/プレゼンターを作成していないか、アロケーター/プレゼンターが IVMRImagePresenterConfig9 インターフェイスを実装していません。 |
解説(Remarks)
アロケーター/プレゼンターが IVMRImagePresenterConfig9 インターフェイスを実装している場合、このメソッドはアロケーター/プレゼンターの IVMRImagePresenterConfig9::GetRenderingPrefs メソッドを呼び出します。
既定のアロケーター/プレゼンターは IVMRImagePresenterConfig9 を実装します。カスタムのアロケーター/プレゼンターも、必要であればこのインターフェイスを実装できます。
VMR-9 がまだアロケーター/プレゼンターを作成していない場合、またはカスタムのアロケーター/プレゼンターが IVMRImagePresenterConfig9 をサポートしていない場合、このメソッドは VFW_E_WRONG_STATE を返します。既定のアロケーター/プレゼンターを作成するには、IVMRFilterConfig9::SetRenderingMode を値 VMR9Mode_Windowed または VMR9Mode_Windowless で呼び出します。
SetRenderingMode メソッドは、VMR が使用するレンダリングモードを設定します。
| Mode | DWORD | in | レンダリングモードを VMR9Mode 値として指定します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効なレンダリングモードが指定されました。 | |
| 何らかの理由でモードを変更できません。「解説」を参照してください。 |
解説(Remarks)
VMR は既定でウィンドウモード (VMR9Mode_Windowed) になっています。このメソッドを使用して、VMR をウィンドウレスモード (VMR9Mode_Windowless) またはレンダーレスモード (VMR9Mode_Renderless) にします。
いずれかのピンが接続された後は、モードを変更できません。また、ピンが接続される前であっても、ウィンドウレスモードまたはレンダーレスモードからウィンドウモードへ戻すことはできません。したがって、Mode パラメーターに VMR9Mode_Windowed を指定しても、いかなる状況でも効果はありません。
GetRenderingMode メソッドは、VMR が現在使用しているレンダリングモードを取得します。
| pMode | DWORD* | out | VMR9Mode 列挙体のメンバーを受け取ります。 |
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVMRFilterConfig9 "{5A804648-4F66-4867-9C43-4F5C822CF1B8}" #usecom global IVMRFilterConfig9 IID_IVMRFilterConfig9 "{}" #comfunc global IVMRFilterConfig9_SetImageCompositor 3 sptr #comfunc global IVMRFilterConfig9_SetNumberOfStreams 4 int #comfunc global IVMRFilterConfig9_GetNumberOfStreams 5 var #comfunc global IVMRFilterConfig9_SetRenderingPrefs 6 int #comfunc global IVMRFilterConfig9_GetRenderingPrefs 7 var #comfunc global IVMRFilterConfig9_SetRenderingMode 8 int #comfunc global IVMRFilterConfig9_GetRenderingMode 9 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IVMRFilterConfig9 "{5A804648-4F66-4867-9C43-4F5C822CF1B8}" #usecom global IVMRFilterConfig9 IID_IVMRFilterConfig9 "{}" #comfunc global IVMRFilterConfig9_SetImageCompositor 3 sptr #comfunc global IVMRFilterConfig9_SetNumberOfStreams 4 int #comfunc global IVMRFilterConfig9_GetNumberOfStreams 5 sptr #comfunc global IVMRFilterConfig9_SetRenderingPrefs 6 int #comfunc global IVMRFilterConfig9_GetRenderingPrefs 7 sptr #comfunc global IVMRFilterConfig9_SetRenderingMode 8 int #comfunc global IVMRFilterConfig9_GetRenderingMode 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。