Partilhar via


Recebimento e entrega de exemplos

[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.]

O pseudocódigo a seguir mostra como implementar o método IMemInput::Receive :

HRESULT CMyInputPin::Receive(IMediaSample *pSample)
{
    CAutoLock cObjectLock(&m_csReceive);

    // Perhaps the filter needs to wait on something.
    WaitForSingleObject(m_hSomeEventThatReceiveNeedsToWaitOn, INFINITE);

    // Before using resources, make sure it is safe to proceed. Do not
    // continue if the base-class method returns anything besides S_OK.
    hr = CBaseInputPin::Receive(pSample);
    if (hr != S_OK) 
    {
        return hr;
    }

    /* It is safe to use resources allocated in Active and Pause. */

    // Deliver sample(s), via your output pin(s).
    for (each output pin)
        pOutputPin->Deliver(pSample);

    return hr;
}

O método Receive mantém o bloqueio de streaming, não o bloqueio de filtro. O filtro pode precisar aguardar algum evento antes de poder processar os dados, mostrados aqui pela chamada para WaitForSingleObject. Nem todos os filtros precisarão fazer isso. O método CBaseInputPin::Receive verifica algumas condições gerais de streaming. Ele retornará VFW_E_WRONG_STATE se o filtro for interrompido, S_FALSE se o filtro estiver sendo liberado e assim por diante. Qualquer código de retorno diferente de S_OK indica que o método Receive deve retornar imediatamente e não processar o exemplo.

Depois que o exemplo for processado, entregue-o ao filtro downstream chamando CBaseOutputPin::D eliver. Esse método auxiliar chama IMemInputPin::Receive no pin de entrada downstream. Um filtro pode fornecer exemplos para vários pinos.