CBaseAllocator (clase)

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 podría 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 mediante una llamada 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 libre 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 se deriva de CBaseAllocator. Las clases base de filtro usan la clase CMemAllocator.

Variables de miembro protegido 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 que esperan ejemplos.
m _ lCount Número de búferes que se proporcionarán.
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 hay una operación de desa confirmación 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 destructor.
SetNotify Obsoleto.
GetFreeCount Recupera el número de muestras de medios que no están en uso.
NotifySample Libera todos los subprocesos que están esperando ejemplos.
SetWaiting Incrementa el número 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 asignarán 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.
Desacomprimido Desacompone los búferes.
GetBuffer Recupera un ejemplo multimedia que contiene un búfer.
ReleaseBuffer Devuelve un ejemplo multimedia a la lista de ejemplos multimedia gratuitos.

Requisitos

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

Consulte también

Proporcionar un asignador personalizado