Руководство по реализации моста DShow для устройств UVC

В этом разделе приводятся рекомендации по реализации настройки DShow Bridge для камер и устройств, которые соответствуют спецификации КЛАССА ВИДЕО USB (UVC). Платформа использует Microsoft OS Descriptors из стандарта шины USB для настройки DShow Bridge. Дескрипторы расширенных свойств ОС — это расширение дескрипторов стандарта USB и используются USB-устройствами для возврата специфических свойств устройства для Windows, которые не включены стандартными спецификациями.

Обзор

Стек захвата камер Майкрософт состоит из устаревшего стека платформы DirectShow и современной платформы, называемой Media Foundation. IHV и OEM должны были разрабатывать компоненты для своих устройств, чтобы удовлетворять требования обоих потоков.

DShow Bridge был написан с намерением интеграции потока DShow с платформой Media Foundation. Это позволяет использовать истинные универсальные драйверы, чтобы IHV и OEM могли разрабатывать драйверы, которые могут работать с приложениями MediaFoundation и DShow в Windows версии 1607 и более поздних. При включённой опции DShow Bridge, приложение DShow и приложения для совместного использования могут одновременно использовать ту же камеру.

IHV и OEM могут потребовать исключения из политик, регулирующих конвейер DShow. Партнеры могут включить следующие функции с помощью дескрипторов ОС:

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

  • Декомпрессия MJPEG в FrameServer: FrameServer — это служба, виртуализирующая устройство камеры. Это позволяет совместно использовать пин-коды с устройства между несколькими клиентами. Архитектура с оптимизированным декомпрессором Media Foundation может использовать эту функцию для декодации MJPEG в FrameServer. Для нескольких приложений предлагаются несжатые преобразованные форматы мультимедиа (YUY2). Поток декомпрессируется только один раз для нескольких возможных клиентов. Это повышает производительность приложений. На следующей схеме показан конвейер захвата камеры:

поток захвата изображения с камеры.

Изготовители оборудования (OEM) и независимые поставщики оборудования (IHV), упаковывающие устройства USB-камер, могут использовать спецификацию дескриптора функции операционной системы для расширенных свойств стандарта USB-шины, чтобы настроить мост DShow без внесения каких-либо изменений в INF-файл для драйвера UVC.

Дескрипторы ОС позволяют устройствам определять свойства реестра для USB-устройств или составных устройств.

Чтобы настроить DShow Bridge с помощью дескрипторов ОС USB, программное обеспечение хоста должно создать следующий раздел реестра для каждого интерфейса USB-устройства:

HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters

DWORD: EnableDshowRedirection

Значение реестра EnableDshowRedirection — это значение битовой маски, которое можно использовать для настройки моста DShow, как описано в таблице ниже.

Битовая маска Описание Замечания
0x00000001 Принять участие в DShow Bridge 0 — отказ
1 — согласие
0x00000002 Включение декодирования MJPEG один раз в FrameServer (см. примечание ниже) 0 — MJPEG сжатый тип носителя, предоставляемый (без операции)
1. Предоставление преобразованных несжатых типов носителей из MJPEG (YUY2)

Примечание.

Включает декодирование MJPEG в среде FrameServer, после чего несжатые форматы мультимедиа (YUY2) предоставляются нескольким приложениям. Поток декомпрессируется только один раз для нескольких возможных клиентов. Это повышает производительность приложений.

Примеры макетов

Ниже приведены примеры для следующих спецификаций:

  • Спецификация расширенных дескрипторов Microsoft OS 1.0

  • Спецификация дескрипторов Microsoft OS 2.0

Спецификация дескрипторов расширенных свойств Microsoft OS версии 1.0

Дескриптор расширенных свойств ОС имеет два компонента

  • Раздел заголовка фиксированной длины

  • Один или несколько разделов настраиваемых свойств переменной длины, которые следует разделу заголовка

Раздел заголовка

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

Компенсация Поле Размер (в байтах) Ценность Описание
0 dwLength 4 0x0000004c 76 десятичное число
4 bcdVersion 2 0x0100 Версия 1.0
6 wIndex 2 0x005 Дескриптор расширенных свойств ОС
8 wCount 2 0x0001 Одно пользовательское свойство

Раздел настраиваемых свойств (дескриптор 1.0)

Дескриптор расширенного свойства ОС USB HID содержит один раздел настраиваемого свойства для создания ключа реестра EnableDshowRedirection DWORD.

Смещение Поле Размер (в байтах) Ценность
0 dwSize 4 0x00000042 (66 байт для этого свойства)
4 dwPropertyDataType 4 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyNameLength 2 0x0030
10 bPropertyName 48 EnableDshowRedirection (строка Юникода)
58 dwPropertyDataLength 4 0x00000004 (Sizeof(DWORD))
62 bPropertyData 4 0x00000001 (данные DWORD)

Спецификация дескрипторов Microsoft OS 2.0

В этом примере показано, как наборы дескрипторов Microsoft 2.0 можно использовать для предоставления одного значения реестра DWORD enableDshowRedirection , которое применяется к версиям Windows.

Раздел настраиваемых свойств (дескриптор 2.0)

Смещение Поле Размер (в байтах) Ценность
0 wLength 2 Длина в байтах этого дескриптора
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 тип_данных_свойства_w 2 0x0030
wPropertyNameLength 2
10 ИмяСвойства Переменная Длина имени свойства
58 dwPropertyDataLength 2 Длина данных свойств
62 Данные собственности Переменная Данные свойств
UCHAR Example2\_MSOS20DescriptorSetForFutureWindows\[0x48\] =
{
    //
    // Microsoft OS 2.0 Descriptor Set Header
    //
    0x0A, 0x00,                 // wLength - 12 bytes
    0x00, 0x00,                 // MSOS20_SET_HEADER_DESCRIPTOR
    0x00, 0x00, 0x0?, 0x06,     // dwWindowsVersion – 0x06030000 for future Windows version
    0x4A, 0x00,                 // wTotalLength – 72 bytes

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x3E, 0x00,                 // wLength - 62 bytes
    0x04, 0x00,                 // wDescriptorType – 5 for Registry Property
    0x04, 0x00,                 // wPropertyDataType - 4 for REG_DWORD
    0x30, 0x00,                 // wPropertyNameLength – 48 bytes
    0x45, 0x00, 0x6E, 0x00,     // Property Name - "EnableDshowRedirection"
    0x61, 0x00, 0x62, 0x00,
    0x6C, 0x00, 0x65, 0x00,
    0x44, 0x00, 0x73, 0x00,
    0x68, 0x00, 0x6F, 0x00,
    0x77, 0x00, 0x52, 0x00,
    0x65, 0x00, 0x64, 0x00,
    0x69, 0x00, 0x72, 0x00,
    0x65, 0x00, 0x63, 0x00,
    0x74, 0x00, 0x69, 0x00,
    0x6F, 0x00, 0x6E, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x04, 0x00,                 // wPropertyDataLength – 4 bytes
    0x00, 0x00, 0x00, 0x00      // PropertyData – 0x00000003 (DShow Bridge is enabled and MJPEG is decoded in FrameServer)
}

Ресурсы

Дескрипторы ОС Майкрософт для USB-устройств

Универсальный родительский драйвер USB (Usbccgp.sys)

Спецификация USB