Microsoft DirectX 8.0 |
このインターフェイスは、フィルタがまだ実行中のときに入力ピンを再接続するメソッドを提供する。フィルタ グラフは、動的な再接続を実行するとき、このインターフェイスのメソッドを呼び出す (「IGraphConfig インターフェイス」を参照すること)。詳細については、「動的グラフ作成」を参照すること。
フィルタ開発者へ : 動的な再接続、またはフォーマットの動的な変更を許すすべての入力ピンに、このインターフェイスを実装すること。
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IPinConnection メソッド 説明 DynamicQueryAccept 現在このピンに接続しているグラフの実行中に、指定されたメディア タイプをピンが受け付けることができるかどうかを照会する。 NotifyEndOfStream 次にエンドオブストリーム条件が発生したとき通知するようにピンに要求する。 IsEndPin 再接続の検索をこのピンで終了すべきかどうかを示す。 DynamicDisconnect フィルタ実行中にピンを切断する。
フィルタがアクティブなとき (ポーズ中または実行中) にピンを切断する。アクティブなフィルタのピンを切断するには、IPin::Disconnect ではなくこのメソッドを呼び出す。
構文
HRESULT DynamicDisconnect(void)
戻り値
ピンが接続されていて、メソッドが成功した場合、戻り値は S_OK になる。ピンが接続されなかった場合、戻り値は S_FALSE になる。
メソッドが成功した場合は、エラーの原因を示す HRESULT 値を返す。
現在このピンに接続しているグラフの実行中に、指定されたメディア タイプをピンが受け付けることができるかどうかを照会する。
構文
HRESULT DynamicQueryAccept( const AM_MEDIA_TYPE *pmt );
パラメータ
- pmt
- [in] メディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK メディア タイプが受け付けられる。 VFW_E_TYPE_NOT_ACCEPTED メディア タイプが受け付けられない。
注意
このメソッドが成功した場合、ピンは、次のサンプル上のメディア タイプ、または IPin::ReceiveConnection の呼び出しで指定されるメディア タイプを受け付けることができる。
アプリケーションまたはフィルタでは、このメソッドを呼び出して、フィルタ グラフを再構成する必要があるかどうか判断できる。指定したメディア タイプをピンが受け付けることができるなら、グラフを再構成する必要はない。
IPin::QueryAccept メソッドは、ピンがフォーマット タイプを受け付けることができるかどうかも判断する。ただし、フォーマット タイプ受け付けられても、フィルタ実行中にピンがそのフォーマットに切り替わることができるとは限らない。フィルタ実行中にフォーマットを切り替える必要がある場合は、代わりに DynamicQueryAccept を呼び出す。
再接続の検索をこのピンで終了すべきかどうかを示す。
構文
HRESULT IsEndPin(void);
戻り値
成功した場合は、次のいずれかの HRESULT 値を返す。
S_FALSE メディア タイプが受け付けられない。 S_OK メディア タイプが受け付けられる。 それ以外の場合は、発生したエラーを示すエラー コードを返す。
注意
フィルタまたはアプリケーションでは、このメソッドを呼び出して、ピンが動的な再接続の候補となりうるかどうかを判断できる。
通常、シンク フィルタとデータを分割またはマージするフィルタは、S_OK を返さなければならない。その他のフィルタ (たとえば単純な変換フィルタ) は、S_FALSE を返さなければならない。
次にエンドオブストリーム条件が発生したとき通知するようにピンに要求する。
構文
HRESULT NotifyEndOfStream( HANDLE hNotifyEvent );
パラメータ
- hNotifyEvent
- [in] ピンが通知するイベント オブジェクトのハンドル。
戻り値
成功した場合は、次のいずれかの HRESULT 値を返す。
S_FALSE イベント ハンドルが NULL だが、リセットするイベント ハンドルが存在しなかった。 S_OK イベント ハンドルが設定された (イベント ハンドルが NULL の場合、イベント通知は取り消される)。 それ以外の場合は、発生したエラーを示すエラー コードを返す。
注意
このメソッドを使用すると、フィルタ グラフのこのピンまでの部分を通じて、呼び出し元がデータを引き渡すことができる。
たとえば、呼び出し元が、あるフィルタの出力ピン "A" から別のフィルタの入力ピン "B" へ、必要に応じてそれらを接続する中間フィルタを使用してデータを引き渡す場合を考える。このとき、次の一連のイベントが発生する。
- 呼び出し元が、ピン A でデータをブロックする。
- ピン B の IPinConnection::NotifyEndOfStream を呼び出す。
- ピン A に接続されている入力ピンの IPin::EndOfStream を呼び出す。
- 残りのデータが中間フィルタを通じてダウンストリームへ流れていくと、それらのフィルタがエンドオブストリーム通知を伝達する。
- ピン B は、エンドオブストリーム通知を受け取ると、hNotifyEvent パラメータに指定されたイベントを通知する。その時点で、呼び出し元は ピン A とピン B の間のグラフを安全に再構成できる。
このメソッドの目的は、呼び出し元からグラフを動的に再構築し、接続を再開することにあるため、エンドオブストリーム通知はストリーム実際の終了を意味しない。したがって、ピン B は、エンドオブストリーム条件を伝達することも、EC_COMPLETE を通知することもない。フィルタ グラフ内でのデータの流れにおける通常の規則から見ると、これは例外的な動作である。
このメソッドをもう一度イベント ハンドル NULL で呼び出して通知を取り消すことは、呼び出し元の責任である。
フィルタ グラフでは、IGraphConfig::Reconnect メソッド内でこのメソッドを呼び出す。アプリケーションまたはフィルタで (IGraphConfig::Reconfigure メソッドを使用して) グラフに何らかの特殊な動的再構成を行う場合は、再構成するグラフの部分を通じてデータを引き渡すため、最初にこのメソッドを呼び出す可能性がある。