Entrega del final del flujo

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Cuando el pin de entrada recibe una notificación de fin de secuencia, propaga la llamada de bajada. Los filtros de bajada que reciben datos de este pin de entrada también deben obtener la notificación de fin de secuencia. De nuevo, tome el bloqueo de streaming y no el bloqueo de filtro. Si el filtro tiene datos pendientes que aún no se entregaron, el filtro debe entregarlo ahora, antes de enviar la notificación de fin de secuencia. No debe enviar ningún dato después del final de la secuencia.

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

El método CBaseOutputPin::D eliverEndOfStream llama a IPin::EndOfStream en el pin de entrada de bajada.

Subprocesos y secciones críticas