Método CBaseAllocator.GetBuffer

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El GetBuffer método recupera un ejemplo multimedia que contiene un búfer. Este método implementa el método IMemAllocator::GetBuffer .

Sintaxis

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

Parámetros

ppBuffer

Recibe un puntero a la interfaz IMediaSample del búfer. El autor de la llamada debe liberar la interfaz .

pStartTime

Puntero a la hora de inicio del ejemplo.

pEndTime

Puntero a la hora de finalización del ejemplo.

dwFlags

Combinación bit a bit de cero o más marcas. La clase base admite la marca siguiente.

Valor Significado
AM_GBF_NOWAIT
No espere a que un búfer esté disponible.

Valor devuelto

Devuelve uno de los siguientes valores HRESULT .

Código devuelto Descripción
S_OK
Correcto.
VFW_E_NOT_COMMITTED
No se ha confirmado el asignador.
VFW_E_TIMEOUT
agotado el tiempo de espera.

Observaciones

A menos que el autor de la llamada especifique la marca AM_GBF_NOWAIT en dwFlags, este método se bloquea hasta que el ejemplo siguiente esté disponible.

El ejemplo de medios recuperados tiene un puntero válido al búfer asignado. El autor de la llamada es responsable de establecer cualquier otra propiedad en el ejemplo, como las marcas de tiempo, los tiempos multimedia o la propiedad de punto de sincronización. Para obtener más información, consulte IMediaSample.

En la clase base, se omiten los parámetros pStartTime y pEndTime . Las clases derivadas pueden usar estos valores. Por ejemplo, el asignador del filtro Video Renderer usa estos valores para sincronizar el cambio entre superficies de DirectDraw.

Si el método necesita esperar en un ejemplo, incrementa el recuento de objetos en espera (CBaseAllocator::m_lCount) y llama a la función WaitForSingleObject en el semáforo (CBaseAllocator::m_hSem). Cuando un ejemplo está disponible, llama al método CBaseAllocator::ReleaseBuffer en el asignador, lo que aumenta el recuento de semáforos por m_lCount (liberando así los subprocesos en espera) y establece m_lCount volver a cero.

Requisitos

Requisito Value
Encabezado
Amfilter.h (include Streams.h)
Biblioteca
Strmbase.lib (compilaciones comerciales);
Strmbasd.lib (compilaciones de depuración)

Consulte también

CBaseAllocator (clase)