Метод ISampleGrabber::GetCurrentBuffer

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

Примечание

[Не рекомендуется. Этот API можно удалить из будущих выпусков Windows.]

 

Метод GetCurrentBuffer извлекает копию буфера, связанного с последним примером.

Синтаксис

HRESULT GetCurrentBuffer(
  [in, out] long *pBufferSize,
  [out]     long *pBuffer
);

Параметры

pBufferSize [in, out]

Указатель на размер буфера. Если pBuffer имеет значение NULL, этот параметр получает требуемый размер буфера в байтах. Если pBuffer не имеет значение NULL, задайте этот параметр равным размеру буфера в байтах. В выходных данных параметр получает количество байтов, скопированных в буфер. Это значение может быть меньше размера буфера.

pBuffer [out]

Указатель на массив байтов размера pBufferSize или NULL. Если этот параметр не равен NULL, текущий буфер копируется в массив. Если этот параметр имеет значение NULL, параметр pBufferSize получает требуемый размер буфера.

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

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

Код возврата Описание
E_INVALIDARG
Примеры не помещаются в буфер. Вызовите ISampleGrabber::SetBufferSamples.
E_OUTOFMEMORY
Указанный буфер недостаточно велик.
E_POINTER
Аргумент указателя NULL.
S_OK
Успешно.
VFW_E_NOT_CONNECTED
Фильтр не подключен.
VFW_E_WRONG_STATE
Фильтр еще не получил примеры. Чтобы доставить пример, запустите или приостановите график.

 

Комментарии

Чтобы активировать буферизацию, вызовите метод ISampleGrabber::SetBufferSamples со значением TRUE.

Вызовите этот метод дважды. При первом вызове задайте для pBufferзначение NULL. Размер буфера возвращается в pBufferSize. Затем выделите массив и вызовите метод еще раз. Во втором вызове передайте размер массива в pBufferSize, а адрес массива — в pBuffer. Если массив недостаточно велик, метод возвращает E_OUTOFMEMORY.

Параметр pBuffer типизируется как длинный указатель, но содержимое буфера зависит от формата данных. Вызовите метод ISampleGrabber::GetConnectedMediaType , чтобы получить тип мультимедиа формата.

Не вызывайте этот метод во время работы графа фильтра. Во время работы графа фильтров фильтр Sample Grabber перезаписывает содержимое буфера при получении нового образца. Лучший способ использовать этот метод — использовать "однократный режим", который останавливает граф после получения первого примера. Чтобы задать однократный режим, вызовите ISampleGrabber::SetOneShot.

Фильтр не буферизует примеры предварительной подготовки или примеры, в которых элемент dwStreamIdструктуры AM_SAMPLE2_PROPERTIES не является AM_STREAM_MEDIA.

Примечание

Файл заголовка Qedit.h несовместим с заголовками Direct3D более поздней версии 7.

 

Примечание

Чтобы получить Qedit.h, скачайте обновление Microsoft Windows SDK для Windows Vista и платформа .NET Framework 3.0. Qedit.h недоступен в Microsoft Windows SDK для Windows 7 и платформа .NET Framework 3.5 с пакетом обновления 1 (SP1).

 

Требования

Требование Значение
Заголовок
Qedit.h
Библиотека
Strmiids.lib

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

Использование примера Grabber

Интерфейс ISampleGrabber