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


Метод CBaseAllocator.GetBuffer

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

Метод GetBuffer извлекает образец носителя, содержащий буфер. Этот метод реализует метод IMemAllocator::GetBuffer .

Синтаксис

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

Параметры

ppBuffer

Получает указатель на интерфейс IMediaSample буфера. Вызывающий объект должен освободить интерфейс .

pStartTime

Указатель на время начала примера.

pEndTime

Указатель на время окончания образца.

dwFlags

Побитовое сочетание нулевых или более флагов. Базовый класс поддерживает следующий флаг.

Значение Значение
AM_GBF_NOWAIT
Не дожидайтесь, пока буфер станет доступным.

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

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

Код возврата Описание
S_OK
Успешно.
VFW_E_NOT_COMMITTED
Распределитель не зафиксирован.
VFW_E_TIMEOUT
Истекло время ожидания.

Комментарии

Если вызывающий объект не задает флаг AM_GBF_NOWAIT в dwFlags, этот метод блокируется до тех пор, пока не будет доступен следующий пример.

Полученный пример носителя имеет допустимый указатель на выделенный буфер. Вызывающий объект отвечает за установку любых других свойств в образце, таких как метки времени, время мультимедиа или свойство точки синхронизации. Дополнительные сведения см. в разделе IMediaSample.

В базовом классе параметры pStartTime и pEndTime игнорируются. Эти значения могут использоваться производными классами. Например, распределитель для фильтра Отрисовщик видео использует эти значения для синхронизации переключения между поверхностями DirectDraw.

Если методу необходимо дождаться примера, он увеличивает количество ожидающих объектов (CBaseAllocator::m_lCount) и вызывает функцию WaitForSingleObject в семафоре (CBaseAllocator::m_hSem). Когда образец становится доступным, он вызывает метод CBaseAllocator::ReleaseBuffer в распределителе, который увеличивает число семафоров на m_lCount (тем самым освобождая ожидающие потоки) и задает m_lCount обратно в нулевое значение.

Требования

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

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

Класс CBaseAllocator