Compartir a través de


CBaseAllocator (clase)

[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.

Jerarquía de clases cbaseallocator

La clase CBaseAllocator es una clase base abstracta que implementa un asignador. Los asignadores exponen la interfaz IMemAllocator .

Un asignador es un objeto que asigna búferes de memoria. El asignador mantiene una lista de búferes disponibles. Cuando un cliente (generalmente un filtro) solicita un búfer, el asignador recupera uno de la lista. El cliente rellena el búfer con datos y puede pasar el búfer a otro objeto. Finalmente, el búfer se libera y el asignador lo devuelve a la lista de búferes disponibles.

Cada búfer se encapsula mediante un objeto denominado ejemplo multimedia. Los ejemplos multimedia son una manera de empaquetar punteros a bloques de memoria dentro del marco del Modelo de objetos componentes (COM). Los ejemplos multimedia exponen la interfaz IMediaSample y se implementan mediante la clase CMediaSample . Un ejemplo multimedia contiene un puntero al búfer asociado, al que se puede acceder llamando al método IMediaSample::GetPointer . Para obtener más información, vea Ejemplos y asignadores.

Para usar esta clase, realice los pasos siguientes:

  1. Llame al método CBaseAllocator::SetProperties para especificar los requisitos del búfer, incluido el número de búferes y el tamaño de cada búfer.
  2. Llame al método CBaseAllocator::Commit para asignar los búferes.
  3. Llame al método CBaseAllocator::GetBuffer para recuperar ejemplos multimedia. Este método se bloquea hasta que el ejemplo siguiente esté disponible.
  4. Cuando haya terminado con cada ejemplo, llame al método IUnknown::Release en el ejemplo. El ejemplo no se elimina cuando su recuento de referencias alcanza cero. En su lugar, el ejemplo vuelve a la lista gratuita del asignador.
  5. Cuando haya terminado de usar el asignador, llame al método CBaseAllocator::D ecommit para liberar la memoria de los búferes.

El método Commit llama al método virtual CBaseAllocator::Alloc, que asigna la memoria para los búferes. El método Decommit llama al método virtual puro CBaseAllocator::Free, que libera la memoria. Las clases derivadas deben invalidar estos dos métodos.

La clase base CMemAllocator deriva de CBaseAllocator. Las clases base de filtro usan la clase CMemAllocator .

Variables miembro protegidas Descripción
m_lFree Puntero a una lista de ejemplos de medios disponibles (gratuitos).
m_hSem Semáforo que se señala cuando una muestra está disponible.
m_lWaiting Recuento de subprocesos en espera de ejemplos.
m_lCount Número de búferes que se van a proporcionar.
m_lAllocated Número de búferes asignados actualmente.
m_lSize Tamaño de cada búfer.
m_lAlignment Alineación de cada búfer.
m_lPrefix Prefijo de cada búfer.
m_bChanged Marca que indica si los requisitos del búfer han cambiado.
m_bCommitted Marca que indica si se ha confirmado el asignador.
m_bDecommitInProgress Marca que indica si una operación de descommitir está en curso.
m_pNotify Puntero a una interfaz de devolución de llamada, a la que se llama cuando se liberan muestras.
m_fEnableReleaseCallback Marca que indica si la devolución de llamada de versión está habilitada.
Métodos protegidos Descripción
Alloc Asigna memoria para los búferes. Virtual.
Métodos públicos Descripción
CBaseAllocator Método constructor.
~ CBaseAllocator Método de destructor.
SetNotify Obsoleto.
GetFreeCount Recupera el número de ejemplos multimedia que no están en uso.
NotifySample Libera los subprocesos que están esperando ejemplos.
SetWaiting Incrementa el recuento de subprocesos en espera.
Métodos virtuales puros Descripción
Gratuito Libera toda la memoria del búfer.
Métodos IMemAllocator Descripción
SetProperties Especifica el número de búferes que se van a asignar y el tamaño de cada búfer.
GetProperties Recupera el número de búferes que creará el asignador y las propiedades del búfer.
Commit Asigna la memoria para los búferes.
Descommit Quita los búferes.
GetBuffer Recupera un ejemplo multimedia que contiene un búfer.
ReleaseBuffer Devuelve un ejemplo multimedia a la lista de ejemplos de medios gratuitos.

Requisitos

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

Consulte también

Proporcionar un asignador personalizado