Partilhar via


Método CBaseAllocator.GetBuffer

[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 GetBuffer método recupera um exemplo de mídia que contém um buffer. Esse método implementa o método IMemAllocator::GetBuffer .

Sintaxe

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

Parâmetros

ppBuffer

Recebe um ponteiro para a interface IMediaSample do buffer. O chamador deve liberar a interface .

pStartTime

Ponteiro para a hora de início do exemplo.

pEndTime

Ponteiro para a hora de término do exemplo.

dwFlags

Combinação bit a bit de zero ou mais sinalizadores. A classe base dá suporte ao sinalizador a seguir.

Valor Significado
AM_GBF_NOWAIT
Não aguarde até que um buffer fique disponível.

Retornar valor

Retorna um dos seguintes valores HRESULT .

Código de retorno Descrição
S_OK
Êxito.
VFW_E_NOT_COMMITTED
O alocador não foi confirmado.
VFW_E_TIMEOUT
Tempo limite atingido.

Comentários

A menos que o chamador especifique o sinalizador AM_GBF_NOWAIT em dwFlags, esse método será bloqueado até que o próximo exemplo esteja disponível.

O exemplo de mídia recuperado tem um ponteiro válido para o buffer alocado. O chamador é responsável por definir quaisquer outras propriedades no exemplo, como os carimbos de data/hora, os horários de mídia ou a propriedade do ponto de sincronização. Para obter mais informações, consulte IMediaSample.

Na classe base, os parâmetros pStartTime e pEndTime são ignorados. Classes derivadas podem usar esses valores. Por exemplo, o alocador para o filtro do Renderizador de Vídeo usa esses valores para sincronizar a alternância entre superfícies do DirectDraw.

Se o método precisar aguardar um exemplo, ele incrementará a contagem de objetos de espera (CBaseAllocator::m_lCount) e a função WaitForSingleObject de chamadas no semáforo (CBaseAllocator::m_hSem). Quando um exemplo fica disponível, ele chama o método CBaseAllocator::ReleaseBuffer no alocador, o que aumenta a contagem de semáforos em m_lCount (liberando assim os threads em espera) e define m_lCount de volta para zero.

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 CBaseAllocator