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.
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:
- 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.
- Llame al método CBaseAllocator::Commit para asignar los búferes.
- Llame al método CBaseAllocator::GetBuffer para recuperar ejemplos multimedia. Este método se bloquea hasta que el ejemplo siguiente esté disponible.
- 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.
- 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 |
|
Biblioteca |
|