Bereitstellen des Endes des Datenstroms

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Wenn der Eingabenadel eine Benachrichtigung zum Ende des Datenstroms empfängt, wird der Aufruf nachgeschaltet. Alle nachgeschalteten Filter, die Daten von diesem Eingabenadel empfangen, sollten auch die Streamendebenachrichtigung erhalten. Nehmen Sie erneut die Streamingsperre und nicht die Filtersperre. Wenn der Filter ausstehende Daten enthält, die noch nicht übermittelt wurden, sollte der Filter sie jetzt übermitteln, bevor er die Benachrichtigung zum Ende des Datenstroms sendet. Nach dem Ende des Datenstroms sollten keine Daten gesendet werden.

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;
}

Die CBaseOutputPin::D eliverEndOfStream-Methode ruft IPin::EndOfStream auf dem Downstreameingabenadel auf.

Threads und kritische Abschnitte