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


Метод CBaseAllocator.Alloc

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

Метод Alloc выделяет память для буферов.

Синтаксис

virtual HRESULT Alloc();

Параметры

Этот метод не имеет параметров.

Возвращаемое значение

Возвращает одно из следующих значений HRESULT .

Код возврата Описание
S_FALSE
Требования к буферу не изменились.
S_OK
Требования к буферу изменились.
VFW_E_SIZENOTSET
Требования к буферу не заданы.

Комментарии

Этот метод вызывается методом CBaseAllocator::Commit .

В базовом классе этот метод не выделяет память. Он возвращает ошибку, если требования к буферу не заданы, S_FALSE, если требования не изменились, и S_OK, если требования изменились.

Производный класс должен переопределить этот метод для выполнения фактического выделения памяти. Как правило, производный класс выполняет следующие действия:

  1. Вызовите реализацию базового класса, чтобы определить, действительно ли требуется выделение памяти.
  2. Выделение памяти.
  3. Создайте объекты CMediaSample , содержащие блоки памяти из шага 2.
  4. Добавьте каждый объект CMediaSample в список бесплатных примеров (CBaseAllocator::m_lFree).

Пример см. в разделе CMemAllocator::Alloc.

Требования

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

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

Класс CBaseAllocator