Как аппаратные устройства участвуют в графе фильтров

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

В этой статье описывается взаимодействие DirectShow со звуковым и видео оборудованием.

Фильтры-оболочки

Все фильтры DirectShow являются программными компонентами пользовательского режима. Чтобы аппаратное устройство в режиме ядра, например карта захвата видео, присоединилось к графу фильтра DirectShow, устройство должно быть представлено в виде фильтра в пользовательском режиме. Эта функция выполняется специализированными фильтрами-оболочками, предоставляемыми DirectShow. К ним относятся фильтр аудиозахвата , фильтр захвата VFW , фильтр ТВ-тюнера , фильтр ТВ-аудио и аналоговый фильтр видеоперекладки . DirectShow также предоставляет фильтр с именем KsProxy, который может представлять любой тип устройства потоковой передачи модели windows (WDM). Поставщики оборудования могут расширить возможности KsProxy для поддержки пользовательских функций, предоставив подключаемый модуль Ksproxy, который является COM-объектом, агрегированным с помощью KsProxy.

Фильтры-оболочки предоставляют COM-интерфейсы, представляющие возможности устройства. Приложение использует эти интерфейсы для передачи информации в фильтр и из фильтра. Фильтр преобразует вызовы com-метода в вызовы драйвера устройства, передает эти сведения драйверу в режиме ядра, а затем преобразует результат обратно в приложение. Фильтры ТВ-тюнера, ТВ-аудио, аналоговой видеоперекладки и KsProxy поддерживают пользовательские свойства драйвера через интерфейс IKsPropertySet . Таким образом, фильтры захвата VFW и аудиозаписи не расширяемы.

Для разработчиков приложений фильтры-оболочки позволяют приложению управлять устройствами так же, как и любым другим фильтром DirectShow. Специальное программирование не требуется; сведения о взаимодействии с устройством в режиме ядра инкапсулируются в фильтре.

Видео для устройств Windows

Фильтр захвата VFW поддерживает более ранние карты захвата Видео для Windows (VfW). Если в целевой системе присутствует карта VfW, его можно обнаружить и добавить в граф фильтра с помощью перечислителя системных устройств DirectShow. Дополнительные сведения см. в разделе Перечисление устройств и фильтров.

Устройства записи и микширования звука (звуковые карты)

Новые звуковые карты имеют входные разъемы для микрофонов и других типов устройств. Как правило, эти карточки также имеют встроенные возможности смешивания для управления громкостью, а также объемом, а также басом каждого отдельного ввода. В DirectShow входные карта звука и миксер упаковываются фильтром аудиозаписи. Каждый звуковой карта можно обнаружить с помощью перечислителя системных устройств. Чтобы просмотреть звуковые карты в системе, запустите GraphEdit и выберите в категории Источники аудиозаписи. Каждый фильтр в этой категории является отдельным экземпляром фильтра аудиозаписи. (См . раздел Использование GraphEdit.)

Устройства потоковой передачи WDM

Новые аппаратные декодеры и карты захвата соответствуют спецификации модели драйверов Windows (WDM). Эти устройства обладают большей функциональностью, чем устройства VfW. Карты видеозахвата WDM могут поддерживать функции, недоступные в VfW, включая перечисление форматов захвата, программное управление параметрами видео, такими как оттенок и яркость, программный выбор входных данных и поддержка ТВ-тюнера.

Для поддержки потоковых устройств WDM DirectShow предоставляет фильтр KsProxy (ksproxy.ax). KsProxy был назван "Швейцарский армейский нож фильтр", потому что он делает так много различных вещей. Количество контактов на фильтре и количество COM-интерфейсов, предоставляемых фильтром, зависят от возможностей базового драйвера. KsProxy не отображается в графе фильтра под именем "KsProxy". Он всегда принимает понятное имя устройства, которое находится в реестре. Чтобы просмотреть устройства WDM в системе, запустите GraphEdit и выберите категорию потоковой передачи WDM. Даже если в системе есть только одна карта WDM, эта карта может содержать несколько устройств. Каждое устройство представлено как отдельный фильтр, и каждый из этих фильтров фактически является KsProxy.

Приложение использует системный перечислитель устройств для поиска моникеров устройств WDM в системе. Экземпляр KsProxy создается путем вызова BindToObject в моникере. Так как KsProxy может представлять все типы устройств WDM, он должен запрашивать драйвер, чтобы определить, какие наборы свойств поддерживает драйвер. Наборы свойств — это коллекции структур данных, используемых драйверами WDM, а также некоторыми фильтрами пользовательского режима, такими как программные декодеры MPEG-2. KsProxy настраивает для предоставления COM-интерфейсов, соответствующих этим наборам свойств. KsProxy преобразует вызовы com-метода в наборы свойств и отправляет их драйверу. Поставщики оборудования могут расширить возможности KsProxy, предоставляя подключаемые модули, которые представляют собой интерфейсы конкретных поставщиков, предоставляющие специальные возможности устройства. Все эти сведения скрыты от приложения. Приложение управляет устройством с помощью KsProxy, так же, как и любой другой фильтр DirectShow.

Потоковая передача ядра

Устройства WDM поддерживают потоковую передачу ядра, при которой данные передаются полностью в режиме ядра без переключения в пользовательский режим. Переключение между режимами ядра и пользовательскими режимами требует больших вычислительных затрат; Потоковая передача ядра обеспечивает высокую скорость передачи без нагрузки на ЦП узла. Фильтры на основе WDM могут использовать потоковую передачу ядра для передачи мультимедийных данных непосредственно с одного аппаратного устройства на другое на том же карта или на другом карта без копирования данных в main память системы.

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

Разработчики приложений, как правило, не должны беспокоиться о потоковой передаче ядра, кроме как фоновые сведения. Дополнительные сведения о WDM, потоковой передаче ядра, KsProxy и связанных разделах см. в microsoft DDK.

Граф фильтра и его компоненты