Método CBaseInputPin.Receive

O Receive método recebe o próximo exemplo de mídia no fluxo. Esse método implementa o método IMemInputPin::Receive .

Sintaxe

HRESULT Receive(
   IMediaSample *pSample
);

Parâmetros

pSample

Ponteiro para a interface IMediaSample do exemplo.

Retornar valor

Retorna um valor HRESULT . Os valores possíveis incluem os listados na tabela a seguir.

Código de retorno Descrição
S_OK
Sucesso.
S_FALSE
O pino está sendo liberado no momento; amostra foi rejeitada.
E_POINTER
Argumento de ponteiro NULL.
VFW_E_INVALIDMEDIATYPE
Tipo de mídia inválido.
VFW_E_RUNTIME_ERROR
Ocorreu um erro em tempo de execução.
VFW_E_WRONG_STATE
O pino foi interrompido.

Comentários

O pino de saída upstream chama esse método para entregar um exemplo ao pino de entrada. O pino de entrada deve fazer um dos seguintes procedimentos:

  • Processe o exemplo antes de retornar.
  • Retorne e processe o exemplo em um thread de trabalho.
  • Rejeite o exemplo.

Se o pino usar um thread de trabalho para processar o exemplo, adicione uma contagem de referência ao exemplo dentro desse método. Após o retorno do método, o pino upstream libera o exemplo. Quando a contagem de referência do exemplo atingir zero, o exemplo retornará ao alocador para reutilizar.

Esse método é síncrono e pode ser bloqueado. Se o método puder ser bloqueado, o método CBaseInputPin::ReceiveCanBlock do pin deverá retornar S_OK.

Na classe base, esse método executa as seguintes etapas:

  1. Chama o método CBaseInputPin::CheckStreaming para verificar se o pino pode processar amostras agora. Se não puder, por exemplo, se o pino for interrompido, o método falhará.
  2. Recupera as propriedades de exemplo e verifica se o formato foi alterado (veja abaixo).
  3. Se o formato tiver sido alterado, o método chamará o método CBasePin::CheckMediaType para determinar se o novo formato é aceitável.
  4. Se o novo formato não for aceitável, o método chamará o método CBasePin::EndOfStream , postará um evento EC_ERRORABORT e retornará um código de erro.
  5. Supondo que não houve erros, o método retorna S_OK.

Teste uma alteração de formato da seguinte maneira:

  • Se o exemplo for compatível com a interface IMediaSample2 , verifique o membro dwSampleFlags da estrutura AM_SAMPLE2_PROPERTIES . Se o sinalizador AM_SAMPLE_TYPECHANGED estiver presente, o formato será alterado.
  • Caso contrário, se o exemplo não oferecer suporte a IMediaSample2, chame o método IMediaSample::GetMediaType . Se o método retornar um valor não NULL , o formato será alterado.

Na classe base, esse método não processa o exemplo. A classe derivada deve substituir esse método para executar o processamento. (O que isso implica depende inteiramente do filtro.) A classe derivada deve chamar o método de classe base para verificar os erros descritos anteriormente.

Requisitos

Requisito Valor
parâmetro
Amfilter.h (inclua Fluxos.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)

Confira também

Classe CBaseInputPin