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

IVMRFilterConfig9

COM
IID5a804648-4f66-4867-9c43-4f5c822cf1b8継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVMRFilterConfig9 インターフェイスは、Video Mixing Renderer Filter 9 によって実装されます。

メソッド 7

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

vtbl 3 HRESULT SetImageCompositor(IVMRImageCompositor9* lpVMRImgCompositor)

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

lpVMRImgCompositorIVMRImageCompositor9*inアプリケーションが提供するイメージコンポジターオブジェクトへのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。

リターンコード 説明
E_FAIL
VMR フィルターのピンが接続されている場合、コンポジターを変更できません。
E_POINTER
NULL ポインターです。
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がミキシングモードではありません。

解説(Remarks)

このメソッドを使用して、VMR の既定のコンポジターを、アプリケーションが提供するカスタムコンポジターに置き換えます。イメージコンポジターはミキサーのサブコンポーネントです。コンポジターを指定する前に、IVMRFilterConfig9::SetNumberOfStreams の呼び出しによってミキサーを読み込んでおく必要があります。

VMR は IVMRImageCompositor9 インターフェイスのすべての参照カウントを管理します。

vtbl 4 HRESULT SetNumberOfStreams(DWORD dwMaxStreams)

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

dwMaxStreamsDWORDinVMR がミキシングする必要のある入力ストリームの最大数を格納したダブルワード。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。

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

解説(Remarks)

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

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

VMR は複数のストリームをサポートしますが、それらはすべて単一のクロックを共有するため、あるストリームを他のストリームから独立してシークすることはできません。入力ストリームを個別にシークする必要がある場合は、別の手法を使用する必要があります。
vtbl 5 HRESULT GetNumberOfStreams(DWORD* pdwMaxStreams)

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

pdwMaxStreamsDWORD*outミキシングされているストリームの数を受け取ります。これは VMR の入力ピンの数と等しくなります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。

リターンコード 説明
S_OK
メソッドは成功しました。
E_POINTER
PdwMaxStreams が無効です
vtbl 6 HRESULT SetRenderingPrefs(DWORD dwRenderFlags)

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

dwRenderFlagsDWORDinレンダリング設定を指定する VMR9RenderPrefs 値のビット単位の OR を格納したダブルワード。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。

リターンコード 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
アロケーター/プレゼンターが存在しません。
E_INVALIDARG
dwRenderFlags が無効です。

解説(Remarks)

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

vtbl 7 HRESULT GetRenderingPrefs(DWORD* pdwRenderFlags)

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

pdwRenderFlagsDWORD*out現在のレンダリング設定を示す VMR9RenderPrefs 値を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。

リターンコード 説明
S_OK
メソッドは成功しました。
VFW_E_WRONG_STATE
VMR がアロケーター/プレゼンターを作成していないか、アロケーター/プレゼンターが IVMRImagePresenterConfig9 インターフェイスを実装していません。

解説(Remarks)

アロケーター/プレゼンターが IVMRImagePresenterConfig9 インターフェイスを実装している場合、このメソッドはアロケーター/プレゼンターの IVMRImagePresenterConfig9::GetRenderingPrefs メソッドを呼び出します。

既定のアロケーター/プレゼンターは IVMRImagePresenterConfig9 を実装します。カスタムのアロケーター/プレゼンターも、必要であればこのインターフェイスを実装できます。

VMR-9 がまだアロケーター/プレゼンターを作成していない場合、またはカスタムのアロケーター/プレゼンターが IVMRImagePresenterConfig9 をサポートしていない場合、このメソッドは VFW_E_WRONG_STATE を返します。既定のアロケーター/プレゼンターを作成するには、IVMRFilterConfig9::SetRenderingMode を値 VMR9Mode_Windowed または VMR9Mode_Windowless で呼び出します。

vtbl 8 HRESULT SetRenderingMode(DWORD Mode)

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

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

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。

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

解説(Remarks)

VMR は既定でウィンドウモード (VMR9Mode_Windowed) になっています。このメソッドを使用して、VMR をウィンドウレスモード (VMR9Mode_Windowless) またはレンダーレスモード (VMR9Mode_Renderless) にします。

いずれかのピンが接続された後は、モードを変更できません。また、ピンが接続される前であっても、ウィンドウレスモードまたはレンダーレスモードからウィンドウモードへ戻すことはできません。したがって、Mode パラメーターに VMR9Mode_Windowed を指定しても、いかなる状況でも効果はありません。

vtbl 9 HRESULT GetRenderingMode(DWORD* pMode)

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

pModeDWORD*outVMR9Mode 列挙体のメンバーを受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます。

リターンコード 説明
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_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 指定が可能。