Класс CBaseAllocator
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Класс CBaseAllocator является абстрактным базовым классом, реализующим распределитель. Распределители предоставляют интерфейс IMemAllocator .
Распределитель — это объект, который выделяет буферы памяти. Распределитель поддерживает список доступных буферов. Когда клиент (обычно фильтр) запрашивает буфер, распределитель извлекает его из списка. Клиент заполняет буфер данными и может передать буфер другому объекту. В конечном итоге буфер освобождается, и распределитель возвращает его в список доступных буферов.
Каждый буфер инкапсулируется объектом, который называется примером носителя. Примеры мультимедиа — это способ упаковки указателей на блоки памяти в рамках платформы COM. Примеры мультимедиа предоставляют интерфейс IMediaSample и реализуются с помощью класса CMediaSample . Пример носителя содержит указатель на связанный буфер, доступ к которому можно получить, вызвав метод IMediaSample::GetPointer . Дополнительные сведения см. в разделе Примеры и распределители.
Чтобы использовать этот класс, выполните следующие действия.
- Вызовите метод CBaseAllocator::SetProperties , чтобы указать требования к буферу, включая количество буферов и размер каждого буфера.
- Вызовите метод CBaseAllocator::Commit , чтобы выделить буферы.
- Вызовите метод CBaseAllocator::GetBuffer для получения примеров мультимедиа. Этот метод блокируется до тех пор, пока не станет доступен следующий пример.
- Завершив работу с каждым примером, вызовите метод IUnknown::Release в образце. Образец не удаляется, когда его число ссылок достигает нуля. Вместо этого пример возвращается в список бесплатных распределителя.
- Завершив использование распределителя, вызовите метод 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 | Возвращает образец мультимедиа в список примеров свободных носителей. |
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|