Руководство по реализации 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-устройств