Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей 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 | Возвращает образец мультимедиа в список примеров свободных носителей. |
Требования
| Требование | Значение |
|---|---|
| Заголовок |
|
| Библиотека |
|