IVMRMixerControl
COM公式ドキュメント
IVMRMixerControl インターフェースは、アプリケーションが Video Mixing Renderer Filter 7 (VMR-7) に入力される複数のビデオストリームを操作できるようにします。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetAlpha メソッドは、このビデオストリームに適用される一定のアルファ値を設定します。
| dwStreamID | DWORD | in | 入力ストリームを指定します。 |
| Alpha | FLOAT | in | このストリーム内のすべてのピクセルに適用されるアルファブレンディング値を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| ピンが接続されていません。 |
解説(Remarks)
指定するアルファ値は、0.0(完全に透明)から 1.0(完全に不透明)までの範囲で指定できます。
GetAlpha メソッドは、このビデオストリームに適用されている一定のアルファ値を取得します。
| dwStreamID | DWORD | in | 入力ストリームを指定します。 |
| pAlpha | FLOAT* | out | 現在のアルファ値を受け取る float 型の変数へのポインターです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| pAlpha が無効です。 | |
| ピンが接続されていません。 |
SetZOrder メソッドは、Z オーダーにおけるこのビデオストリームの位置を設定します。値が大きいほど奥に配置されます。
| dwStreamID | DWORD | in | 入力ストリームを指定します。 |
| dwZ | DWORD | in | Z オーダー内におけるストリームの位置を格納する DWORD です。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| ピンが接続されていません。 |
解説(Remarks)
既定の Z オーダーは、ピンが作成された順序になります。既定の Z オーダーを変更したい場合にのみ、このメソッドを使用する必要があります。
GetZOrder メソッドは、Z オーダーにおけるこのビデオストリームの位置を取得します。
| dwStreamID | DWORD | in | 入力ストリームを指定します。 |
| pZ | DWORD* | out | Z オーダー内の現在の位置を受け取る DWORD へのポインターです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| pZOrder が無効です。 | |
| ピンが接続されていません。 |
解説(Remarks)
既定の Z オーダーは、ピンが作成された順序になります。
SetOutputRect メソッドは、コンポジション矩形内におけるこのストリームの位置を設定します。
| dwStreamID | DWORD | in | 入力ストリームを指定します。 |
| pRect | NORMALIZEDRECT* | in | コンポジション空間における矩形の位置を指定する NORMALIZEDRECT 構造体へのポインターです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| pRect が無効です。 | |
| ピンが接続されていません。 |
解説(Remarks)
この矩形はコンポジション空間内に存在するため、「無効な」矩形というものは存在しません。たとえば、left を right より大きく設定すると、ビデオが x 方向に反転します。空の矩形を指定すると、このストリームはオフになります。
GetOutputRect メソッドは、コンポジション矩形内におけるこのストリームのビデオ矩形の位置を取得します。
| dwStreamID | DWORD | in | 入力ストリームを指定します。 |
| pRect | NORMALIZEDRECT* | out | コンポジション空間における転送先の矩形を受け取る NORMALIZEDRECT 構造体へのポインターです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| pRect が無効です。 | |
| ピンが接続されていません。 |
解説(Remarks)
この矩形はコンポジション空間内に存在するため、「無効な」矩形というものは存在しません。たとえば、left が right より大きい場合、ビデオが x 方向に反転していることを意味します。空の矩形はこのストリームをオフにします。
出力矩形の背景色を設定します。
| ClrBkg | COLORREF | in | 背景色を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
出力矩形の現在の背景色を取得します。
| lpClrBkg | COLORREF* | in | 背景色を受け取る変数のアドレスです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
ストリームのミキシング設定を設定します。
| dwMixerPrefs | DWORD | in | VMRMixerPrefs フラグのビット単位の OR の組み合わせです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
解説(Remarks)
ミキシング設定のフラグは、デシメーション、フィルタリング、レンダーターゲットの 3 つのグループに分かれています。VMRMixerPrefs 列挙型は、これらのフラグを抽出するためのビットマスクを定義しています。
- MixerPref_DecimateMask
- MixerPref_FilteringMask
- MixerPref_RenderTargetMask
| C++ |
|---|
// 現在のミキシング設定を取得します。 DWORD dwPrefs; pMixControl->GetMixingPrefs(&dwPrefs); |
SetMixingPrefs を呼び出す前にアロケーター・プレゼンターを設定する必要があります。そうしないと、VMR は Direct3D デバイスの機能を判別できません。ストリームのミキシング設定を取得します。
| pdwMixerPrefs | DWORD* | out | VMRMixerPrefs フラグのビット単位の OR の組み合わせを受け取る変数のアドレスです。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合はエラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVMRMixerControl "{1C1A17B0-BED0-415D-974B-DC6696131599}" #usecom global IVMRMixerControl IID_IVMRMixerControl "{}" #comfunc global IVMRMixerControl_SetAlpha 3 int,float #comfunc global IVMRMixerControl_GetAlpha 4 int,var #comfunc global IVMRMixerControl_SetZOrder 5 int,int #comfunc global IVMRMixerControl_GetZOrder 6 int,var #comfunc global IVMRMixerControl_SetOutputRect 7 int,var #comfunc global IVMRMixerControl_GetOutputRect 8 int,var #comfunc global IVMRMixerControl_SetBackgroundClr 9 int #comfunc global IVMRMixerControl_GetBackgroundClr 10 var #comfunc global IVMRMixerControl_SetMixingPrefs 11 int #comfunc global IVMRMixerControl_GetMixingPrefs 12 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IVMRMixerControl "{1C1A17B0-BED0-415D-974B-DC6696131599}" #usecom global IVMRMixerControl IID_IVMRMixerControl "{}" #comfunc global IVMRMixerControl_SetAlpha 3 int,float #comfunc global IVMRMixerControl_GetAlpha 4 int,sptr #comfunc global IVMRMixerControl_SetZOrder 5 int,int #comfunc global IVMRMixerControl_GetZOrder 6 int,sptr #comfunc global IVMRMixerControl_SetOutputRect 7 int,sptr #comfunc global IVMRMixerControl_GetOutputRect 8 int,sptr #comfunc global IVMRMixerControl_SetBackgroundClr 9 int #comfunc global IVMRMixerControl_GetBackgroundClr 10 sptr #comfunc global IVMRMixerControl_SetMixingPrefs 11 int #comfunc global IVMRMixerControl_GetMixingPrefs 12 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。