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

IMixerPinConfig

COM
IID593cdde1-0759-11d1-9e69-00c04fd7c15b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IMixerPinConfig インターフェースは Overlay Mixer フィルターの入力ピンで公開され、ビデオストリームをさまざまな方法で操作するメソッドを含みます。

メソッド 12

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

vtbl 3 HRESULT SetRelativePosition(DWORD dwLeft, DWORD dwTop, DWORD dwRight, DWORD dwBottom)

SetRelativePosition メソッドは、表示ウィンドウ内のストリームの位置を設定します。

dwLeftDWORDin表示ウィンドウの左上隅の x 座標を指定する値。
dwTopDWORDin表示ウィンドウの左上隅の y 座標を指定する値。
dwRightDWORDin表示ウィンドウの右下隅の x 座標を指定する値。
dwBottomDWORDin表示ウィンドウの右下隅の y 座標を指定する値。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_INVALIDARG
座標が {0, 0, 10,000, 10,000} の範囲内にありません。
S_OK
成功しました。

解説(Remarks)

このメソッドはウィンドウ座標を {0, 0, 10,000, 10,000} と仮定します。したがって、ビデオストリームを表示ウィンドウの右下 4 分の 1 に描画したい場合は、パラメーター {5,000, 5,000, 10,000, 10,000} を指定してこのメソッドを呼び出します。

注意 10,000 を超える値は無効であり、エラーの原因になります。
vtbl 4 HRESULT GetRelativePosition(DWORD* pdwLeft, DWORD* pdwTop, DWORD* pdwRight, DWORD* pdwBottom)

GetRelativePosition メソッドは、表示ウィンドウ内のストリームの位置を取得します。

pdwLeftDWORD*inout表示ウィンドウの左上隅の x 座標を示す値へのポインター。
pdwTopDWORD*inout表示ウィンドウの左上隅の y 座標を示す値へのポインター。
pdwRightDWORD*inout表示ウィンドウの右下隅の x 座標を示す値へのポインター。
pdwBottomDWORD*inout表示ウィンドウの右下隅の y 座標を示す値へのポインター。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_INVALIDARG
座標が {0, 0, 10,000, 10,000} の範囲内にありません。
S_OK
成功しました。

解説(Remarks)

このメソッドはウィンドウ座標を {0, 0, 10,000, 10,000} と仮定します。ビデオストリームが表示ウィンドウの右下 4 分の 1 に描画されている場合、このメソッドは {5,000, 5,000, 10,000, 10,000} を返します。

vtbl 5 HRESULT SetZOrder(DWORD dwZOrder)

SetZOrder メソッドは、特定のビデオストリームの z オーダーを設定します。

dwZOrderDWORDinストリームが互いにクリップし合う順序を示す値。

戻り値

E_NOTIMPL を返します。

解説(Remarks)

z オーダーは、どのストリームが他のストリームをクリップできるかを示します。z 値が大きい画像は、常に z 値が小さい画像の前面に表示されます。

複数のストリームの相対的な順序は、ビデオ画像が重なり合う場合にのみ意味を持ちます。

重なり合う 2 つのストリームに同じ z オーダーを指定すると、奇妙なビデオアーティファクトが発生することがあります。

vtbl 6 HRESULT GetZOrder(DWORD* pdwZOrder)

GetZOrder メソッドは、特定のビデオストリームの z オーダーを取得します。

pdwZOrderDWORD*inoutストリームが互いにクリップし合う順序を示す値へのポインター。

戻り値

E_NOTIMPL を返します。

解説(Remarks)

z 値が大きい画像は、常に z 値が小さい画像の前面に表示されます。

vtbl 7 HRESULT SetColorKey(COLORKEY* pColorKey)

SetColorKey メソッドは、ビデオストリームで使用されているカラーキーを設定します。

pColorKeyCOLORKEY*inoutCOLORKEY 構造体へのポインター。

戻り値

HRESULT 値を返します。

解説(Remarks)

