次の方法で共有


IPinConnection::NotifyEndOfStream

NotifyEndOfStream メソッドは、次にエンドオブストリーム条件が発生したとき通知するようにピンに要求する。

構文

  HRESULT NotifyEndOfStream(
  HANDLE hNotifyEvent
);

パラメータ

hNotifyEvent

[in] ピンが通知するイベント オブジェクトのハンドル。

戻り値

HRESULT 値を返す。可能な値は次のとおりである。

説明
S_FALSE イベント ハンドルが NULL だが、リセットするイベント ハンドルが存在しなかった。
S_OK イベント ハンドルが設定された (イベント ハンドルが NULL の場合、イベント通知は取り消された)。

注意

このメソッドを使うと、フィルタ グラフのこのピンまでの部分を通じて、呼び出し元がデータを引き渡すことができる。

たとえば、呼び出し元が、あるフィルタの出力ピン "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 メソッドを使って) グラフに何かしらの特殊な動的再構成を行う場合は、再構成するグラフの部分を通じてデータを引き渡すため、最初にこのメソッドを呼び出す可能性がある。

参照