Поделиться через


Класс CBaseAllocator

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Иерархия классов cbaseallocator

Класс CBaseAllocator является абстрактным базовым классом, реализующим распределитель. Распределители предоставляют интерфейс IMemAllocator .

Распределитель — это объект, который выделяет буферы памяти. Распределитель поддерживает список доступных буферов. Когда клиент (обычно фильтр) запрашивает буфер, распределитель извлекает его из списка. Клиент заполняет буфер данными и может передать буфер другому объекту. В конечном итоге буфер освобождается, и распределитель возвращает его в список доступных буферов.

Каждый буфер инкапсулируется объектом, который называется примером носителя. Примеры мультимедиа — это способ упаковки указателей на блоки памяти в рамках платформы COM. Примеры мультимедиа предоставляют интерфейс IMediaSample и реализуются с помощью класса CMediaSample . Пример носителя содержит указатель на связанный буфер, доступ к которому можно получить, вызвав метод IMediaSample::GetPointer . Дополнительные сведения см. в разделе Примеры и распределители.

Чтобы использовать этот класс, выполните следующие действия.

  1. Вызовите метод CBaseAllocator::SetProperties , чтобы указать требования к буферу, включая количество буферов и размер каждого буфера.
  2. Вызовите метод CBaseAllocator::Commit , чтобы выделить буферы.
  3. Вызовите метод CBaseAllocator::GetBuffer для получения примеров мультимедиа. Этот метод блокируется до тех пор, пока не станет доступен следующий пример.
  4. Завершив работу с каждым примером, вызовите метод IUnknown::Release в образце. Образец не удаляется, когда его число ссылок достигает нуля. Вместо этого пример возвращается в список бесплатных распределителя.
  5. Завершив использование распределителя, вызовите метод CBaseAllocator::D ecommit , чтобы освободить память для буферов.

Метод Commit вызывает виртуальный метод CBaseAllocator::Alloc, который выделяет память для буферов. Метод Decommit вызывает чистый виртуальный метод CBaseAllocator::Free, который освобождает память. Производные классы должны переопределять эти два метода.

Базовый класс CMemAllocator является производным от CBaseAllocator. Базовые классы фильтра используют класс CMemAllocator .

Защищенные переменные-члены Описание
m_lFree Указатель на список доступных (бесплатных) примеров мультимедиа.
m_hSem Семафор, который сигнализирует, когда образец становится доступным.
m_lWaiting Количество потоков, ожидающих выборки.
m_lCount Количество предоставляемых буферов.
m_lAllocated Количество буферов, выделенных в данный момент.
m_lSize Размер каждого буфера.
m_lAlignment Выравнивание каждого буфера.
m_lPrefix Префикс каждого буфера.
m_bChanged Флаг, указывающий, изменились ли требования к буферу.
m_bCommitted Флаг, указывающий, зафиксирован ли распределитель.
m_bDecommitInProgress Флаг, указывающий, выполняется ли операция списания.
m_pNotify Указатель на интерфейс обратного вызова, который вызывается при освобождении примеров.
m_fEnableReleaseCallback Флаг, указывающий, включен ли обратный вызов выпуска.
Защищенные методы Описание
Alloc Выделяет память для буферов. Виртуальной.
Открытые методы Описание
CBaseAllocator Метод конструктора.
~ CBaseAllocator Метод деструктора.
SetNotify Является устаревшей.
GetFreeCount Извлекает количество примеров мультимедиа, которые не используются.
NotifySample Освобождает все потоки, ожидающие примеров.
SetWaiting Увеличивает количество ожидающих потоков.
Чистые виртуальные методы Описание
Free Освобождает всю буферную память.
Методы IMemAllocator Описание
SetProperties Указывает количество выделенных буферов и размер каждого буфера.
GetProperties Извлекает количество буферов, создаваемых распределителем, и свойства буфера.
Commit Выделяет память для буферов.
Списание Удаляет буферы.
GetBuffer Извлекает пример мультимедиа, содержащий буфер.
Releasebuffer Возвращает образец мультимедиа в список примеров свободных носителей.

Требования

Требование Значение
Заголовок
Amfilter.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)

См. также раздел

Предоставление пользовательского распределителя