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


Метод IAMStreamConfig::GetStreamCaps (strmif.h)

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

Метод GetStreamCaps извлекает набор возможностей форматирования.

Синтаксис

HRESULT GetStreamCaps(
  [in]  int           iIndex,
  [out] AM_MEDIA_TYPE **ppmt,
  [out] BYTE          *pSCC
);

Параметры

[in] iIndex

Указывает возможность извлечения формата, индексированного с нуля. Чтобы определить количество возможностей, поддерживаемых контактом, вызовите метод IAMStreamConfig::GetNumberOfCapabilities .

[out] ppmt

Адрес указателя на структуру AM_MEDIA_TYPE . Метод выделяет структуру и заполняет ее типом носителя.

[out] pSCC

Указатель на массив байтов, выделенный вызывающим объектом. Для видео используйте структуру VIDEO_STREAM_CONFIG_CAPS (см. примечания). Для звука используйте структуру AUDIO_STREAM_CONFIG_CAPS . Чтобы определить требуемый размер массива, вызовите метод GetNumberOfCapabilities . Размер возвращается в параметре piSize .

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

Возвращает значение HRESULT . Ниже приведены возможные значения.

Код возврата Описание
S_FALSE
Указан слишком высокий индекс.
S_OK
Успешно.
E_INVALIDARG
Недопустимый индекс.
E_OUTOFMEMORY
Недостаточно памяти.
E_POINTER
Значение указателя NULL .
VFW_E_NOT_CONNECTED
Контакт ввода не подключен.

Комментарии

Этот метод возвращает два элемента информации:

  • Параметр pmt получает заполненную AM_MEDIA_TYPE структуру, которая описывает один поддерживаемый формат выходных данных.
  • Параметр pSCC получает структуру, содержащую дополнительные сведения о формате. Для видео pSCC получает VIDEO_STREAM_CONFIG_CAPS структуру. Для звука он получает AUDIO_STREAM_CONFIG_CAPS структуру.
Примечание Использование структуры VIDEO_STREAM_CONFIG_CAPS для настройки видеоустройства не рекомендуется. Хотя вызывающий объект должен выделить буфер, он должен игнорировать содержимое после возврата метода. Устройство захвата возвращает поддерживаемые форматы с помощью параметра pmt .
 
Чтобы настроить выходной контакт таким образом, чтобы он использовал этот формат, вызовите метод IAMStreamConfig::SetFormat и передайте значение pmt.

Перед вызовом SetFormat можно изменить структуру AM_MEDIA_TYPE в pmt, используя сведения в pSCC. Например, аудио пин-код может возвращать тип мультимедиа по умолчанию 16-разрядной стереосистемы 44 кГц в параметре pmt . В зависимости от значений, возвращенных в AUDIO_STREAM_CONFIG_CAPS структуре, этот формат можно изменить на 8-разрядный моно перед вызовом SetFormat.

Метод выделяет память для структуры AM_MEDIA_TYPE , возвращаемой в параметре pmt . Вызывающий объект должен освободить память, включая блок форматирования. Вспомогательную функцию DeleteMediaType можно использовать в библиотеке базовых классов. Вызывающий объект должен выделить память для параметра pSCC .

В некоторых фильтрах сжатия этот метод завершается ошибкой, если входной контакт фильтра не подключен.

Разработчики фильтров. Дополнительные сведения о реализации этого метода см. в разделе Предоставление форматов захвата и сжатия.

Примеры

В следующем примере извлекается первый поддерживаемый формат (нуль индекса) на выводе видео, а затем устанавливается этот формат для контакта.

C++
int iCount, iSize; BYTE *pSCC = NULL; AM_MEDIA_TYPE *pmt;

hr = pConfig-GetNumberOfCapabilities>(&iCount, &iSize);

pSCC = new BYTE[iSize]; if (pSCC == NULL) { // TODO: ошибка нехватки памяти. }

// Get the first format. hr = pConfig->GetStreamCaps(0, &pmt, pSCC)); if (hr == S_OK) { // TODO: Examine the format. If it's not suitable for some // reason, call GetStreamCaps with the next index value (up // to iCount). Otherwise, set the format: hr = pConfig->SetFormat(pmt); if (FAILED(hr)) { // TODO: Error handling. } DeleteMediaType(pmt); } delete [] pSCC;

Требования

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

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

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

Интерфейс IAMStreamConfig