Distribuzione del flusso finale

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Quando il pin di input riceve una notifica end-of-stream, propaga la chiamata downstream. Tutti i filtri downstream che ricevono dati da questo pin di input devono ottenere anche la notifica end-of-stream. Di nuovo, prendere il blocco di streaming e non il blocco del filtro. Se il filtro ha dati in sospeso non ancora recapitati, il filtro deve recapitarlo ora, prima di inviare la notifica end-of-stream. Non deve inviare dati dopo la fine del flusso.

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

Il metodo CBaseOutputPin::D eliverEndOfStream chiama IPin::EndOfStream nel pin di input downstream.

Thread e sezioni critiche