Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер класса USB Video представляет единицы расширения в качестве узлов в USB Video KS прокси-фильтре. Элементы управления единиц расширения дополнительно предоставляются в пользовательском режиме в виде свойства, заданного на узле, который имеет тип KSNODETYPE_DEV_SPECIFIC. Идентификатор GUID набора свойств соответствует GUID дескриптора модуля расширения.
Отдельные элементы управления единиц расширения должны постоянно нумероваться от 1 до максимального значения n. Эти элементы управления напрямую сопоставляются с идентификаторами свойств в наборе свойств Extension Unit, и к ним можно получить доступ с помощью стандартных запросов KSPROPERTY через IKsControl.
В ответ на запросы свойств из приложений драйвер UVC возвращает значения свойств, которые имеют член MembersFlags структуры KSPROPERTY_MEMBERSHEADER , заданной исключительно для KSPROPERTY_MEMBER_RANGES. UVC не поддерживает ступенчатые диапазоны или значения единиц расширения по умолчанию произвольной длины.
Чтобы предоставить свойства модуля расширения приложению, можно написать библиотеку DLL в пользовательском режиме, которая предоставляет COM-API. Этот API можно реализовать, выполняя запросы к свойству KS, заданному с помощью интерфейса IKsControl . Vidcap.ax автоматически загружает подключаемый модуль интерфейса узла на основе определенных записей реестра. Приложение может получить доступ к интерфейсу с помощью IKsTopologyInfo::CreateNodeInstance , за которым следует вызов QueryInterface на объекте узла, чтобы получить необходимый COM-API.
Для создания и использования плагина модуля расширения требуются следующие элементы:
Заголовок и файл cpp, реализующий API модуля расширения и интерфейс с именем IKsNodeControl. Vidcap.ax использует интерфейс IKsNodeControl для уведомления подключаемого модуля об идентификаторе узла расширения и предоставления ему экземпляра IKsControl. Пример кода для этих файлов можно найти в DLL плагина модуля расширения.
Файл .rgs, который регистрирует интерфейсы узлов и идентификаторы классов (CLSID) в подразделе реестра HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID. Записи в этом подразделе реестра содержат двоичные значения идентификатора интерфейса (IID) и CLSID. Дополнительные сведения см. в разделе "Пример записи реестра для единиц расширения UVC".
Приложение, вызывающее этот интерфейс. Приложение сначала создает экземпляр узла с правильным идентификатором узла с помощью IKsTopologyInfo::CreateNodeInstance. Затем приложение вызывает QueryInterface на экземпляре узла, чтобы получить необходимый интерфейс единицы расширения. Дополнительные сведения см. в Примере приложения для единиц расширения UVC и поддержке событий автоматического обновления с помощью единиц расширения.
Примеры кода в этом разделе иллюстрируют все эти элементы. См. "Создание примера блока расширения", чтобы узнать, как создать пример подключаемого модуля и связанный пример кода приложения.
После регистрации подключаемого модуля DLL и предоставленных выше записей реестра Vidcap.ax автоматически загружает соответствующие интерфейсы узлов при создании экземпляра узла.
Заметка По состоянию на Windows XP с пакетом обновления 2 (SP2) набор свойств модуля расширения поддерживается только на узле, а не в фильтре.
Рекомендации по реестру
Чтобы зарегистрировать IID и CLSID интерфейса, экспортированного подключаемым модулем, можно использовать регистрацию DLL или сведения о настройке для конкретного устройства (INF).
См. пример записи реестра для единиц расширений UVC в файле .rgs, показывающем необходимые значения для записей реестра. В этом разделе также показано, как написать INF-файл для конкретного устройства, чтобы установить USB-устройство видео и зарегистрировать библиотеку DLL подключаемого модуля. Вы можете выбрать либо регистрацию DLL, либо INF-файла для конкретного устройства в зависимости от ваших конкретных потребностей.
Схема
На следующей схеме показаны связи между различными модулями, участвующими в написании и использовании подключаемого модуля блока расширения. В частности, он отслеживает соединение от приложения к библиотеке DLL подключаемого модуля, к драйверу и, наконец, к модулю расширения на самом устройстве. Схема также иллюстрирует различные идентификаторы GUID, участвующие, идентичные значения выделены одинаковым цветом.
Механизмы событий
Класс видео USB поддерживает события автоматического обновления, где устройство уведомляет драйвер хоста об изменениях в любом из его элементов контроля. Драйвер класса видео Microsoft USB поддерживает эту концепцию, позволяя приложениям регистрировать события автоматического обновления. Процесс получения обновлений состоит из трех этапов:
Регистрация событий обновления с помощью KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE
Прослушивание событий в дескрипторе событий уведомления
Отмена уведомления при завершении