IPinConnection
COM公式ドキュメント
このインターフェースは、フィルターの実行中に入力ピンを再接続するためのメソッドを提供します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
DynamicQueryAccept メソッドは、このピンへの現在の接続でグラフが実行されている状態のまま、ピンが指定されたメディアタイプを受け入れられるかどうかを問い合わせます。
| pmt | AM_MEDIA_TYPE* | in | メディアタイプを指定する AM_MEDIA_TYPE 構造体へのポインター。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| メディアタイプは受け入れ可能です。 | |
| メディアタイプは受け入れられません。 |
解説(Remarks)
このメソッドが成功した場合、ピンは次のサンプルで、または IPin::ReceiveConnection の呼び出しでそのメディアタイプを受け入れることができます。
アプリケーションまたはフィルターは、フィルターグラフを再構成する必要があるかどうかを判断するためにこのメソッドを呼び出すことができます。ピンが指定されたメディアタイプを受け入れられる場合、グラフを再構成する必要はありません。
IPin::QueryAccept メソッドもピンがフォーマットタイプを受け入れられるかどうかを判断しますが、フィルターの実行中にそのフォーマットへ切り替えられることを保証するものではありません。フィルターの実行中にフォーマットを切り替える必要がある場合は、代わりに DynamicQueryAccept を呼び出してください。
NotifyEndOfStream メソッドは、次にストリーム終了(end-of-stream)条件が発生したときにピンから通知を受け取ることを要求します。
| hNotifyEvent | HANDLE | in | ピンがシグナル状態にするイベントオブジェクトへのハンドル。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| イベントハンドルが NULL でしたが、リセットすべき既存のイベントハンドルがありませんでした。 | |
| イベントハンドルが設定されました。(イベントハンドルが NULL の場合、イベント通知はキャンセルされました。) |
解説(Remarks)
このメソッドを使用すると、呼び出し元はこのピンで終端となるフィルターグラフの一部分にデータをプッシュできます。
たとえば、呼び出し元があるフィルターの "A" という出力ピンから、別のフィルターの "B" という入力ピンへ、場合によっては中間フィルターを介して、データをプッシュしているとします。この場合、次の一連の処理が行われます。
- 呼び出し元がピン A でのデータフローをブロックします。
- ピン B に対して
NotifyEndOfStreamを呼び出します。 - ピン A に接続された入力ピンに対して IPin::EndOfStream を呼び出します。
- 残りのデータが中間フィルターを通って下流へ流れるにつれて、それらのフィルターはストリーム終了通知を伝播します。
- ピン B がストリーム終了通知を受け取ると、hNotifyEvent パラメーターで指定されたイベントをシグナル状態にします。この時点で、呼び出し元はピン A とピン B の間のグラフを安全に再構成できます。
NULL のイベントハンドルを指定してこのメソッドを再度呼び出し、通知をキャンセルするのは呼び出し元の責任です。
フィルターグラフは、このメソッドを IGraphConfig::Reconnect メソッドの内部で呼び出します。アプリケーションまたはフィルターが(IGraphConfig::Reconfigure メソッドを使用して)グラフに対する特別な動的再構成を行う場合、再構成されるグラフの部分にデータをプッシュするために、まずこのメソッドを呼び出すことがあります。
IsEndPin メソッドは、再接続の探索をこのピンで終了すべきかどうかを示します。
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| このピンは再接続の候補ではありません。(再接続の探索をこのピンで停止すべきではありません。) | |
| このピンは再接続の候補です。(再接続の探索をこのピンで停止すべきです。) |
解説(Remarks)
フィルターまたはアプリケーションは、そのピンが動的再接続の候補であるかどうかを判断するためにこのメソッドを呼び出すことができます。
一般に、シンクフィルター、またはデータを分割もしくは結合するフィルターは S_OK を返すべきです。その他のフィルター(たとえば単純な変換フィルター)は S_FALSE を返すべきです。
DynamicDisconnect メソッドは、フィルターがアクティブ(一時停止中または実行中)のときにピンを切断します。グラフが実行中または一時停止中にピンを切断するには、IPin::Disconnect の代わりにこのメソッドを呼び出してください。
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPinConnection "{4A9A62D3-27D4-403D-91E9-89F540E55534}" #usecom global IPinConnection IID_IPinConnection "{}" #comfunc global IPinConnection_DynamicQueryAccept 3 var #comfunc global IPinConnection_NotifyEndOfStream 4 sptr #comfunc global IPinConnection_IsEndPin 5 #comfunc global IPinConnection_DynamicDisconnect 6 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPinConnection "{4A9A62D3-27D4-403D-91E9-89F540E55534}" #usecom global IPinConnection IID_IPinConnection "{}" #comfunc global IPinConnection_DynamicQueryAccept 3 sptr #comfunc global IPinConnection_NotifyEndOfStream 4 sptr #comfunc global IPinConnection_IsEndPin 5 #comfunc global IPinConnection_DynamicDisconnect 6 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。