次の方法で共有


ストリームの終了を配信する

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/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 を呼び出します。

スレッドとクリティカル セクション