Método CBaseInputPin.Receive
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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 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 aqueles listados na tabela a seguir.
Código de retorno | Descrição |
---|---|
|
Êxito. |
|
O pino está sendo liberado no momento; exemplo foi rejeitado. |
|
Argumento de ponteiro NULL. |
|
Tipo de mídia inválido. |
|
Ocorreu um erro em tempo de execução. |
|
O pino está parado. |
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. Depois que o método retorna, o pino upstream libera o exemplo. Quando a contagem de referência do exemplo atinge zero, o exemplo retorna 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:
- Chama o método CBaseInputPin::CheckStreaming para verificar se o pino pode processar exemplos agora. Se não puder, por exemplo, se o pino for interrompido, o método falhará.
- Recupera as propriedades de exemplo e verifica se o formato foi alterado (veja abaixo).
- Se o formato tiver sido alterado, o método chamará o método CBasePin::CheckMediaType para determinar se o novo formato é aceitável.
- 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.
- Supondo que não houve erros, o método retorna S_OK.
Teste uma alteração de formato da seguinte maneira:
- Se o exemplo der suporte à interface IMediaSample2, marcar 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 der 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 marcar para os erros descritos anteriormente.
Requisitos
Requisito | Valor |
---|---|
parâmetro |
|
Biblioteca |
|