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


Метод IMemAllocator::GetBuffer (strmif.h)

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

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

Синтаксис

HRESULT GetBuffer(
  [out] IMediaSample   **ppBuffer,
  [in]  REFERENCE_TIME *pStartTime,
  [in]  REFERENCE_TIME *pEndTime,
  [in]  DWORD          dwFlags
);

Параметры

[out] ppBuffer

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

[in] pStartTime

Указатель на время начала примера или ЗНАЧЕНИЕ NULL.

[in] pEndTime

Указатель на время окончания образца или ЗНАЧЕНИЕ NULL.

[in] dwFlags

Побитовое сочетание нуля или нескольких следующих флагов:

Flag Описание
AM_GBF_NOTASYNCPOINT Этот пример не является точкой синхронизации. Изменение динамического формата в этом примере запрещено. При вызове в overlay Mixer или VMR этот флаг означает, что возвращаемый буфер будет содержать изображение, идентичное последнему переданного образа.
AM_GBF_PREVFRAMESKIPPED Этот пример является первым после разрыва. (Только отрисовщик видео использует этот флаг.)
AM_GBF_NOWAIT Не дожидайтесь, пока буфер станет доступным.
AM_GBF_NODDSURFACELOCK Используется с фильтром 7 отрисовщика для микширования видео для запроса разблокировки поверхности DirectDraw. Дополнительные сведения см. в разделе Работа с целевыми объектами отрисовки Direct3D.

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

Возвращает значение HRESULT . Возможные значения включают значения, приведенные в следующей таблице.

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

Комментарии

По умолчанию этот метод блокируется до тех пор, пока не будет доступен бесплатный образец или не будет выведен из эксплуатации распределитель. Если вызывающий объект задает флаг AM_GBF_NOWAIT и выборка недоступна, распределитель может немедленно вернуться с возвращаемым значением VFW_E_TIMEOUT. Однако распределители не требуются для поддержки этого флага.

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

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

Перед вызовом этого метода необходимо вызвать метод IMemAllocator::Commit . Этот метод завершается ошибкой после вызова метода IMemAllocator::D ecommit .

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header strmif.h (включая Dshow.h)
Библиотека Strmiids.lib

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

Коды ошибок и успешности

Интерфейс IMemAllocator