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.
Tópicos relacionados