IMixerPinConfig
COM公式ドキュメント
IMixerPinConfig インターフェースは Overlay Mixer フィルターの入力ピンで公開され、ビデオストリームをさまざまな方法で操作するメソッドを含みます。
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetRelativePosition メソッドは、表示ウィンドウ内のストリームの位置を設定します。
| dwLeft | DWORD | in | 表示ウィンドウの左上隅の x 座標を指定する値。 |
| dwTop | DWORD | in | 表示ウィンドウの左上隅の y 座標を指定する値。 |
| dwRight | DWORD | in | 表示ウィンドウの右下隅の x 座標を指定する値。 |
| dwBottom | DWORD | in | 表示ウィンドウの右下隅の y 座標を指定する値。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| 座標が {0, 0, 10,000, 10,000} の範囲内にありません。 | |
| 成功しました。 |
解説(Remarks)
このメソッドはウィンドウ座標を {0, 0, 10,000, 10,000} と仮定します。したがって、ビデオストリームを表示ウィンドウの右下 4 分の 1 に描画したい場合は、パラメーター {5,000, 5,000, 10,000, 10,000} を指定してこのメソッドを呼び出します。
GetRelativePosition メソッドは、表示ウィンドウ内のストリームの位置を取得します。
| pdwLeft | DWORD* | inout | 表示ウィンドウの左上隅の x 座標を示す値へのポインター。 |
| pdwTop | DWORD* | inout | 表示ウィンドウの左上隅の y 座標を示す値へのポインター。 |
| pdwRight | DWORD* | inout | 表示ウィンドウの右下隅の x 座標を示す値へのポインター。 |
| pdwBottom | DWORD* | inout | 表示ウィンドウの右下隅の y 座標を示す値へのポインター。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| 座標が {0, 0, 10,000, 10,000} の範囲内にありません。 | |
| 成功しました。 |
解説(Remarks)
このメソッドはウィンドウ座標を {0, 0, 10,000, 10,000} と仮定します。ビデオストリームが表示ウィンドウの右下 4 分の 1 に描画されている場合、このメソッドは {5,000, 5,000, 10,000, 10,000} を返します。
SetZOrder メソッドは、特定のビデオストリームの z オーダーを設定します。
| dwZOrder | DWORD | in | ストリームが互いにクリップし合う順序を示す値。 |
戻り値
E_NOTIMPL を返します。
解説(Remarks)
z オーダーは、どのストリームが他のストリームをクリップできるかを示します。z 値が大きい画像は、常に z 値が小さい画像の前面に表示されます。
複数のストリームの相対的な順序は、ビデオ画像が重なり合う場合にのみ意味を持ちます。
重なり合う 2 つのストリームに同じ z オーダーを指定すると、奇妙なビデオアーティファクトが発生することがあります。
GetZOrder メソッドは、特定のビデオストリームの z オーダーを取得します。
| pdwZOrder | DWORD* | inout | ストリームが互いにクリップし合う順序を示す値へのポインター。 |
戻り値
E_NOTIMPL を返します。
解説(Remarks)
z 値が大きい画像は、常に z 値が小さい画像の前面に表示されます。
SetColorKey メソッドは、ビデオストリームで使用されているカラーキーを設定します。
| pColorKey | COLORKEY* | inout | COLORKEY 構造体へのポインター。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
カラーキーという用語は、どのストリームを指しているかによって異なる意味を持ちます。プライマリストリームのカラーキーは、オーバーレイサーフェスで使用される転送先カラーキーを指します。セカンダリストリームのカラーキーは、オフスクリーンサーフェスからプライマリサーフェスへブリットする際に使用される転送元カラーキーを指します。
アプリケーションは、プライマリピンのカラーキーを目立たない色(おそらくデスクトップ上には存在しないであろう色)に設定してください。Overlay Mixer フィルターは目立たない色を選択しようとしますが、指定された色が他のコンテンツの一部であることをアプリケーションが把握している場合は、アプリケーションがそれを変更してください。
セカンダリストリームにカラーキーを設定すると、ストリームを透過させ、非矩形の画像を実現できます。たとえば、セカンダリストリームがクローズドキャプションのテキストである場合、クローズドキャプションテキストのデコーダーは背景を単色で塗りつぶし、対応するピンのカラーキーをその色に設定してください。これにより、カラーキーで指定されたものを除くすべてのピクセルが転送されるようになります。可能であれば、わずかなパフォーマンス上の利点を得るために、アプリケーションはセカンダリストリームのカラーキーをプライマリストリームのものと同じに設定してください。
プライマリストリームにこの値を設定すると、オーバーレイサーフェスで使用される転送先カラーキーが設定されます。既定では、転送先カラーキーがすべての透過(セカンダリ)ストリームのカラーキーとして使用されます。
pColorKey パラメーターの有効な引数には、ビデオ表示モードが 256 色に設定されている場合の CK_INDEX と、ビデオ表示モードがハイカラー、24 ビット、32 ビットなどのより高い色深度に設定されている場合の CK_RGB があります。CK_RGB フラグは CK_INDEX とともに指定する必要があります。CK_INDEX フラグが設定されている場合、そのインデックスは 256 色モードでパレットインデックスとして使用されます。ただし、表示モードが実行中に変更された場合に DirectShow が指定されたトゥルーカラーの使用へ切り替えられるよう、有効なトゥルーカラーを持つ COLORREF を指定する必要があります。これは、複数のトゥルーカラーを 1 つのパレットインデックスにマッピングできる一方で、パレットインデックスからトゥルーカラーへの逆方向の対応は 1 対 1 ではないためです。
GetColorKey メソッドは、ビデオストリームで使用されているカラーキーを取得します。
| pColorKey | COLORKEY* | inout | キーの種類とパレットインデックスを含む COLORKEY 構造体へのポインター。 |
| pColor | DWORD* | inout | 現在の表示モードが 8 ビットパレット方式の場合に返される COLORKEY の 8 ビットパレットインデックスを示す値へのポインター。それ以外の場合は、現在の表示モードのピクセル形式でカラーキーを表す値です。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| 無効な引数です。両方のパラメーターが NULL です。 | |
カラーキーが不明であるため GetColorKey が失敗しました。
|
|
|
成功しました。 |
解説(Remarks)
プライマリストリームでこの値を取得すると、オーバーレイサーフェスで使用されている転送先カラーキーが取得されます。セカンダリピンでこの値を取得すると、その特定のストリームで使用されているカラーキーが返されます。
このインターフェースの現在の DirectShow 実装では、pColorKey または pColor パラメーターのいずれかに NULL を返すことがあります。ただし、両方のパラメーターが NULL の場合、このメソッドは失敗し E_INVALIDARG を返します。
SetBlendingParameter メソッドは、セカンダリストリームがプライマリストリームとどのようにブレンドされるかを定義するブレンドパラメーターを設定します。
| dwBlendingParameter | DWORD | in | プライマリストリームとセカンダリストリームの間のブレンド量を示す 0 から 255 までの値。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| プライマリストリームでメソッドが呼び出されました。 | |
| 値が有効範囲(0 から 255)外です。 | |
| 成功しました。 |
解説(Remarks)
dwBlendingParameter パラメーターの値は 0 から 255 の間でなければなりません。0 はセカンダリストリームを不可視にし、255 はセカンダリストリームが占める領域でプライマリストリームを不可視にします。値が設定されていない場合、既定値は 255 です。
このメソッドはプライマリストリームで呼び出すことを意図していません。
GetBlendingParameter メソッドは、セカンダリストリームがプライマリストリームとどのようにブレンドされるかを定義するブレンドパラメーターの値を取得します。
| pdwBlendingParameter | DWORD* | inout | プライマリストリームとセカンダリストリームの間のブレンド量を示す 0 から 255 までの値へのポインター。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| プライマリストリームでメソッドが呼び出されました。 | |
| 値が有効範囲(0~255)外です。 | |
| 成功しました。 |
解説(Remarks)
値 0 はセカンダリストリームが不可視であることを示し、値 255 はセカンダリストリームが占める領域でプライマリストリームが不可視であることを示します。
SetAspectRatioMode メソッドは、ウィンドウのサイズ変更に対するアスペクト比補正モードを設定します。
| amAspectRatioMode | AM_ASPECT_RATIO_MODE | in | AM_ASPECT_RATIO_MODE 列挙型のメンバーのいずれかを指定する値。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| セカンダリストリームでメソッドが呼び出されました。 | |
| 無効な引数です。 | |
| 成功しました。 |
解説(Remarks)
現在、この関数は Overlay Mixer フィルターのプライマリピンでのみ実装されています。セカンダリピンで呼び出すとエラーになります。
GetAspectRatioMode メソッドは、ウィンドウのサイズ変更に対するアスペクト比補正モードを取得します。
| pamAspectRatioMode | AM_ASPECT_RATIO_MODE* | inout | AM_ASPECT_RATIO_MODE 列挙型のメンバーへのポインター。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| セカンダリストリームでメソッドが呼び出されました。 | |
| 値が無効か NULL です。 | |
| 成功しました。 |
SetStreamTransparent メソッドは、ストリームを透過に設定します。
| bStreamTransparent | BOOL | in | ストリームの透過性を指定する値。ストリームが透過であることを示すには TRUE を、透過ストリームでないことを示すには FALSE を渡します。 |
戻り値
HRESULT 値を返します。
GetStreamTransparent メソッドは、ストリームが透過であるかどうかを判定します。
| pbStreamTransparent | BOOL* | inout | ストリームが透過であるかどうかを示す値へのポインター。TRUE は透過ストリームを、FALSE は透過ストリームでないことを示します。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります:
| リターンコード | 説明 |
|---|---|
| 失敗しました。 | |
| NULL ポインター引数です。 | |
| メソッドがサポートされていません。 | |
| 成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMixerPinConfig "{593CDDE1-0759-11D1-9E69-00C04FD7C15B}" #usecom global IMixerPinConfig IID_IMixerPinConfig "{}" #comfunc global IMixerPinConfig_SetRelativePosition 3 int,int,int,int #comfunc global IMixerPinConfig_GetRelativePosition 4 var,var,var,var #comfunc global IMixerPinConfig_SetZOrder 5 int #comfunc global IMixerPinConfig_GetZOrder 6 var #comfunc global IMixerPinConfig_SetColorKey 7 var #comfunc global IMixerPinConfig_GetColorKey 8 var,var #comfunc global IMixerPinConfig_SetBlendingParameter 9 int #comfunc global IMixerPinConfig_GetBlendingParameter 10 var #comfunc global IMixerPinConfig_SetAspectRatioMode 11 int #comfunc global IMixerPinConfig_GetAspectRatioMode 12 var #comfunc global IMixerPinConfig_SetStreamTransparent 13 int #comfunc global IMixerPinConfig_GetStreamTransparent 14 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMixerPinConfig "{593CDDE1-0759-11D1-9E69-00C04FD7C15B}" #usecom global IMixerPinConfig IID_IMixerPinConfig "{}" #comfunc global IMixerPinConfig_SetRelativePosition 3 int,int,int,int #comfunc global IMixerPinConfig_GetRelativePosition 4 sptr,sptr,sptr,sptr #comfunc global IMixerPinConfig_SetZOrder 5 int #comfunc global IMixerPinConfig_GetZOrder 6 sptr #comfunc global IMixerPinConfig_SetColorKey 7 sptr #comfunc global IMixerPinConfig_GetColorKey 8 sptr,sptr #comfunc global IMixerPinConfig_SetBlendingParameter 9 int #comfunc global IMixerPinConfig_GetBlendingParameter 10 sptr #comfunc global IMixerPinConfig_SetAspectRatioMode 11 int #comfunc global IMixerPinConfig_GetAspectRatioMode 12 sptr #comfunc global IMixerPinConfig_SetStreamTransparent 13 int #comfunc global IMixerPinConfig_GetStreamTransparent 14 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。