Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 10, предоставляется встроенный драйвер USB Video Class (UVC) для устройств, соответствующих спецификации USB Video Class (версии от 1.0 до 1.5). Этот драйвер поддерживает цветные камеры и камеры с сенсорами. В этом документе описывается, как предоставить определенные возможности камеры, совместимой с UVC, приложениям с помощью драйвера папки "Входящие".
Терминология
Ключевое слово | Описание |
---|---|
UVC | Класс видео устройств USB |
Драйвер UVC | USBVideo.sys драйвер, который поставляется с ОС |
ИКР (инфракрасное излучение) | Инфракрасная связь |
Цветная камера | Камера, которая выводит цветовые потоки (например, камеры RGB или YUV) |
Камера датчика | Камера, которая выводит потоки без цвета (например, ИК- или камеры глубины) |
Бостон | Хранилище объектов двоичного устройства |
Дескриптор ОС MS 2.0 | Дескриптор возможностей устройств BOS для платформы Microsoft |
Камеры датчиков
Windows поддерживает две категории камер. Одна из них — цветная камера, а другая — камера без цветовой передачи. Камеры RGB или YUV классифицируются как цветные камеры, а камеры без цвета, такие как черно-белые, инфракрасные и камеры глубины, классифицируются как датчиковые камеры. Драйвер UVC поддерживает оба типа камер. Рекомендуется указать значение встроенного ПО камеры, на основе которого драйвер UVC зарегистрирует камеру в одной или обоих поддерживаемых категориях.
Камера, поддерживающая только типы форматов цвета, должна быть зарегистрирована в KSCATEGORY_VIDEO_CAMERA. Камера, поддерживающая только инфракрасные или глубинные форматы, должна быть зарегистрирована в KSCATEGORY_SENSOR_CAMERA. Камера, поддерживающая цветные и бесцветные форматы, должна быть зарегистрирована под KSCATEGORY_VIDEO_CAMERA и KSCATEGORY_SENSOR_CAMERA. Эта классификация помогает приложениям выбрать камеру, с которой они хотят работать.
Камера UVC может указать свои предпочтения в категории с помощью атрибутов, SensorCameraMode и SkipCameraEnumeration в своём дескрипторе MS OS 2.0, подробно описанном в следующих разделах.
Атрибут SensorCameraMode принимает значение 1 или 2.
Значение 1 зарегистрирует устройство в KSCATEGORY_SENSOR_CAMERA. Помимо этого, укажите значение 1 для SkipCameraEnumeration , чтобы сделать камеру доступной для приложений, ищущих только камеры датчиков. Камера, которая работает только с типами носителей, предназначенными для сенсора камеры, должна использовать это значение.
Значение 2 для SensorCameraMode регистрирует устройство в KSCATEGORY_SENSOR_CAMERA и KSCATEGORY_VIDEO_CAMERA. Это делает камеру доступной для приложений, которые ищут датчик и цветные камеры. Камера, которая обеспечивает как сенсорную камеру, так и типы носителей цветной камеры, должна использовать это значение.
Рекомендуется указать указанное выше значение реестра с помощью дескриптора BOS. Для получения дополнительной информации см. раздел "Пример составного устройства" ниже, в котором приведен пример дескриптора BOS с дескриптором MS OS 2.0, зависящим от платформы.
Если вы не можете обновить встроенное ПО устройства, как описано выше, можно использовать пользовательский INF-код и указать, что ваша камера должна быть зарегистрирована в качестве камеры датчика, указав значение для SensorCameraMode и SkipCameraEnumeration следующим образом:
Пользовательский INF-файл (на основе драйвера UVC в папке "Входящие") должен содержать следующие записи AddReg:
SensorCameraMode: REG_DWORD: 1 (для регистрации в качестве камеры датчика)
SkipCameraEnumeration: REG_DWORD: 1 (сделать его доступным только для приложений IR)
Пример пользовательского раздела INF выглядит следующим образом:
[USBVideo.NT.HW]
AddReg=USBVideo.HW.AddReg
[USBVideo.HW.AddReg]
HKR,, SensorCameraMode, 0x00010001,1 ; places the value under device HW
; Registry key
HKR,, SkipCameraEnumeration, 0x00010001,1 ; This makes the camera available
; only for application looking for
; IR cameras
Если атрибуты SensorCameraMode и SkipCameraEnumeration не указаны в встроенном ПО или INF, камера регистрируется в качестве цветовой камеры и будет отображаться только в приложениях с поддержкой цветовой камеры.
Поток IR
Драйвер USB-видеокласса Windows (UVC) поддерживает камеры, которые захватывают сцену в формате YUV и передают данные пикселей через USB как несжатые кадры YUV или как сжатые кадры MJPEG.
В дескрипторе формата видеопотока должны быть указаны следующие GUID'ы типов формата, определенные в заголовочном файле WDK ksmedia.h:
Тип | Описание |
---|---|
KSDATAFORMAT_SUBTYPE_L8_IR | Несжатая 8-разрядная плоскость luma. Этот тип сопоставляется с MFVideoFormat_L8. |
KSDATAFORMAT_SUBTYPE_L16_IR | Несжатая 16-битная плоскость luma. Этот тип сопоставляется с MFVideoFormat_L16. |
KSDATAFORMAT_SUBTYPE_MJPG_IR | Сжатые кадры MJPEG. Media Foundation преобразует это в несжатые кадры формата NV12 и использует только яркостную плоскость. |
Если эти идентификаторы типов формата указаны в поле guidFormat дескриптора кадра, конвейер захвата Media Foundation помечает поток как IR-поток. Приложения, написанные с помощью API Media Foundation FrameReader, смогут использовать поток IR. Масштабирование или преобразование кадров IR не поддерживается конвейером для потоков IR.
Поток, предоставляющий типы форматов IR, не должен предоставлять типы форматов RGB или Глубины.
// Example Format Descriptor for UVC 1.1 frame based format
typedef struct _VIDEO_FORMAT_FRAME
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
GUID guidFormat; // this field should contain the IR subtype GUID
UCHAR bBitsPerPixel;
UCHAR bDefaultFrameIndex;
UCHAR bAspectRatioX;
UCHAR bAspectRatioY;
UCHAR bmInterlaceFlags;
UCHAR bCopyProtect;
UCHAR bVariableSize;
} VIDEO_FORMAT_FRAME, *PVIDEO_FORMAT_FRAME;
Замечание
Потоки IR будут отображаться как обычные потоки записи в DShow.
Глубинный поток
Драйвер USB Video Class, встроенный в Windows, поддерживает камеры, которые создают потоки глубины. Эти камеры захватывают сведения о глубине (например, время полета) сцены и передают карту глубины как несжатые кадры YUV через USB. Следующий идентификатор GUID формата должен быть указан в дескрипторе формата для потокового видео, как это определено в заголовочном файле WDK ksmedia.h.
Тип | Описание |
---|---|
KSDATAFORMAT_SUBTYPE_D16 | 16-разрядные значения карты глубины. Этот тип идентичен MFVideoFormat_D16. Значения находятся в миллиметрах. |
Если guid типа формата указан в элементе guidFormat дескриптора кадра, конвейер захвата Media Foundation помечает поток в качестве потока глубины. Приложения, написанные с помощью API FrameReader, смогут использовать поток глубины. Масштабирование или преобразование кадров глубины не поддерживается конвейером для потоков глубины.
Поток, который предоставляет типы форматов глубины, не должен предоставлять типы форматов RGB или IR.
// Example Format Descriptor for UVC 1.1 frame based format
typedef struct _VIDEO_FORMAT_FRAME
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
GUID guidFormat; // this field should contain the IR subtype GUID
UCHAR bBitsPerPixel;
UCHAR bDefaultFrameIndex;
UCHAR bAspectRatioX;
UCHAR bAspectRatioY;
UCHAR bmInterlaceFlags;
UCHAR bCopyProtect;
UCHAR bVariableSize;
} VIDEO_FORMAT_FRAME, *PVIDEO_FORMAT_FRAME;
Замечание
Потоки глубины отображаются как обычные потоки захвата в DShow.
Группирование камер
Windows поддерживает группирование камер на основе идентификатора контейнера, чтобы помочь приложениям работать с соответствующими камерами. Например, камера IR и цветовая камера, присутствующие на одном и том же физическом устройстве, могут быть доступны операционной системе как связанные камеры. Это позволяет приложениям, таким как Windows Hello, использовать соответствующие камеры для своих сценариев.
Связь между функциями камеры может быть указана в дескрипторе BOS камеры в встроенном ПО. Драйвер UVC будет использовать эти сведения и предоставлять доступ к этим функциям камеры как к связанным. Это заставляет стек камеры ОС экспонировать их как группу связанных камер для приложений.
Встроенное ПО камеры должно указать идентификатор UVC-FSSensorGroupID, который является GUID в строковой форме с фигурной скобкой. Камеры с одинаковыми идентификаторами UVC-FSSensorGroupID будут сгруппированы.
Группу датчиков можно указать, указав UVC-FSSensorGroupName, строку Юникода в встроенном ПО.
Дополнительные сведения см. в разделе "Пример составного устройства" ниже для примера BOS, указывающего UVC-FSSensorGroupID и UVC-FSSensorGroupName.
Если вы не можете обновить встроенное ПО устройства, как описано выше, можно использовать пользовательский INF-код и указать, что ваша камера является частью группы датчиков, указав идентификатор группы датчиков и имя, как показано ниже. Пользовательский INF-файл (на основе драйвера UVC в папке "Входящие") должен содержать следующие записи AddReg:
FSSensorGroupID: REG_SZ: "{идентификатор группы датчиков}"
FSSensorGroupName: REG_SZ: "Удобное имя группы датчиков"
Примером для пользовательского раздела INF будет следующее:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,, FSSensorGroupID,0x00000000,%FSSensorGroupID%
HKR,, FSSensorGroupName,0x00000000,%FSSensorGroupName%
Замечание
Группы датчиков не поддерживаются в конвейере захвата DirectShow.
Поддержка метода 2 или метода 3 по-прежнему сохраняется
Спецификация UVC предоставляет механизм для определения того, поддерживает ли интерфейс потоковой передачи видео типы методов 1/2/3 для захвата статических изображений. Чтобы ОС могла использовать преимущества поддержки устройства для съемки неподвижных изображений методами 2/3 через драйвер UVC, встроенное ПО устройства должно указать значение в дескрипторе BOS.
Значение, указываемое для включения захвата изображений методом 2/3, — это DWORD с именем UVC-EnableDependentStillPinCapture. Укажите его значение с помощью дескриптора BOS. В приведенном ниже примере составного устройства показано включение захвата неподвижного изображения с помощью примера дескриптора BOS.
Если вы не можете обновить встроенное ПО устройства в соответствии с инструкциями выше, можно использовать пользовательский INF-файл, чтобы указать, что камера поддерживает метод статической съемки 2 или метод 3.
Пользовательский INF-файл (на основе пользовательского драйвера UVC или драйвера UVC в папке "Входящие") должен содержать следующую запись AddReg:
EnableDependentStillPinCapture: REG_DWORD: 0x0 (отключено) до 0x1 (включено)
Если для этой записи задано значение "Включено" (0x1), конвейер захвата использует методы 2/3 для захвата неподвижного изображения (если встроенное ПО также объявляет поддержку методов 2/3, как указано в спецификации UVC).
Примером для пользовательского раздела INF является следующее:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnableDependentStillPinCapture,0x00010001,0x00000001
Цепочка устройства MFT
Устройство MFT — это рекомендованный механизм подключаемого модуля в пользовательском режиме для IHV и OEM, чтобы расширить функциональные возможности камеры в Windows.
До Windows 10 версии 1703 конвейер камеры поддерживает только один подключаемый модуль расширения DMFT.
Начиная с Windows 10, версии 1703, конвейер камеры Windows поддерживает цепочку DMFT, состоящую максимум из двух элементов.
Начиная с Windows 11 версии 22H2 конвейер камеры Windows поддерживает необязательную цепочку DMFT с максимальным количеством четырех DMFT.
Это обеспечивает большую гибкость для изготовителей оборудования и IHV для предоставления дополнительных значений в виде потоков камеры после обработки. Например, устройство может использовать PDMFT вместе с DMFT IHV и DMFT OEM.
На следующем рисунке показана архитектура, включающая цепочку DMFT.
Образцы передаются из драйвера камеры в DevProxy, а затем проходят через цепочки DMFT. Каждый DMFT в цепочке имеет возможность обработать выборку. Если DMFT не хочет обработать образец, он может работать как канал передачи, передав его следующему DMFT.
Для таких элементов управления, как KsProperty, вызов идет вверх по цепочке — последний DMFT в цепочке получает вызов первым, который может быть обработан там или передан предыдущему DMFT в цепочке.
Ошибки распространяются из DMFT в DTM, а затем в приложения. Для IHV/OEM DMFTs, если какому-либо DMFT не удается инициализироваться, это приведет к фатальной ошибке для DTM.
Требования к DMFTs:
Число входных контактов DMFT должно совпадать с числом выходных контактов предыдущего DMFT, в противном случае произойдет ошибка инициализации. Однако количество входных и выходных контактов одной и той же DMFT не обязательно совпадает.
DMFT необходимо поддерживать интерфейсы — IMFDeviceTransform, IMFShutdown, IMFRealTimeClientEx, IKsControl и IMFMediaEventGenerator; IMFTransform может потребоваться поддерживаться, если в цепочке настроен MFT0 или следующая DMFT в цепочке требуется поддержка IMFTransform.
В 64-разрядных системах, которые не используют frame Server, необходимо зарегистрировать как 32-разрядные, так и 64-разрядные DMFT. Учитывая, что USB-камера может быть подключена к любой системе, для "внешних" (или не входящих в комплект) USB-камер поставщик USB-камер должен предоставлять как 32-разрядные, так и 64-разрядные DMFT.
Настройка цепочки DMFT
Устройство камеры может при необходимости предоставить COM-объект DMFT в библиотеке DLL с помощью пользовательского INF-файла, использующего разделы папки "Входящие USBVideo.INF".
В разделе "Interface AddReg" пользовательского .INF-файла укажите CLSID DMFT, добавив следующую запись в реестр:
CameraDeviceMftCLSIDChain (REG_MULTI_SZ) %Dmft0.CLSID%,%Dmft. CLSID%,%Dmft2.CLSID%
Как показано в примерах параметров INF ниже (замените %Dmft0.CLSID% и % Dmft1.CLSID% фактическими строками CLSID, которые вы используете для ваших DMFT), в Windows 10 версии 1703 допускается максимум 2 CLSID. Первый из них находится ближе всего к DevProxy, а последний является последним в цепочке DMFT.
Платформа DMFT CLSID — {3D096DDE-8971-4AD5-98F9-C74F56492630}.
Некоторые примеры настроек CameraDeviceMftCLSIDChain:
Нет IHV/OEM DMFT или DMFT платформы
- CameraDeviceMftCLSIDChain = "" (или нет необходимости указывать эту запись реестра)
IHV/OEM DMFT
- CameraDeviceMftCLSIDChain = %Dmft. CLSID%
Платформа DMFT —< IHV/OEM DMFT >
CameraDeviceMftCLSIDChain = "{3D096DDE-8971-4AD5-98F9-C74F56492630}",%Dmft. CLSID%
Ниже приведен снимок экрана: раздел реестра результатов для USB-камеры с платформой DMFT и DMFT (с GUID {D671BE6C-FDB8-424F-81D7-03F5B1CE2CC7}) в цепочке.
IHV/OEM DMFT0 <—> IHV/OEM DMFT1
- CameraDeviceMftCLSIDChain = %Dmft0.CLSID%,%Dmft1.CLSID%,
Замечание
CameraDeviceMftCLSIDChain может иметь не более 2 CLSID.
Если настроена CameraDeviceMftCLSIDChain, устаревшие параметры CameraDeviceMftCLSID пропускаются DTM.
Если параметр CameraDeviceMftCLSIDChain не настроен, а настроен устаревший идентификатор CameraDeviceMftCLSID, цепочка будет выглядеть следующим образом: если это USB-камера и она поддерживается платформой DMFT и включена, то DevProxy <—> Platform DMFT <—> OEM/IHV DMFT; или, если камера не поддерживается платформой DMFT или она отключена, то DevProxy <—> OEM/IHV DMFT.
Примеры параметров INF-файла:
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnablePlatformDmft,0x00010001,0x00000001
HKR,,DisablePlatformDmftFeatures,0x00010001,0x00000001
HKR,,CameraDeviceMftCLSIDChain, 0x00010000,%Dmft0.CLSID%,%Dmft1.CLSID%
Устройство платформы MFT
Начиная с Windows 10, версии 1703, Windows предоставляет встроенные MFT устройства для камер UVC, известных как Platform DMFT (PDMFT), по выбору. Этот DMFT позволяет IHV и OEM воспользоваться преимуществами предоставленных алгоритмов последующей обработки Windows.
Функции, поддерживаемые платформой DMFT | Релиз Windows |
---|---|
Включает область интереса на основе лиц (ROI) для 3A корректировки в USB-камерах с поддержкой ROI. | Windows 10 версии 1703 |
Замечание
Если камера не поддерживает ROI на основе UVC 1.5, PDMFT не загружается, даже если устройство согласилось использовать PDMFT.
Камера UVC может выбрать использование DMFT платформы, указав параметр EnablePlatformDmft через дескриптор BOS.
Значение, которое следует указать для включения DMFT платформы, представляет собой DWORD с именем UVC-EnablePlatformDmft, и его значение следует задать с помощью дескриптора BOS. В приведенном ниже разделе «Пример композитного устройства» показано включение платформы DMFT с примером дескриптора BOS.
Если вы не можете обновить встроенное ПО устройства, как описано выше, можно использовать пользовательский INF-файл для включения DMFT платформы для устройства.
Пользовательский INF-файл (на основе пользовательского драйвера UVC или инбоксного драйвера UVC) должен содержать следующую запись AddReg:
EnablePlatformDmft: REG_DWORD: 0x0 (отключено) до 0x1 (включено)
Если для этой записи задано значение "Включено" (0x1), конвейер захвата использует входящую платформу DMFT для устройства. Ниже показан пример этого настраиваемого раздела INF:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnablePlatformDmft,0x00010001,0x00000001
В Windows 10 версии 1703, если устройство решит использовать PDMFT, все функции, поддерживаемые PDMFT, включены (на основе возможностей устройства). Подробная настройка функций PDMFT не поддерживается.
Замечание
Координаты ROI на основе лиц вычисляются относительно поля зрения изображения, передаваемого в PDMFT. Если поле зрения было изменено из-за использования элемента управления, такого как масштабирование, сдвиг или наклон или цифровое окно, то камера отвечает за сопоставление предоставленных координат обратно в полную область зрения датчика, учитывая текущее окно масштабирования или сдвига/наклона.
Профиль проверки подлинности лиц с помощью дескрипторов ОС MS
Windows 10 RS5 теперь применяет требование профиля проверки подлинности лиц версии 2 для любой камеры с поддержкой Windows Hello. Для систем на основе MIPI с пользовательским стеком драйверов камеры эта поддержка может быть опубликована с помощью INF (или расширения INF) или через плагин в пользовательском режиме (Device MFT).
Однако для устройств USB Video ограничение с камерами на основе UVC заключается в том, что для Windows 10 19H1 пользовательские драйверы камеры не допускаются. Все камеры на основе UVC должны использовать встроенный драйвер USB Video Class, а все расширения поставщика должны быть реализованы в виде устройства MFT.
Для многих изготовителей оборудования и ODM предпочтительный подход для модулей камеры — реализовать большую часть функциональных возможностей в встроенном ПО модуля, то есть через дескрипторы ОС Майкрософт.
Следующие камеры поддерживаются для публикации профиля аутентификации по лицу через дескрипторы MSOS (также называемые BOS-дескрипторами):
RGB-только камера, используемая в группе датчиков с отдельной камерой IR.
Камера, снимающая только в инфракрасном диапазоне, должна использоваться в группе датчиков вместе с отдельной камерой RGB.
Камера RGB+IR с отдельными контактами IR и RGB.
Замечание
Если встроенное ПО камеры не может соответствовать одному из трех требований, описанных выше, ODM/OEM должен использовать Extension INF, чтобы объявить профиль камеры версии 2.
Пример макета дескриптора ОС Майкрософт
Ниже приведены примеры для следующих спецификаций:
Спецификация расширенных дескрипторов Microsoft OS 1.0
Спецификация дескрипторов Microsoft OS 2.0
Спецификация расширенного дескриптора Microsoft OS 1.0
Дескриптор расширенных свойств ОС имеет два компонента
- Раздел заголовка фиксированной длины
- Один или несколько разделов настраиваемых свойств переменной длины, которые следуют разделу заголовка
Раздел заголовка дескриптора Microsoft OS 1.0
В разделе заголовка описывается одно пользовательское свойство (профиль проверки подлинности лиц).
Offset | Поле | Размер (в байтах) | Ценность | Описание |
---|---|---|---|---|
0 | dwLength | 4 | <> | |
4 | bcdVersion | 2 | 0x0100 | Версия 1.0 |
6 | wIndex | 2 | 0x0005 | Дескриптор расширенных свойств ОС |
8 | wCount | 2 | 0x0001 | Одно пользовательское свойство |
Раздел настраиваемых свойств описателя Microsoft OS 1.0
Offset | Поле | Размер (в байтах) | Ценность | Описание |
---|---|---|---|---|
0 | dwSize | 4 | 0x00000036 (54) | Общий размер (в байтах) для этого свойства. |
4 | dwPropertyDataType | 4 | 0x00000004 | REG_DWORD_LITTLE_ENDIAN |
8 | wPropertyNameLength | 2 | 0x00000024 (36) | Размер (в байтах) имени свойства. |
10 | bPropertyName | 36 | UVC-CPV2FaceAuth | Строка UVC-CPV2FaceAuth в Юникоде. |
46 | dwPropertyDataLength | 4 | 0x00000004 | 4 байта для данных свойств (sizeof(DWORD)). |
50 | bPropertyData | 4 | См. схему данных ниже | См. схему данных ниже. |
Схема полезной нагрузки
Полезная нагрузка UVC-CPV2FaceAuth — 32-разрядное целое число без знака. Высокий порядок 16-разрядного числа представляет собой индекс, начинающийся с 0, списка типов мультимедиа, предоставляемого RGB-контактом. Низкий порядок 16-разрядный представляет 0-разрядный индекс списка типов мультимедиа, предоставляемый пин-кодом IR.
Например, камера типа 3, которая предоставляет следующие типы мультимедиа, в порядке, объявленном из ПИН-кода RGB:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
И следующий тип носителя для ИК:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Значение полезных данных 0x00010000 приведет к публикации следующего профиля проверки подлинности лиц:
Pin0:(RES==1280,720; FRT==30,1; SUT==MJPG) // Второй тип носителя (0x0001)
Pin1:(RES==480,480; FRT==30,1; SUT==L8) // Первый тип носителя (0x0000)
Замечание
На момент написания этой статьи Windows Hello имеет минимальное требование 480x480@7,5fps для RGB-потока и 340x340@15fps для потока IR. Производителям аппаратного обеспечения и OEM необходимо выбрать типы носителей данных, удовлетворяющие этому требованию, при активации профиля распознавания лиц.
Пример камеры типа 1
Для камеры Типа 1, так как нет вывода IR (при условии, что камера Типа 1 будет сопряжена с камерой Типа 2 на машине в группе сенсоров), публикуется только индекс типа носителя RGB. Для индекса типа мультимедиа IR необходимо задать значение 0xFFFF низкого порядка 16-разрядного значения полезных данных.
Например, если камера типа 1 предоставляет следующий список типов носителей:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
Чтобы опубликовать CPV2FaceAuth с помощью MJPG, 1280x720@30fps тип носителя, полезные данные должны быть заданы для 0x0001FFFF.
Пример камеры типа 2
Для камеры типа 2 высокий порядок 16-разрядного числа должен иметь значение 0xFFFF, а низкий порядок 16-разрядного числа указывает на тип носителя IR, который будет использоваться.
Например, для камеры Типа 2 со следующими типами мультимедиа:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Если для проверки подлинности лиц используется первый тип носителя, значение должно быть следующим: 0xFFFF0000.
Спецификация расширенного дескриптора Microsoft OS 2.0
Расширенный дескриптор MSOS 2.0 можно использовать для определения значений реестра для добавления поддержки профиля проверки подлинности лиц. Это делается с помощью дескриптора свойства реестра Microsoft OS 2.0.
Для записи реестра UVC-CPV2FaceAuth представлен следующий образец набора дескрипторов MSOS 2.0:
UCHAR Example2_MSOS20DescriptorSet_UVCFaceAuthForFutureWindows[0x3C] =
{
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength - 10 bytes
0x00, 0x00, // MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x060?0000 for future Windows version
0x3C, 0x00, // wTotalLength – 60 bytes
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x32, 0x00, // wLength - 50 bytes
0x04, 0x00, // wDescriptorType – 4 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD_LITTLE_ENDIAN
0x30, 0x00, // wPropertyNameLength – 36 bytes
0x55, 0x00, 0x56, 0x00, // Property Name - "UVC-CPV2FaceAuth"
0x43, 0x00, 0x2D, 0x00,
0x43, 0x00, 0x50, 0x00,
0x56, 0x00, 0x32, 0x00,
0x46, 0x00, 0x61, 0x00,
0x63, 0x00, 0x65, 0x00,
0x41, 0x00, 0x75, 0x00,
0x74, 0x00, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x00, 0x00, 0x01, 0x00 // PropertyData – 0x00010000 (see Payload Schema)
}
При добавлении записи реестра UVC-CPV2FaceAuth устройствам не нужно публиковать запись реестра EnableDshowRedirection, как описано в руководстве по реализации моста DShow для устройств UVC.
Однако если поставщик устройств должен поддерживать более старые версии Windows и (или) необходимо включить декомпрессию MJPEG в Frame Server, необходимо добавить запись реестра EnableDshowRedirection.
Создание группы датчиков
При создании систем с использованием камер типа 1 и типа 2, обеспечивающих RGB и IR потоки для поддержки Windows Hello, изготовители оборудования должны объявить эти две камеры частью объединённой группы датчиков.
Это делается путем указания тега FSSensorGroupId и FSSensorGroupName в INF-файле расширения, который создается в свойстве интерфейса устройства для каждой камеры.
Однако если расширение INF не предоставлено, ODMs может использовать те же дескрипторы MSOS для публикации значений FSSensorGroupId и FSSensorGroupName. Драйвер USB Video Class для Windows 10 автоматически принимает любой дескриптор MSOS, у которого имя полезной нагрузки начинается с префикса "UVC-", и переносит этот тег в хранилище свойств интерфейса устройства, удаляя префикс "UVC-".
Таким образом, камера Типа 1 и Тип 2, публикующая следующие данные, позволит ОС синтезировать камеры в группу датчиков с несколькими устройствами для использования с Windows Hello:
UVC-FSSensorGroupId
UVC-FSSensorGroupName
Полезные данные для каждого тега должны быть строкой в формате Юникода. Полезные данные UVC-FSSensorGroupId должны быть строкой GUID в следующем формате:
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
Значение GUID должно совпадать между камерами типа 1 и Тип 2, а обе камеры должны быть добавлены в один и тот же физический корпус. Для встроенных камер физический корпус — это сам компьютер. Для внешних камер модули камер типа 1 и Типа 2 должны быть встроены в одно физическое устройство, подключенное к компьютеру.
Категории пользовательских интерфейсов устройств для групп датчиков
Начиная с версии 19H1, Windows предоставляет механизм расширения, указанный IHV/OEM, который позволяет публиковать синтезированные группы датчиков в любую пользовательскую или предопределенную категорию. Создание группы датчиков определяется путем предоставления IHV/OEM ключа идентификатора группы датчиков в пользовательском INF:
FSSensorGroupId: {Custom GUID}
FSSensorGroupName: <дружественное имя, используемое для группы датчиков>
Помимо двух приведенных выше записей AddReg в INF, создается новая запись AddReg для пользовательских категорий.
FSSensorGroupCategoryList: {GUID}; {GUID};...; {GUID}
Несколько категорий определяются с помощью списка GUID, разделенного точкой с запятой (;).
Каждое устройство, объявляющее соответствующее FSSensorGroupId, должно объявить тот же FSSensorGroupCategoryList. Если список не соответствует, все списки игнорируются, а группа датчиков публикуется по умолчанию в KSCATEGORY_SENSOR_GROUP, как если бы пользовательские категории не были определены.
Поворот камеры
См ориентацию устройства камеры.
Кэш элементов управления UVC
Дескриптор BOS и MS OS 2.0
Камера с поддержкой UVC может указать значения конфигурации устройств Windows в дескрипторе платформенной возможности BOS в своем встроенном ПО, используя дескрипторы Microsoft OS 2.0. См. документацию по дескриптору MS OS 2.0, чтобы понять, как указать допустимый дескриптор BOS, который передает конфигурацию устройства операционной системе.
Заголовок набора дескрипторов Microsoft OS версии 2.0
Offset | Поле | Размер (в байтах) | Описание |
---|---|---|---|
0 | wLength | 2 | Длина в байтах этого заголовка должна составлять 10. |
2 | wDescriptorType | 2 | MSOS20_SET_HEADER_DESCRIPTOR |
4 | dwWindowsVersion | 4 | Версия Windows. |
8 | wTotalLength | 2 | Размер всего набора дескрипторов MS OS 2.0, включая этот размер заголовка. |
Дескриптор свойства реестра Microsoft OS 2.0
Offset | Поле | Размер (в байтах) | Описание |
---|---|---|---|
0 | wLength | 2 | Длина в байтах этого дескриптора |
2 | wDescriptorType | 2 | MS_OS_20_FEATURE_REG_PROPERTY |
4 | тип_данных_свойства_w | 2 | 0x04 (REG_DWORD_LITTLE_ENDIAN) |
6 | wPropertyNameLength | 2 | Длина имени свойства. |
8 | ИмяСвойства | Переменная | Имя свойства реестра. |
8+M | wPropertyDataLength | 2 | Длина данных свойства. |
10+ млн | Данные собственности | Переменная | Данные свойств |
Если допустимый дескриптор MS OS 2.0 указан в встроенном ПО, USB-стек копирует значения конфигурации в раздел реестра HW Устройства, показанный ниже:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<Device ID>\<Instance ID>\Device Parameters
Драйвер UVC считывает значения конфигурации из раздела реестра устройства HW и настраивает устройство в ОС соответствующим образом. Например, если встроенное ПО указывает зарегистрировать устройство как камеру-датчик, используя значение конфигурации, драйвер UVC регистрирует устройство в данной категории.
Настройка устройств UVC с помощью дескриптора BOS платформы — это механизм, который был включен в Windows 10 версии 1703, чтобы помочь поставщикам устройств UVC настроить устройство без необходимости INF-файла в ОС Windows.
Настройка устройств UVC с помощью пользовательского файла INF по-прежнему поддерживается и имеет приоритет над механизмом дескриптора BOS. При указании свойств устройства с помощью INF не требуется добавлять префикс UVC-. Этот префикс необходим только для свойств устройства, указанных с помощью дескриптора BOS и специфичных для каждого отдельного экземпляра интерфейса. Если вашему устройству нужны плагины пользовательского режима, такие как DMFT, необходимо указать INF-файл для установки DMFT. Его нельзя настроить с помощью встроенного ПО.
В настоящее время поддерживаются значения конфигурации с помощью дескриптора BOS
Имя конфигурации | Тип | Описание |
---|---|---|
SensorCameraMode | REG_DWORD | Зарегистрируйте камеру в определенной категории. |
UVC-FSSensorGroupID, UVC-FSSensorGroupName | REG_SZ | Группирование камер с тем же UVC-FSSensorGroupID |
UVC-EnableDependentStillPinCapture | REG_DWORD | Для включения режима съемки 2/3 |
UVC-EnablePlatformDmft | REG_DWORD | Для включения платформы DMFT |
Когда драйвер UVC видит значения реестра с префиксом UVC-, он заполняет ключ реестра экземпляра категории интерфейса устройства теми же значениями без префикса. Драйвер выполняет это для любой переменной, указанной встроенным ПО, но и для всех других, а не только перечисленных выше.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}\<Device Symbolic Link>\Device Parameters
Чтобы ОС использовала платформенные возможности устройства BOS и дескрипторы MS OS 2.0, в дескрипторе устройства должна быть указана версия bcdUSB, равная 0x0210 или более.
Пример составного устройства
В этом разделе представлен дескриптор BOS и дескриптор MS OS 2.0 для примера составного устройства с двумя функциями камеры. Одна из функций — это цветовая камера UVC, а вторая — камера IR UVC.
Примеры дескрипторов приведены следующим образом:
Регистрация функции цветовой камеры в KSCATEGORY_VIDEO_CAMERA
Регистрация функции камеры IR в KSCATEGORY_SENSOR_CAMERA
Включение функции захвата неподвижного изображения цветовой камерой
Связывает цвет и функции камеры IR в качестве группы
При перечислении устройства стек USB извлекает дескриптор BOS с устройства. После дескриптора BOS используется возможность конкретного устройства для конкретной платформы.
#include <usbspec.h>
const BYTE USBVideoBOSDescriptor[0x21] =
{
/* BOS Descriptor */
0x05, // Descriptor size
USB_BOS_DESCRIPTOR_TYPE, // Device descriptor type BOS
0x21, 0x00, // Length 0x21 (33) this and all sub descriptors
0x01, // Number of device capability descriptors
/* Platform Device Capability Descriptor */
0x1C, // 28 bytes bLength
USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE, // Platform Descriptor type
USB_DEVICE_CAPABILITY_PLATFORM, // bDevCapabilityType PLATFORM
0, // bReserved
0xDF, 0x60, 0xDD, 0xD8, // PlatformCapabilityUUID
0x89, 0x45, // MS OS2.0 Descriptor
0xC7, 0x4C, // D8DD60DF-4589-4CC7-9CD2-659D9E648A9F
0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F,
// CapabilityData
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion for Windows 10 and later
0xC8, 0x02, // wLength 0x2C8 (712)
0x01, // bMS_VendorCode - any value. e.g. 0x01
0x00 // bAltEnumCmd 0
};
Дескриптор возможностей платформы BOS:
Дескриптор возможностей платформы MS OS 2.0 GUID
Код управления поставщика bMS_VendorCode (здесь установлено значение 1, но можно задать любое значение, которое предпочитает поставщик) для получения дескриптора MS OS 2.0.
Этот дескриптор BOS применим для ОС версии Windows 10 и более поздних версий.
После просмотра дескриптора BOS стек USB выдает запрос на управление, специфичный для поставщика, чтобы получить дескриптор MS OS 2.0.
Формат запроса элемента управления для получения дескриптора MS OS 2.0 для конкретного поставщика:
bmRequestType | BRequest | wValue | WIndex | wLength | Данные |
---|---|---|---|---|---|
1100 0000B | bMS_VendorCode | 0x00 | 0x07 | Длина | Набор дескрипторов MS OS 2.0, возвращенный в виде большого двоичного объекта |
bmRequestType
Направление передачи данных — устройство на хост
Тип — поставщик
Получатель — устройство
bRequest
Значение bMS_VendorCode , возвращаемое в структуре сведений набора дескрипторов.
wValue
Установите значение 0x00.
wIndex
0x7 для MS_OS_20_DESCRIPTOR_INDEX.
wLength
Длина набора дескрипторов MS OS 2.0, возвращенная в дескрипторе BOS. 0x25C (604) в этом примере.
Ожидается, что устройство вернет дескриптор MS OS 2.0, как указано в usbVideoMSOS20DescriptorSet.
UsbVideoMSOS20DescriptorSet описывает функции цвета и IR. Он задает следующие значения дескриптора MS OS 2.0:
Установка заголовка
Заголовок подмножества конфигурации
Заголовок подмножества функций цветовой камеры
Дескриптор функции "Значение реестра" для идентификатора группы датчиков
Описание параметра значения реестра для обозначения группы датчиков
Дескриптор функции значения реестра для включения захвата статического изображения
Дескриптор компонента значения реестра для включения DMFT платформы
Заголовок подмножества функции камеры IR
Дескриптор функции значения реестра для идентификатора группы датчиков
Дескриптор компонента значения реестра для имени группы датчиков
Дескриптор объекта значения реестра для регистрации камеры в качестве сенсорной камеры
Встроенное ПО будет иметь обработчик для запроса поставщика, который вернет следующий дескриптор MS OS 2.0 для мнимого устройства, описанного в начале этого раздела.
UCHAR USBVideoMSOS20DescriptorSet[0x2C8] =
{
/* Microsoft OS 2.0 Descriptor Set Header */
0x0A, 0x00, // wLength of MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, // wDescriptorType == MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion – 0x10000000 for Windows 10
0xC8, 0x02, // wTotalLength - Total length 0x2C8 (712)
/* Microsoft OS 2.0 Configuration Subset Header */
0x08, 0x00, // wLength of MSOS20_SUBSET_HEADER_CONFIGURATION
0x01, 0x00, // wDescriptorType == MSOS20_SUBSET_HEADER_CONFIGURATION
0x00, // bConfigurationValue set to the first configuration
0x00, // bReserved set to 0.
0xBE, 0x02, // wTotalLength - Total length 0x2BE (702)
/****************Color Camera Function******************/
/* Microsoft OS 2.0 Function Subset Header */
0x08, 0x00, // wLength of MSOS20_SUBSET_HEADER_FUNCTION
0x02, 0x00, // wDescriptorType == MSOS20_SUBSET_HEADER_FUNCTION
0x00, // bFirstInterface field of the first IAD
0x00, // bReserved set to 0.
0x6E, 0x01, // wSubsetLength - Length 0x16E (366)
/****************Register the Color Camera in a sensor group******************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x80, 0x00, // wLength 0x80 (128) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x28, 0x00, // wPropertyNameLength – 0x28 (40) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupID"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'I', 0x00,
'D', 0x00, 0x00, 0x00,
0x4E, 0x00, // wPropertyDataLength – 0x4E (78) bytes
// FSSensorGroupID GUID in string format:
// "{20C94C5C-F402-4F1F-B324-0C1CF0257870}"
'{', 0x00, '2', 0x00, // This is just an example GUID.
'0', 0x00, 'C', 0x00, // You need to generate and use your
'9', 0x00, '4', 0x00, // own GUID for the sensor group ID
'C', 0x00, '5', 0x00,
'C', 0x00, '-', 0x00,
'F', 0x00, '4', 0x00,
'0', 0x00, '2', 0x00,
'-', 0x00, '4', 0x00,
'F', 0x00, '1', 0x00,
'F', 0x00, '-', 0x00,
'B', 0x00, '3', 0x00,
'2', 0x00, '4', 0x00,
'-', 0x00, '0', 0x00,
'C', 0x00, '1', 0x00,
'C', 0x00, 'F', 0x00,
'0', 0x00, '2', 0x00,
'5', 0x00, '7', 0x00,
'8', 0x00, '7', 0x00,
'0', 0x00, '}', 0x00,
0x00, 0x00,
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x56, 0x00, // wLength 0x56 (86) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x2C, 0x00, // wPropertyNameLength – 0x2C (44) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupName"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'N', 0x00,
'a', 0x00, 'm', 0x00,
'e', 0x00, 0x00, 0x00,
0x20, 0x00, // wPropertyDataLength – 0x20 (32) bytes
// FSSensorGroupName "YourCameraGroup"
'Y', 0x00, 'o', 0x00,
'u', 0x00, 'r', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 0x00, 0x00,
/****************Enable Still Image Capture for Color Camera************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x54, 0x00, // wLength 0x54 (84) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x46, 0x00, // wPropertyNameLength – 0x46 (70) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-EnableDependentStillPinCapture"
'C', 0x00, '-', 0x00,
'E', 0x00, 'n', 0x00,
'a', 0x00, 'b', 0x00,
'l', 0x00, 'e', 0x00,
'D', 0x00, 'e', 0x00,
'p', 0x00, 'e', 0x00,
'n', 0x00, 'd', 0x00,
'e', 0x00, 'n', 0x00,
't', 0x00, 'S', 0x00,
't', 0x00, 'i', 0x00,
'l', 0x00, 'l', 0x00,
'P', 0x00, 'i', 0x00,
'n', 0x00, 'C', 0x00,
'a', 0x00, 'p', 0x00,
't', 0x00, 'u', 0x00,
'r', 0x00, 'e', 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00, // Enable still pin capture using Method 2 or Method 3
/****************Enable Platform DMFT for ROI-capable USB Camera************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x3C, 0x00, // wLength 0x3C (60) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x2E, 0x00, // wPropertyNameLength – 0x2E (46) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-EnablePlatformDmft"
'C', 0x00, '-', 0x00,
'E', 0x00, 'n', 0x00,
'a', 0x00, 'b', 0x00,
'l', 0x00, 'e', 0x00,
'P', 0x00, 'l', 0x00,
'a', 0x00, 't', 0x00,
'f', 0x00, 'o', 0x00,
'r', 0x00, 'm', 0x00,
'D', 0x00, 'm', 0x00,
'f', 0x00, 't', 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00, // Enable Platform DMFT
/****************IR Camera Function*********************************************/
/* Microsoft OS 2.0 Function Subset Header */
0x08, 0x00, // wLength of MSOS20_SUBSET_HEADER_FUNCTION
0x02, 0x00, // wDescriptorType == MSOS20_SUBSET_HEADER_FUNCTION
0x01, // bFirstInterface set of the second function
0x00, // bReserved set to 0.
0x48, 0x01, // wSubsetLength - Length 0x148 (328)
/********Register the IR Camera to the same sensor group as the Color Camera*****/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x80, 0x00, // wLength 0x80 (128) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x28, 0x00, // wPropertyNameLength – 0x28 (40) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupID"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'I', 0x00,
'D', 0x00, 0x00, 0x00,
0x4E, 0x00, // wPropertyDataLength – 78 bytes
// FSSensorGroupID GUID in string format:
// "{20C94C5C-F402-4F1F-B324-0C1CF0257870}"
'{', 0x00, '2', 0x00,
'0', 0x00, 'C', 0x00,
'9', 0x00, '4', 0x00,
'C', 0x00, '5', 0x00,
'C', 0x00, '-', 0x00,
'F', 0x00, '4', 0x00,
'0', 0x00, '2', 0x00,
'-', 0x00, '4', 0x00,
'F', 0x00, '1', 0x00,
'F', 0x00, '-', 0x00,
'B', 0x00, '3', 0x00,
'2', 0x00, '4', 0x00,
'-', 0x00, '0', 0x00,
'C', 0x00, '1', 0x00,
'C', 0x00, 'F', 0x00,
'0', 0x00, '2', 0x00,
'5', 0x00, '7', 0x00,
'8', 0x00, '7', 0x00,
'0', 0x00, '}', 0x00,
0x00, 0x00,
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x56, 0x00, // wLength 0x56 (86) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x2C, 0x00, // wPropertyNameLength – 0x2C (44) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupName"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'N', 0x00,
'a', 0x00, 'm', 0x00,
'e', 0x00, 0x00, 0x00,
0x20, 0x00, // wPropertyDataLength – 32 bytes
// FSSensorGroupName "YourCameraGroup"
'Y', 0x00, 'o', 0x00,
'u', 0x00, 'r', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 0x00, 0x00,
/****************Make IR camera visible to applications*********************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x30, 0x00, // wLength 0x30 (48) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x22, 0x00, // wPropertyNameLength – 0x22 (34) bytes
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'M', 0x00, 'o', 0x00,
'd', 0x00, 'e', 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00, // This exposes the camera to OS as an IR only camera
// i.e. KSCATEGORY_SENSOR_CAMERA
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x3A, 0x00, // wLength 0x3A (58) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x2C, 0x00, // wPropertyNameLength – 0x2C (44) bytes
'S', 0x00, 'k', 0x00,
'i', 0x00, 'p', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'E', 0x00, 'n', 0x00,
'u', 0x00, 'm', 0x00,
'e', 0x00, 'r', 0x00,
'a', 0x00, 't', 0x00,
'i', 0x00, 'o', 0x00,
'n', 0x00, 0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00 // This exposes the camera to applications looking for IR only cameras
};