カラーキーという用語は、どのストリームを指しているかによって異なる意味を持ちます。プライマリストリームのカラーキーは、オーバーレイサーフェスで使用される転送先カラーキーを指します。セカンダリストリームのカラーキーは、オフスクリーンサーフェスからプライマリサーフェスへブリットする際に使用される転送元カラーキーを指します。

アプリケーションは、プライマリピンのカラーキーを目立たない色(おそらくデスクトップ上には存在しないであろう色)に設定してください。Overlay Mixer フィルターは目立たない色を選択しようとしますが、指定された色が他のコンテンツの一部であることをアプリケーションが把握している場合は、アプリケーションがそれを変更してください。

セカンダリストリームにカラーキーを設定すると、ストリームを透過させ、非矩形の画像を実現できます。たとえば、セカンダリストリームがクローズドキャプションのテキストである場合、クローズドキャプションテキストのデコーダーは背景を単色で塗りつぶし、対応するピンのカラーキーをその色に設定してください。これにより、カラーキーで指定されたものを除くすべてのピクセルが転送されるようになります。可能であれば、わずかなパフォーマンス上の利点を得るために、アプリケーションはセカンダリストリームのカラーキーをプライマリストリームのものと同じに設定してください。

プライマリストリームにこの値を設定すると、オーバーレイサーフェスで使用される転送先カラーキーが設定されます。既定では、転送先カラーキーがすべての透過(セカンダリ)ストリームのカラーキーとして使用されます。

pColorKey パラメーターの有効な引数には、ビデオ表示モードが 256 色に設定されている場合の CK_INDEX と、ビデオ表示モードがハイカラー、24 ビット、32 ビットなどのより高い色深度に設定されている場合の CK_RGB があります。CK_RGB フラグは CK_INDEX とともに指定する必要があります。CK_INDEX フラグが設定されている場合、そのインデックスは 256 色モードでパレットインデックスとして使用されます。ただし、表示モードが実行中に変更された場合に DirectShow が指定されたトゥルーカラーの使用へ切り替えられるよう、有効なトゥルーカラーを持つ COLORREF を指定する必要があります。これは、複数のトゥルーカラーを 1 つのパレットインデックスにマッピングできる一方で、パレットインデックスからトゥルーカラーへの逆方向の対応は 1 対 1 ではないためです。

注意 現在、このメソッドはプライマリ入力ピンに対してのみ実装されています。
vtbl 8 HRESULT GetColorKey(COLORKEY* pColorKey, DWORD* pColor)

GetColorKey メソッドは、ビデオストリームで使用されているカラーキーを取得します。

pColorKeyCOLORKEY*inoutキーの種類とパレットインデックスを含む COLORKEY 構造体へのポインター。
pColorDWORD*inout現在の表示モードが 8 ビットパレット方式の場合に返される COLORKEY の 8 ビットパレットインデックスを示す値へのポインター。それ以外の場合は、現在の表示モードのピクセル形式でカラーキーを表す値です。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_INVALIDARG
無効な引数です。両方のパラメーターが NULL です。
E_FAIL
カラーキーが不明であるため GetColorKey が失敗しました。
NOERROR
成功しました。

解説(Remarks)

プライマリストリームでこの値を取得すると、オーバーレイサーフェスで使用されている転送先カラーキーが取得されます。セカンダリピンでこの値を取得すると、その特定のストリームで使用されているカラーキーが返されます。

このインターフェースの現在の DirectShow 実装では、pColorKey または pColor パラメーターのいずれかに NULL を返すことがあります。ただし、両方のパラメーターが NULL の場合、このメソッドは失敗し E_INVALIDARG を返します。

注意 pColor パラメーターで返される DWORD 値は、実際に使用されている色です。したがって、表示のビット深度が 8、16、24、32 の場合、DWORD の下位 8、16、24、または 32 ビットがカラーキーの実際の値を指定します。
vtbl 9 HRESULT SetBlendingParameter(DWORD dwBlendingParameter)

