Entregando o fim do fluxo

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Quando o pin de entrada recebe uma notificação de fim do fluxo, ele propaga a chamada downstream. Todos os filtros downstream que recebem dados desse pin de entrada também devem receber a notificação de fim do fluxo. Novamente, pegue o bloqueio de streaming e não o bloqueio de filtro. Se o filtro tiver dados pendentes que ainda não foram entregues, o filtro deverá entregá-lo agora, antes de enviar a notificação de fim do fluxo. Ele não deve enviar nenhum dado após o final do fluxo.

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

O método CBaseOutputPin::D eliverEndOfStream chama IPin::EndOfStream no pin de entrada downstream.

Threads e seções críticas