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


Метод ICaptureGraphBuilder2::FindInterface (strmif.h)

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

Метод FindInterface выполняет поиск указанного интерфейса в графе, начиная с указанного фильтра. Вы можете ограничить поиск разделом графа, вышестоящий или нижестоящего фильтра, или ограничить его определенной категорией контактов или типом мультимедиа.

Синтаксис

HRESULT FindInterface(
  [in]  const GUID  *pCategory,
  [in]  const GUID  *pType,
  [in]  IBaseFilter *pf,
  [in]  REFIID      riid,
  [out] void        **ppint
);

Параметры

[in] pCategory

Указатель на GUID, указывающий условия поиска. Дополнительные сведения см. в разделе "Примечания". Возможны следующие значения:

Дополнительные сведения см. в разделе "Примечания".

[in] pType

Указатель на GUID, указывающий основной тип носителя выходного закрепления или ЗНАЧЕНИЕ NULL.

[in] pf

Указатель на интерфейс IBaseFilter фильтра. Метод начинает поиск из этого фильтра.

[in] riid

Идентификатор интерфейса (IID) искать интерфейс.

[out] ppint

Адрес переменной, получающей указатель интерфейса. Не забудьте освободить полученный указатель интерфейса после завершения работы с интерфейсом.

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

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

Код возврата Описание
S_OK
Успешно.
E_FAIL
Ошибка.
E_NOINTERFACE
Такой интерфейс не поддерживается.
E_POINTER
Аргумент указателя NULL.

Комментарии

В графе захвата различные фильтры и контакты могут предоставлять интерфейсы для настройки свойств, таких как параметры сжатия (IAMVideoCompression) или форматы потоков (IAMStreamConfig). В зависимости от устройства захвата другие полезные интерфейсы могут включать IAMCrossbar, который направляет аналоговые сигналы, или IAMTVTuner, который управляет устройством ТВ-тюнера. Этот метод можно использовать для поиска интерфейса без написания специального кода, который проходит по графу.

Важно Не вызывайте этот метод для получения указателя интерфейса IVideoWindow . Всегда запрашивайте диспетчер графов фильтров для этого интерфейса. В противном случае диспетчер графов фильтров не будет правильно реагировать на изменения в разрешении экрана и другие события.
 
Если параметр pCategory имеет значение NULL, этот метод выполняет поиск запрошенного интерфейса во всем графе. Начиная с фильтра, заданного параметром pf , он запрашивает следующие объекты в графе.
  • Фильтр
  • Контакты фильтра
  • Все подчиненные фильтры, включая их контакты
  • Все фильтры вышестоящий, включая их контакты
Вы можете ограничить поиск, задав параметры pCategory и pType следующим образом:
  • Если pCategory равно &LOOK_UPSTREAM_ONLY, поиск начинается с входных контактов фильтра и продолжается вышестоящий. Он не включает фильтр или что-либо нижестоящее из фильтра. Параметр pType игнорируется.
  • Если pCategory равно &LOOK_DOWNSTREAM_ONLY, поиск начинается с выходных контактов фильтра и продолжается ниже. Он не включает фильтр или что-либо вышестоящий из фильтра. Параметр pType игнорируется.
  • Если pCategory указывает категорию контактов, нижестоящая часть поиска ограничена выходными контактами фильтра, которые соответствуют как категории контактов, так и типу носителя, заданному в параметре pType . В этом случае метод также выполняет поиск в фильтре, и все вышестоящий из фильтра.
Кроме того, если pCategory не равно NULL, метод может добавлять определенные фильтры модели драйвера Windows (WDM) вышестоящий из фильтра, указанного в pf. Дополнительные сведения см. в разделе "Вспомогательные фильтры" в этом разделе.

Категории закрепления полезны для поиска интерфейсов закрепления в фильтрах захвата. Например, фильтр записи может иметь отдельные контакты для записи и предварительного просмотра. Если вы указываете категорию контактов, необходимо также указать тип носителя, чтобы убедиться, что метод выбирает правильный фильтр и закрепление.

Некоторые фильтры захвата видео имеют закрепление видеопорта (PIN_CATEGORY_VIDEOPORT) вместо предварительного просмотра. Если указать PIN_CATEGORY_PREVIEW и MEDIATYPE_Video, метод обрабатывает все контакты видеопорта как контакты предварительного просмотра. Приложению не нужно тестировать эту возможность.

Поддержка фильтров. Если устройство захвата использует драйвер windows Driver Model (WDM), графу могут потребоваться определенные фильтры, вышестоящий из фильтра видеозахвата WDM, например фильтр ТВ-тюнера или аналоговый фильтр видеоперекладки. Если параметр pCategory не равен NULL, этот метод автоматически вставляет все необходимые фильтры WDM в граф. Для этого он запрашивает входные контакты в фильтре захвата, чтобы определить, какие среды они поддерживают, и подключает их к соответствующим фильтрам. Если параметр pCategory имеет значение NULL, метод не добавляет фильтры вышестоящий.

Требования

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

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

Коды ошибок и успешного выполнения

Интерфейс ICaptureGraphBuilder2