IMFVideoMixerControl
COM公式ドキュメント
Enhanced Video Renderer (EVR) がビデオサブストリームをどのように合成するかを制御します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ビデオストリームの Z オーダーを設定します。
| dwStreamID | DWORD | in | ストリームの識別子。EVR メディアシンクの場合、ストリーム識別子は IMFMediaSink::AddStreamSink メソッドが呼び出されたときに定義されます。DirectShow EVR フィルターの場合、ストリーム識別子はピンのインデックスに対応します。参照ストリームは常にストリーム 0 です。 |
| dwZ | DWORD | in | Z オーダー値。参照ストリームの Z オーダーは 0 でなければなりません。Z オーダーの最大値はストリーム数から 1 を引いた値です。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwZ の値が Z オーダーの最大値より大きいです。 | |
| このストリームに対して無効な Z オーダーです。参照ストリームの場合、dwZ は 0 でなければなりません。その他のすべてのストリームの場合、dwZ は 0 より大きくなければなりません。 | |
| 無効なストリーム識別子です。 |
解説(Remarks)
EVR は、Z オーダー値の順に(0 から始めて)ビデオストリームを描画します。参照ストリームは Z オーダーの先頭でなければならず、残りのストリームは任意の順序で構いません。
ビデオストリームの Z オーダーを取得します。
| dwStreamID | DWORD | in | ストリームの識別子。EVR メディアシンクの場合、ストリーム識別子は IMFMediaSink::AddStreamSink メソッドが呼び出されたときに定義されます。DirectShow EVR フィルターの場合、ストリーム識別子はピンのインデックスに対応します。参照ストリームは常にストリーム 0 です。 |
| pdwZ | DWORD* | out | Z オーダー値を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効なストリーム識別子です。 |
合成矩形内でのビデオストリームの位置を設定します。
| dwStreamID | DWORD | in | ストリームの識別子。EVR メディアシンクの場合、ストリーム識別子は IMFMediaSink::AddStreamSink メソッドが呼び出されたときに定義されます。DirectShow EVR フィルターの場合、ストリーム識別子はピンのインデックスに対応します。参照ストリームは常にストリーム 0 です。 |
| pnrcOutput | MFVideoNormalizedRect* | in | ビデオストリームの境界矩形を定義する MFVideoNormalizedRect 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pnrcOutput に指定された境界矩形の座標が無効です。 | |
| 無効なストリーム識別子です。 |
解説(Remarks)
ミキサーは、各ビデオストリームを、最終的なビデオ画像を基準として指定される境界矩形の内側に描画します。この境界矩形は正規化座標で指定されます。詳細については、MFVideoNormalizedRect 構造体を参照してください。
境界矩形の座標は [0.0, 1.0] の範囲内でなければなりません。また、左上隅の X および Y 座標は、右下隅の X および Y 座標を超えることはできません。言い換えると、境界矩形は合成矩形の内側に完全に収まる必要があり、垂直方向または水平方向に反転させることはできません。
次の図は、EVR がサブストリームをどのように合成するかを示しています。
ストリームの出力矩形は SetStreamOutputRect を呼び出して指定します。ソース矩形は IMFVideoDisplayControl::SetVideoPosition を呼び出して指定します。ミキサーはストリームを 1 つの境界矩形に合成する際に、まず出力矩形を適用します。この境界矩形は合成空間と呼ばれます。次に、プレゼンターが合成された画像にソース矩形を適用します。合成矩形内でのビデオストリームの位置を取得します。
| dwStreamID | DWORD | in | ストリームの識別子。EVR メディアシンクの場合、ストリーム識別子は IMFMediaSink::AddStreamSink メソッドが呼び出されたときに定義されます。DirectShow EVR フィルターの場合、ストリーム識別子はピンのインデックスに対応します。参照ストリームは常にストリーム 0 です。 |
| pnrcOutput | MFVideoNormalizedRect* | out | 境界矩形を正規化座標で受け取る MFVideoNormalizedRect 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効なストリーム識別子です。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFVideoMixerControl "{A5C6C53F-C202-4AA5-9695-175BA8C508A5}" #usecom global IMFVideoMixerControl IID_IMFVideoMixerControl "{}" #comfunc global IMFVideoMixerControl_SetStreamZOrder 3 int,int #comfunc global IMFVideoMixerControl_GetStreamZOrder 4 int,var #comfunc global IMFVideoMixerControl_SetStreamOutputRect 5 int,var #comfunc global IMFVideoMixerControl_GetStreamOutputRect 6 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFVideoMixerControl "{A5C6C53F-C202-4AA5-9695-175BA8C508A5}" #usecom global IMFVideoMixerControl IID_IMFVideoMixerControl "{}" #comfunc global IMFVideoMixerControl_SetStreamZOrder 3 int,int #comfunc global IMFVideoMixerControl_GetStreamZOrder 4 int,sptr #comfunc global IMFVideoMixerControl_SetStreamOutputRect 5 int,sptr #comfunc global IMFVideoMixerControl_GetStreamOutputRect 6 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。