Compartilhar via


Método CBaseOutputPin.Deliver

[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 Deliver método fornece um exemplo de mídia para o pino de entrada conectado.

Sintaxe

virtual HRESULT Deliver(
   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
S_OK
Êxito.
VFW_E_NOT_CONNECTED
O pin não está conectado.

Comentários

Esse método chama o método IMemInputPin::Receive no pin de entrada. Receive poderá bloquear se o método IMemInputPin::ReceiveCanBlock retornar S_OK.

Libere o exemplo depois de chamar esse método. O pino de entrada pode conter uma contagem de referência no exemplo, portanto, não reutilize o exemplo. Sempre chame o método CBaseOutputPin::GetDeliveryBuffer para obter um novo exemplo.

Mantenha a seção crítica do filtro antes de chamar esse método. Caso contrário, o pino poderá ser desconectado durante a chamada de método. Se o filtro usar um thread de trabalho para fornecer exemplos, mantenha a seção crítica quando o filtro estiver pronto para fornecer uma amostra. Caso contrário, você pode manter a seção crítica no método IMemInputPin::Receive do filtro, em que o filtro processa exemplos.

Os threads de trabalho podem criar um possível deadlock. Quando o thread mantém a seção crítica, ele pode aguardar uma alteração de estado no filtro. Ao mesmo tempo, a alteração de estado pode estar aguardando a conclusão do thread. Para evitar isso, o código de alteração de estado deve sinalizar um evento que encerra o thread e aguardar o thread sinalizar a conclusão.

Requisitos

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

Confira também

Classe CBaseOutputPin