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


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

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

Общие сведения

Стек захвата камеры (Майкрософт) состоит из устаревшего стека платформы DirectShow и современной платформы Под названием Multimedia Foundation. IHV и ИЗГОТОВИТЕЛи должны были написать компоненты для своих устройств, чтобы удовлетворить оба конвейера.

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) предлагаются для нескольких приложений. Поток распаковывается только один раз для нескольких возможных клиентов. Это повышает производительность приложений. На следующей схеме показан конвейер захвата камеры:

конвейер захвата камеры.

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

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

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

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

DWORD: EnableDshowRedirection

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Offset Поле Размер (в байтах) Значение
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)

Offset Поле Размер (в байтах) Значение
0 wLength 2 Длина этого дескриптора в байтах
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyDataType 2 0x0030
wPropertyNameLength 2
10 PropertyName Переменная Длина имени свойства
58 dwPropertyDataLength 2 Длина данных свойства
62 PropertyData Переменная Данные свойств
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