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

IPinConnection

COM
IID4a9a62d3-27d4-403d-91e9-89f540e55534継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

このインターフェースは、フィルターの実行中に入力ピンを再接続するためのメソッドを提供します。

メソッド 4

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

vtbl 3 HRESULT DynamicQueryAccept(AM_MEDIA_TYPE* pmt)

DynamicQueryAccept メソッドは、このピンへの現在の接続でグラフが実行されている状態のまま、ピンが指定されたメディアタイプを受け入れられるかどうかを問い合わせます。

pmtAM_MEDIA_TYPE*inメディアタイプを指定する AM_MEDIA_TYPE 構造体へのポインター。

戻り値

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

戻り値 説明
S_OK
メディアタイプは受け入れ可能です。
VFW_E_TYPE_NOT_ACCEPTED
メディアタイプは受け入れられません。

解説(Remarks)

このメソッドが成功した場合、ピンは次のサンプルで、または IPin::ReceiveConnection の呼び出しでそのメディアタイプを受け入れることができます。

アプリケーションまたはフィルターは、フィルターグラフを再構成する必要があるかどうかを判断するためにこのメソッドを呼び出すことができます。ピンが指定されたメディアタイプを受け入れられる場合、グラフを再構成する必要はありません。

IPin::QueryAccept メソッドもピンがフォーマットタイプを受け入れられるかどうかを判断しますが、フィルターの実行中にそのフォーマットへ切り替えられることを保証するものではありません。フィルターの実行中にフォーマットを切り替える必要がある場合は、代わりに DynamicQueryAccept を呼び出してください。

vtbl 4 HRESULT NotifyEndOfStream(HANDLE hNotifyEvent)

NotifyEndOfStream メソッドは、次にストリーム終了(end-of-stream)条件が発生したときにピンから通知を受け取ることを要求します。

hNotifyEventHANDLEinピンがシグナル状態にするイベントオブジェクトへのハンドル。

戻り値

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

戻り値 説明
S_FALSE
イベントハンドルが NULL でしたが、リセットすべき既存のイベントハンドルがありませんでした。
S_OK
イベントハンドルが設定されました。(イベントハンドルが NULL の場合、イベント通知はキャンセルされました。)

解説(Remarks)

このメソッドを使用すると、呼び出し元はこのピンで終端となるフィルターグラフの一部分にデータをプッシュできます。

たとえば、呼び出し元があるフィルターの "A" という出力ピンから、別のフィルターの "B" という入力ピンへ、場合によっては中間フィルターを介して、データをプッシュしているとします。この場合、次の一連の処理が行われます。

  1. 呼び出し元がピン A でのデータフローをブロックします。
  2. ピン B に対して NotifyEndOfStream を呼び出します。
  3. ピン A に接続された入力ピンに対して IPin::EndOfStream を呼び出します。
  4. 残りのデータが中間フィルターを通って下流へ流れるにつれて、それらのフィルターはストリーム終了通知を伝播します。
  5. ピン B がストリーム終了通知を受け取ると、hNotifyEvent パラメーターで指定されたイベントをシグナル状態にします。この時点で、呼び出し元はピン A とピン B の間のグラフを安全に再構成できます。
このメソッドの目的は、呼び出し元がグラフを動的に再構築してから接続を再開できるようにすることであるため、このストリーム終了通知は実際のストリームの終端を表すものではありません。したがって、ピン B はストリーム終了条件を伝播せず、EC_COMPLETE をシグナルすることもありません。これは、フィルターグラフにおけるデータフローの通常の規則に対する例外です。

NULL のイベントハンドルを指定してこのメソッドを再度呼び出し、通知をキャンセルするのは呼び出し元の責任です。

フィルターグラフは、このメソッドを IGraphConfig::Reconnect メソッドの内部で呼び出します。アプリケーションまたはフィルターが(IGraphConfig::Reconfigure メソッドを使用して)グラフに対する特別な動的再構成を行う場合、再構成されるグラフの部分にデータをプッシュするために、まずこのメソッドを呼び出すことがあります。

vtbl 5 HRESULT IsEndPin()

IsEndPin メソッドは、再接続の探索をこのピンで終了すべきかどうかを示します。

戻り値

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

戻り値 説明
S_FALSE
このピンは再接続の候補ではありません。(再接続の探索をこのピンで停止すべきではありません。)
S_OK
このピンは再接続の候補です。(再接続の探索をこのピンで停止すべきです。)

解説(Remarks)

フィルターまたはアプリケーションは、そのピンが動的再接続の候補であるかどうかを判断するためにこのメソッドを呼び出すことができます。

一般に、シンクフィルター、またはデータを分割もしくは結合するフィルターは S_OK を返すべきです。その他のフィルター(たとえば単純な変換フィルター)は S_FALSE を返すべきです。

vtbl 6 HRESULT DynamicDisconnect()

DynamicDisconnect メソッドは、フィルターがアクティブ(一時停止中または実行中)のときにピンを切断します。グラフが実行中または一時停止中にピンを切断するには、IPin::Disconnect の代わりにこのメソッドを呼び出してください。

戻り値

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

戻り値 説明
S_FALSE
ピンはすでに切断されています。
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_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 指定が可能。