Метод 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 .
Код возврата | Описание |
---|---|
|
Успешно. |
|
Распределитель не зафиксирован. |
|
Истекло время ожидания. |
Комментарии
Если вызывающий объект не задает флаг AM_GBF_NOWAIT в dwFlags, этот метод блокируется до тех пор, пока не будет доступен следующий пример.
Полученный пример носителя имеет допустимый указатель на выделенный буфер. Вызывающий объект отвечает за установку любых других свойств в образце, таких как метки времени, время мультимедиа или свойство точки синхронизации. Дополнительные сведения см. в разделе IMediaSample.
В базовом классе параметры pStartTime и pEndTime игнорируются. Эти значения могут использоваться производными классами. Например, распределитель для фильтра Отрисовщик видео использует эти значения для синхронизации переключения между поверхностями DirectDraw.
Если методу необходимо дождаться примера, он увеличивает количество ожидающих объектов (CBaseAllocator::m_lCount) и вызывает функцию WaitForSingleObject в семафоре (CBaseAllocator::m_hSem). Когда образец становится доступным, он вызывает метод CBaseAllocator::ReleaseBuffer в распределителе, который увеличивает число семафоров на m_lCount (тем самым освобождая ожидающие потоки) и задает m_lCount обратно в нулевое значение.
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|