SetBlendingParameter メソッドは、セカンダリストリームがプライマリストリームとどのようにブレンドされるかを定義するブレンドパラメーターを設定します。

dwBlendingParameterDWORDinプライマリストリームとセカンダリストリームの間のブレンド量を示す 0 から 255 までの値。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_UNEXPECTED
プライマリストリームでメソッドが呼び出されました。
E_INVALIDARG
値が有効範囲(0 から 255)外です。
S_OK
成功しました。

解説(Remarks)

dwBlendingParameter パラメーターの値は 0 から 255 の間でなければなりません。0 はセカンダリストリームを不可視にし、255 はセカンダリストリームが占める領域でプライマリストリームを不可視にします。値が設定されていない場合、既定値は 255 です。

このメソッドはプライマリストリームで呼び出すことを意図していません。

注意 このインターフェースの現在の DirectShow 実装では、dwBlendingParameter パラメーターに 0 または 255 の値のみを許可します。それ以外の値は無効です。
vtbl 10 HRESULT GetBlendingParameter(DWORD* pdwBlendingParameter)

GetBlendingParameter メソッドは、セカンダリストリームがプライマリストリームとどのようにブレンドされるかを定義するブレンドパラメーターの値を取得します。

pdwBlendingParameterDWORD*inoutプライマリストリームとセカンダリストリームの間のブレンド量を示す 0 から 255 までの値へのポインター。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_UNEXPECTED
プライマリストリームでメソッドが呼び出されました。
E_INVALIDARG
値が有効範囲(0~255)外です。
S_OK
成功しました。

解説(Remarks)

値 0 はセカンダリストリームが不可視であることを示し、値 255 はセカンダリストリームが占める領域でプライマリストリームが不可視であることを示します。

vtbl 11 HRESULT SetAspectRatioMode(AM_ASPECT_RATIO_MODE amAspectRatioMode)

SetAspectRatioMode メソッドは、ウィンドウのサイズ変更に対するアスペクト比補正モードを設定します。

amAspectRatioModeAM_ASPECT_RATIO_MODEinAM_ASPECT_RATIO_MODE 列挙型のメンバーのいずれかを指定する値。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_NOTIMPL
セカンダリストリームでメソッドが呼び出されました。
E_INVALIDARG
無効な引数です。
S_OK
成功しました。

解説(Remarks)

現在、この関数は Overlay Mixer フィルターのプライマリピンでのみ実装されています。セカンダリピンで呼び出すとエラーになります。

vtbl 12 HRESULT GetAspectRatioMode(AM_ASPECT_RATIO_MODE* pamAspectRatioMode)

GetAspectRatioMode メソッドは、ウィンドウのサイズ変更に対するアスペクト比補正モードを取得します。

pamAspectRatioModeAM_ASPECT_RATIO_MODE*inoutAM_ASPECT_RATIO_MODE 列挙型のメンバーへのポインター。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_NOTIMPL
セカンダリストリームでメソッドが呼び出されました。
E_INVALIDARG
値が無効か NULL です。
S_OK
成功しました。
vtbl 13 HRESULT SetStreamTransparent(BOOL bStreamTransparent)

SetStreamTransparent メソッドは、ストリームを透過に設定します。

bStreamTransparentBOOLinストリームの透過性を指定する値。ストリームが透過であることを示すには TRUE を、透過ストリームでないことを示すには FALSE を渡します。

戻り値

HRESULT 値を返します。

vtbl 14 HRESULT GetStreamTransparent(BOOL* pbStreamTransparent)

GetStreamTransparent メソッドは、ストリームが透過であるかどうかを判定します。

pbStreamTransparentBOOL*inoutストリームが透過であるかどうかを示す値へのポインター。TRUE は透過ストリームを、FALSE は透過ストリームでないことを示します。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります:

リターンコード 説明
E_FAIL
失敗しました。
E_POINTER
NULL ポインター引数です。
E_NOTIMPL
メソッドがサポートされていません。
S_OK
成功しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。