ストリームの終了を配信する
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
入力ピンは、ストリームの終了通知を受信すると、呼び出しをダウンストリームに伝達します。 この入力ピンからデータを受信するダウンストリーム フィルターでも、ストリームの終了通知を受け取る必要があります。 ここでも、フィルター ロックではなく、ストリーミング ロックを取ります。 まだ配信されていない保留中のデータがフィルターに含まれている場合、フィルターはストリームの終了通知を送信する前に、今すぐ配信する必要があります。 ストリームの終了後にデータを送信しないでください。
HRESULT CMyInputPin::EndOfStream()
{
CAutoLock lock_it(&m_csReceive);
/* If the pin has not delivered all of the data in the stream
(based on what it received previously), do so now. */
// Propagate EndOfStream call downstream, via your output pin(s).
for (each output pin)
{
hr = pOutputPin->DeliverEndOfStream();
}
return S_OK;
}
CBaseOutputPin::D eliverEndOfStream メソッドは、ダウンストリーム入力ピンで IPin::EndOfStream を呼び出します。
関連トピック