Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
À compter de Windows 10, un pilote UVC (Inbox Video Class) est fourni pour les appareils conformes à la spécification usb Video Class (versions 1.0 à 1.5). Ce pilote prend en charge les caméras de type couleur et capteur. Ce document explique comment exposer certaines fonctionnalités d’une caméra compatible UVC aux applications via le pilote de boîte de réception.
Terminologie
| Mot-clé | Descriptif |
|---|---|
| UVC | Classe vidéo USB |
| Pilote UVC | USBVideo.sys pilote fourni avec le système d’exploitation |
| IR | Infrarouge |
| Caméra couleur | Caméra qui génère des flux de couleurs (par exemple, des caméras RVB ou YUV) |
| Caméra de capteur | Caméra qui génère des flux sans couleur (par exemple, des caméras ir ou de profondeur) |
| BOS | Magasin d’objets d’appareil binaire |
| Descripteur MS OS 2.0 | Descripteur de fonctionnalité d’appareil BOS spécifique à la plateforme Microsoft |
Caméras de capteur
Windows prend en charge deux catégories d’appareils photo. L’une est une caméra de couleur et l’autre est une caméra de capteur non couleur. Les caméras RVB ou YUV sont classées en tant que caméras de couleur, tandis que les caméras monochromes telles qu'à échelle de gris, les caméras IR et de profondeur sont classées comme caméras capteurs. Le pilote UVC prend en charge les deux types de caméras. Nous recommandons que le firmware de la caméra spécifie une valeur en fonction de laquelle le pilote UVC enregistrerait la caméra sous une ou les deux catégories prises en charge.
Une caméra qui prend en charge les types de format de couleur uniquement doit être inscrite sous KSCATEGORY_VIDEO_CAMERA. Une caméra qui prend en charge les types de format IR ou Profondeur uniquement doit être enregistrée sous KSCATEGORY_SENSOR_CAMERA. Une caméra qui prend en charge les types de format couleur et non couleur doit être inscrite sous KSCATEGORY_VIDEO_CAMERA et KSCATEGORY_SENSOR_CAMERA. Cette catégorisation permet aux applications de sélectionner l’appareil photo avec lequel ils souhaitent travailler.
Une caméra UVC peut spécifier sa préférence de catégorie par le biais d’attributs, SensorCameraMode et SkipCameraEnumeration, dans son descripteur BOS MS OS 2.0 détaillé dans les sections suivantes.
L’attribut SensorCameraMode prend une valeur 1 ou 2.
La valeur 1 inscrit l’appareil sous KSCATEGORY_SENSOR_CAMERA. En plus de cela, spécifiez la valeur 1 pour SkipCameraEnumeration pour rendre la caméra disponible pour les applications qui recherchent uniquement les caméras de capteur. Une caméra qui expose uniquement les types de supports de caméra de capteur doit utiliser cette valeur.
La valeur 2 pour SensorCameraMode inscrit l’appareil sous KSCATEGORY_SENSOR_CAMERA &KSCATEGORY_VIDEO_CAMERA. Cela rend l’appareil photo disponible pour les applications à la recherche de capteurs et de caméras de couleur. Une caméra qui expose à la fois la caméra de capteur et les types de supports de caméra couleur doivent utiliser cette valeur.
Nous vous recommandons de spécifier la valeur de Registre mentionnée ci-dessus à l’aide du descripteur BOS. Reportez-vous à la section Exemple d’appareil composite ci-dessous pour obtenir un exemple de descripteur BOS avec un descripteur MS OS 2.0 spécifique à la plateforme.
Si vous ne pouvez pas mettre à jour le microprogramme de l’appareil comme décrit ci-dessus, vous pouvez utiliser un INF personnalisé et spécifier que votre caméra doit être inscrite en tant que caméra de capteur en spécifiant une valeur pour SensorCameraMode et SkipCameraEnumeration comme suit :
Un fichier INF personnalisé (basé sur le pilote UVC de la boîte de réception) doit inclure les entrées AddReg suivantes :
SensorCameraMode : REG_DWORD : 1 (pour s’inscrire en tant que caméra de capteur)
SkipCameraEnumeration : REG_DWORD : 1 (rendre disponible uniquement pour les applications IR)
Voici un exemple de la section INF personnalisée :
[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
Si les attributs SensorCameraMode et SkipCameraEnumeration ne sont pas spécifiés dans le microprogramme ou l’INF, l’appareil photo est inscrit en tant que caméra couleur et sera visible seulement pour les applications prenant en charge les caméras couleur.
Flux infrarouge
Le pilote de classe vidéo USB de boîte de réception Windows (UVC) prend en charge les caméras qui capturent la scène au format YUV et transmettent les données de pixel sur USB sous forme de images YUV non compressées ou en tant que trames MJPEG compressées.
Les GUID de type de format suivants doivent être spécifiés dans le descripteur de format vidéo en streaming, tel que défini dans le fichier d'en-tête WDK ksmedia.h.
| Catégorie | Descriptif |
|---|---|
| KSDATAFORMAT_SUBTYPE_L8_IR | Plan luma non compressé 8 bits. Ce type est mappé à MFVideoFormat_L8. |
| KSDATAFORMAT_SUBTYPE_L16_IR | Plan luma 16 bits non compressé. Ce type est mappé à MFVideoFormat_L16. |
| KSDATAFORMAT_SUBTYPE_MJPG_IR | Images MJPEG compressées. Media Foundation convertit cela en images NV12 non compressées et utilise uniquement le plan luma. |
Lorsque ces GUID de type de format sont spécifiés dans le champ guidFormat du descripteur de trame, le pipeline de capture Media Foundation marque le flux en tant que flux IR. Les applications écrites avec l'API Media Foundation FrameReader pourront consommer le flux IR. Aucune mise à l’échelle ou conversion des trames IR n’est prise en charge par le pipeline pour les flux IR.
Un flux qui expose des types de format IR ne doit pas exposer des types de format RVB ou de profondeur.
// 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;
Remarque
** Les flux infrarouges apparaîtront dans DShow comme des flux de capture ordinaires.
Flux de profondeur
Le pilote de classe vidéo USB de boîte de réception Windows prend en charge les caméras qui produisent des flux de profondeur. Ces caméras capturent les informations de profondeur (par exemple, le temps de vol) de la scène et transmettent la carte de profondeur sous forme d’images YUV non compressées sur USB. Le GUID de type de format suivant doit être spécifié dans le descripteur de format vidéo de flux, tel que défini dans le fichier d’en-tête WDK ksmedia.h :
| Catégorie | Descriptif |
|---|---|
| KSDATAFORMAT_SUBTYPE_D16 | Valeurs de la carte de profondeur 16 bits. Ce type est identique à MFVideoFormat_D16. Les valeurs sont en millimètres. |
Lorsque le GUID du type de format est spécifié dans le membre guidFormat du descripteur de trame, le pipeline de capture Media Foundation identifie le flux comme un flux de profondeur. Les applications écrites avec l’API FrameReader pourront consommer le flux de profondeur. Aucune mise à l’échelle ou conversion des trames de profondeur n’est prise en charge par le pipeline pour les flux de profondeur.
Un flux exposant les types de format de profondeur ne doit pas exposer les types de format RVB ou 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;
Remarque
Les flux de profondeur s’affichent en tant que flux de capture standard dans DShow.
Regroupement de caméras
Windows prend en charge le regroupement de caméras en fonction de leur ID de conteneur pour aider les applications à utiliser des caméras associées. Par exemple, une caméra IR et une caméra couleur présentes sur le même appareil physique peuvent être exposés au système d’exploitation en tant que caméras associées. Cela permet aux applications telles que Windows Hello d'utiliser les caméras associées dans leurs scénarios.
La relation entre les fonctions de la caméra peut être spécifiée dans le descripteur BOS de la caméra dans le microprogramme. Le pilote UVC utilisera ces informations et expose ces fonctions de caméra comme connexes. Cela permet à la pile de caméras du système d'exploitation de les présenter comme un groupe associé de caméras aux applications.
Le microprogramme de la caméra doit spécifier un UVC-FSSensorGroupID, qui est un GUID sous forme de chaîne avec des accolades. Les caméras qui ont le même UVC-FSSensorGroupID seront regroupées.
Le groupe de capteurs peut avoir un nom en spécifiant UVC-FSSensorGroupName, une chaîne Unicode, dans le microprogramme.
Reportez-vous à la section Exemple d’appareil composite ci-dessous pour obtenir un exemple illustrant BOS qui spécifie UVC-FSSensorGroupID et UVC-FSSensorGroupName.
Si vous ne pouvez pas mettre à jour le microprogramme de l’appareil comme décrit ci-dessus, vous pouvez utiliser un INF personnalisé et spécifier que votre appareil photo fait partie d’un groupe de capteurs en spécifiant un ID et un nom de groupe de capteurs comme suit. Le fichier INF personnalisé (basé sur le pilote UVC de la boîte de réception) doit inclure les entrées AddReg suivantes :
FSSensorGroupID : REG_SZ : « {your sensor group ID GUID} »
FSSensorGroupName : REG_SZ : « nom convivial de votre groupe de capteurs »
Voici un exemple pour la section INF personnalisée :
[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%
Remarque
Les groupes de capteurs ne sont pas pris en charge dans le pipeline de capture DShow.
La méthode 2 ou la méthode 3 capture toujours la prise en charge.
La spécification UVC fournit un mécanisme permettant de spécifier si l’interface de diffusion vidéo prend en charge la capture d’image fixe du type Méthode 1/2/3. ** Pour que le système d'exploitation puisse exploiter la prise en charge de la capture d'image fixe par Méthode 2/3 de l'appareil, via le pilote UVC, le microprogramme de l'appareil doit être capable de spécifier une valeur dans le descripteur BOS.
La valeur à spécifier pour activer la capture d’image de la méthode 2/3 est un DWORD nommé UVC-EnableDependentStillPinCapture. Spécifiez sa valeur à l’aide du descripteur BOS. L’exemple d’appareil composite ci-dessous illustre l’activation de la capture d’images avec un exemple de descripteur BOS.
Si vous ne pouvez pas mettre à jour le microprogramme de l’appareil comme décrit ci-dessus, vous pouvez utiliser un INF personnalisé pour spécifier que votre appareil photo prend en charge la méthode 2 ou la méthode 3 de capture.
Le fichier INF personnalisé (basé sur un pilote UVC personnalisé ou un pilote UVC de boîte de réception) doit inclure l’entrée AddReg suivante :
EnableDependentStillPinCapture : REG_DWORD : de 0x0 (désactivé) à 0x1 (activé)
Lorsque cette entrée est activée (0x1), le pipeline de capture utilise la méthode 2/3 pour la capture d'images fixes (en supposant que le microprogramme annonce également la prise en charge de la méthode 2/3 conformément aux spécifications UVC).
Voici un exemple pour la section INF personnalisée :
[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
Chaînage MFT de l’appareil
Device MFT est le mécanisme de plug-in en mode utilisateur recommandé pour les IHVS et les OEM afin d’étendre la fonctionnalité de caméra sur Windows.
Avant Windows 10, version 1703, le pipeline de caméra ne prend en charge qu’un seul plug-in d’extension DMFT.
À partir de Windows 10, version 1703, le pipeline de caméra Windows prend en charge une chaîne facultative de DMFT avec un maximum de deux DMFT.
À partir de Windows 11, version 22H2, la chaîne de traitement vidéo de Windows permet la mise en œuvre d'une série optionnelle de DMFT avec un maximum de quatre DMFT.
Cela offre une plus grande flexibilité pour les OEM et les IHVS afin de fournir une valeur ajoutée sous la forme de flux de caméra post-traitement. Par exemple, un appareil peut utiliser PDMFT avec un DMFT IHV et un DMFT OEM.
La figure suivante illustre l’architecture impliquant une chaîne de DMFTs.
Les échantillons circulent depuis le pilote de caméra vers DevProxy, puis passent par les chaînes DMFT. Chaque DMFT dans la chaîne a la possibilité de traiter l’échantillon. Si le DMFT ne souhaite pas traiter l’échantillon, il peut agir en tant que transitaire en transférant simplement l'échantillon au DMFT suivant.
Pour les contrôles tels que KsProperty, l’appel est transféré en amont : le dernier DMFT de la chaîne reçoit l’appel en premier. L’appel peut être traité à cet endroit ou être passé au DMFT précédent dans la chaîne.
Les erreurs sont propagées de DMFT à DTM, puis aux applications. Pour les DMFT IHV/OEM, si un DMFT échoue à initialiser, cela constitue une erreur irrécupérable pour DTM.
Exigences concernant les DMFT :
Le nombre de broches d'entrée de la DMFT doit correspondre au nombre de broches de sortie de la DMFT précédente, sinon DTM échouera lors de l'initialisation. Toutefois, les nombres d’broches d’entrée et de sortie du même DMFT n’ont pas besoin de correspondre.
DMFT doit prendre en charge les interfaces - IMFDeviceTransform, IMFShutdown, IMFRealTimeClientEx, IKsControl et IMFMediaEventGenerator ; IMFTransform peut avoir besoin d’être pris en charge s’il existe MFT0 configuré ou si le DMFT suivant dans la chaîne nécessite la prise en charge de IMFTransform.
Sur les systèmes 64 bits qui n’utilisent pas Frame Server, les DMFT 32 bits et 64 bits doivent être enregistrés. Étant donné qu'une caméra USB peut être branchée dans un système arbitraire, pour les caméras USB « externes » (ou non intégrées), le fournisseur de caméras USB doit fournir à la fois des DMFT en versions 32 bits et 64 bits.
Configuration de la chaîne DMFT
Un appareil photo peut éventuellement fournir un objet DMFT COM dans une DLL à l’aide d’un fichier INF personnalisé qui utilise des sections de la boîte de réception USBVideo.INF.
Dans la section « Interface AddReg » du fichier .INF personnalisé, spécifiez les CLSID DMFT en ajoutant l’entrée de Registre suivante :
CameraDeviceMftCLSIDChain (REG_MULTI_SZ) %Dmft0.CLSID%,%Dmft. CLSID%,%Dmft2.CLSID%
Comme indiqué dans l’exemple de paramètres INF ci-dessous (remplacez les% 0.CLSID %Dmftet % Dmft1.CLSID% par les chaînes CLSID réelles que vous utilisez pour vos DMFTs), il existe au maximum 2 CLSID autorisés dans Windows 10, version 1703, et la première est la plus proche de DevProxy et la dernière est la dernière DMFT dans la chaîne.
La plateforme DMFT CLSID est {3D096DDE-8971-4AD5-98F9-C74F56492630}.
Voici un exemple de paramètres CameraDeviceMftCLSIDChain :
Aucune DMFT d'IHV/OEM ni de DMFT de plateforme
- CameraDeviceMftCLSIDChain = « » (ou aucune nécessité de spécifier cette entrée de Registre)
IHV/OEM DMFT
- CameraDeviceMftCLSIDChain = %Dmft.CLSID%
Plateforme DMFT <-> IHV/OEM DMFT
CameraDeviceMftCLSIDChain = « {3D096DDE-8971-4AD5-98F9-C74F56492630} »,%Dmft.CLSID%
Voici une capture d’écran de la clé de registre du résultat pour une caméra USB avec la plateforme DMFT et une DMFT (avec GUID {D671BE6C-FDB8-424F-81D7-03F5B1CE2CC7}) dans la chaîne de traitement.
IHV/OEM DMFT0 <-> IHV/OEM DMFT1
- CameraDeviceMftCLSIDChain = %Dmft0.CLSID%,%Dmft1.CLSID%,
Remarque
CameraDeviceMftCLSIDChain peut avoir un maximum de 2 CLSID.
Si CameraDeviceMftCLSIDChain est configuré, les paramètres hérités de CameraDeviceMftCLSID sont ignorés par DTM.
Si CameraDeviceMftCLSIDChain n’est pas configuré et que le CameraDeviceMftCLSID hérité est configuré, la chaîne se présenterait ainsi : (si c'est une caméra USB et qu'elle est prise en charge par Platform DMFT et que Platform DMFT est activée) DevProxy <–> Platform DMFT <–> OEM/IHV DMFT, ou (si la caméra n’est pas prise en charge par Platform DMFT ou que Platform DMFT est désactivée) DevProxy <–> OEM/IHV DMFT.
Exemple de paramètres de fichier 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 du dispositif de plateforme
À compter de Windows 10, version 1703, Windows fournit une boîte de réception MFT pour les caméras UVC appelées Platform DMFT (PDMFT) sur une base d’adhésion. Ce DMFT permet aux IMV et aux OEM de tirer parti des algorithmes de post-traitement fournis par Windows.
| Fonctionnalités prises en charge par Platform DMFT | Lancement de Windows |
|---|---|
| Active la Région d'Intérêt (ROI) basée sur le visage pour les ajustements 3A dans les caméras USB compatibles avec le ROI. | Windows 10 version 1703 |
Remarque
Si la caméra ne prend pas en charge le ROI basé sur UVC 1.5, alors le PDMFT ne se charge pas même si l'appareil a opté pour l'utiliser.
Une caméra UVC peut choisir d’utiliser la plateforme DMFT en spécifiant enablePlatformDmft via le descripteur BOS.
La valeur à spécifier pour activer Platform DMFT est un DWORD par nom UVC-EnablePlatformDmft et spécifiez sa valeur à l’aide du descripteur BOS. La section Exemple d’appareil composite ci-dessous illustre l’activation de Platform DMFT avec un exemple de descripteur BOS.
Si vous ne pouvez pas mettre à jour le microprogramme de l’appareil comme décrit ci-dessus, vous pouvez utiliser un fichier INF personnalisé pour activer platform DMFT pour l’appareil.
Le fichier INF personnalisé (basé sur un pilote UVC personnalisé ou un pilote UVC de boîte de réception) doit inclure l’entrée AddReg suivante :
EnablePlatformDmft : REG_DWORD : 0x0 (désactivé) à 0x1 (activé)
Lorsque cette entrée est définie sur Activé (0x1), le pipeline de capture utilise le DMFT de la plateforme de boîte de réception pour l’appareil. Voici un exemple de cette section INF personnalisée :
[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
Dans Windows 10, version 1703, si un appareil choisit d’utiliser PDMFT, toutes les fonctionnalités prises en charge par le PDMFT sont activées (en fonction des fonctionnalités de l’appareil). La configuration granulaire des fonctionnalités PDMFT n’est pas prise en charge.
Remarque
Les coordonnées de la ROI liées aux visages sont calculées par rapport au champ de vision de l’image transmise dans le PDMFT. Si le champ d’affichage a été modifié en raison de l’utilisation d’un contrôle tel que Zoom, Panoramique ou Inclinaison ou Fenêtre numérique, la caméra est chargée de mapper les coordonnées fournies au champ complet de vue du capteur, compte tenu de la fenêtre de zoom/panoramique actuelle.
Profil d’authentification visage via les descripteurs MS OS
Windows 10 RS5 applique désormais une exigence de profil d’authentification faciale V2 pour n’importe quelle caméra avec prise en charge de Windows Hello. Pour les systèmes basés sur MIPI avec une pile de pilotes de caméra personnalisée, cette prise en charge peut être publiée soit via un INF (ou une extension INF), soit par l'intermédiaire d'un plug-in en mode utilisateur (MFT du périphérique).
Toutefois, pour les périphériques VIDÉO USB, une contrainte avec des caméras UVC est que pour Windows 10 19H1, les pilotes de caméra personnalisée ne sont pas autorisés. Toutes les caméras UVC doivent utiliser le pilote USB Video Class intégré et toutes les extensions de fournisseur doivent être implémentées sous la forme d'une MFT de périphérique.
Pour de nombreux fabricants OEM/ODM, l’approche recommandée pour les modules de caméra consiste à implémenter une grande partie des fonctionnalités dans le microprogramme du module, c’est-à-dire via les descripteurs microsoft OS.
Les caméras suivantes sont prises en charge pour publier le profil d’authentification faciale via les descripteurs MSOS (également appelés descripteurs BOS) :
Caméra RVB à utiliser uniquement dans le groupe de capteurs avec une caméra IR distincte.
Caméra IR uniquement à utiliser dans un groupe de capteurs avec une caméra RVB distincte.
Caméra RVB+IR avec des broches IR et RVB distinctes.
Remarque
Si le microprogramme de la caméra ne peut pas répondre à l’une des trois exigences décrites ci-dessus, odM/OEM doit utiliser un INF d’extension pour déclarer le profil de caméra V2.
Exemple de disposition du descripteur du système d’exploitation Microsoft
Les exemples suivants sont inclus ci-dessous pour les spécifications suivantes :
Spécification des descripteurs étendus du système d’exploitation Microsoft 1.0
Spécification des descripteurs Microsoft OS 2.0
Spécification du descripteur étendu du système d’exploitation Microsoft 1.0
Le descripteur de système d’exploitation des propriétés étendues a deux composants
- Section d’en-tête de longueur fixe
- Une ou plusieurs sections de propriétés personnalisées de longueur variable, qui suivent la section d’en-tête
Section En-tête du descripteur Microsoft OS 1.0
La section En-tête décrit une propriété personnalisée unique (Profil d’authentification visage).
| Offset | Terrain | Taille (octets) | Valeur | Descriptif |
|---|---|---|---|---|
| 0 | dwLength | 4 | <> | |
| 4 | bcdVersion | 2 | 0x0100 | Version 1.0 |
| 6 | wIndex | 2 | 0x0005 | Descripteur de propriété étendue du système d'exploitation |
| 8 | wCount | 2 | 0x0001 | Une propriété personnalisée |
Section de propriétés personnalisées du descripteur Microsoft OS 1.0
| Offset | Terrain | Taille (octets) | Valeur | Descriptif |
|---|---|---|---|---|
| 0 | dwSize | 4 | 0x00000036 (54) | Taille totale (en octets) de cette propriété. |
| 4 | dwPropertyDataType | 4 | 0x00000004 | REG_DWORD_LITTLE_ENDIAN |
| 8 | wPropertyNameLength | 2 | 0x00000024 (36) | Taille (en octets) du nom de la propriété. |
| 10 | bPropertyName | 36 | UVC-CPV2FaceAuth | Chaîne « UVC-CPV2FaceAuth » dans Unicode. |
| 46 | dwPropertyDataLength | 4 | 0x00000004 | 4 octets pour les données de propriété (sizeof(DWORD)). |
| 50 | bPropertyData | 4 | Voir le schéma de données ci-dessous | Consultez le schéma de données ci-dessous. |
Schéma de charge utile
La charge utile de données UVC-CPV2FaceAuth est un entier non signé de 32 bits. La partie haute des 16 bits représente l’index de base zéro de la liste des types multimédias exposée par la broche RGB. L’ordre inférieur 16 bits représente l’index de base 0 de la liste de types multimédias exposée par la broche IR.
Par exemple, une caméra de type 3 qui expose les types de supports suivants, dans l’ordre déclaré à partir de la broche RVB :
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
Et le type de média suivant pour l'IR :
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Une valeur de charge utile de 0x00010000 entraîne la publication du profil d’authentification faciale suivante :
Pin0 :(RES==1280,720 ; FRT==30,1 ; SUT==MJPG) // Deuxième type de média (0x0001)
Pin1 :(RES==480,480 ; FRT==30,1 ; SUT==L8) // Premier type de média (0x0000)
Remarque
Au moment de cette écriture, Windows Hello a une exigence minimale de 480x480@7.5fps pour le flux RVB et 340x340@15fps pour le flux ir. Les IHV/OEM doivent sélectionner des types de médias qui répondent à cette exigence lors de l'activation du profil d'authentification faciale.
Exemple d’appareil photo de type 1
Pour une caméra de type 1, étant donné qu'il n'y a pas de broche IR (avec l'attente qu'une caméra de type 1 soit associée à une caméra de type 2 sur la machine dans un groupe de capteurs), seul l'index de type multimédia RVB est publié. Pour l’index de type de média IR, la valeur 16 bits de faible ordre de la charge utile doit être définie sur 0xFFFF.
Par exemple, si une caméra de type 1 a exposé la liste suivante de types de supports :
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
Pour publier CPV2FaceAuth à l’aide du MJPG, 1280x720@30fps type de média, la charge utile doit être définie sur 0x0001FFFF.
Exemple d’appareil photo de type 2
Pour une caméra de type 2, l’ordre élevé 16 bits doit être défini sur 0xFFFF, avec l’ordre faible 16 bits indiquant le type de média IR à utiliser.
Par exemple, pour une caméra de type 2 avec les types multimédias suivants :
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Si le premier type de média est utilisé pour l’authentification visage, la valeur doit être : 0xFFFF0000.
Spécification du descripteur étendu du système d’exploitation Microsoft 2.0
Le descripteur étendu MSOS 2.0 peut être utilisé pour définir les valeurs de Registre pour ajouter la prise en charge du profil d’authentification faciale. Pour ce faire, utilisez le descripteur de propriété de Registre Microsoft OS 2.0.
Pour l'entrée de registre UVC-CPV2FaceAuth, voici un exemple d'ensemble de descripteurs 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)
}
Lorsque l'entrée de Registre UVC-CPV2FaceAuth est ajoutée, les appareils n’ont plus besoin de publier l’entrée de Registre EnableDshowRedirection, comme décrit dans les instructions d’implémentation de DShow Bridge pour les appareils UVC.
Toutefois, si le fournisseur d’appareils doit prendre en charge les versions antérieures de Windows et/ou avoir besoin d’activer la décompression MJPEG dans Frame Server, l’entrée de Registre EnableDshowRedirection doit être ajoutée.
Génération de groupe de capteurs
Lorsque les fabricants OEM créent des systèmes à l’aide de caméras de type 1 et de type 2 pour fournir des flux RVB et IR pour la prise en charge de Windows Hello, les fabricants oem doivent déclarer les deux caméras à faire partie d’un groupe de capteurs synthétisés.
Pour ce faire, vous devez déclarer une balise FSSensorGroupId et FSSensorGroupName dans un INF d’extension à créer sous la propriété d’interface de l’appareil pour chaque caméra.
Toutefois, si l’extension INF n’est pas fournie, les odMs peuvent utiliser les mêmes descripteurs MSOS pour publier les valeurs FSSensorGroupId et FSSensorGroupName. Le pilote de classe vidéo USB Windows 10 de boîte de réception prend automatiquement n’importe quel descripteur MSOS dont le nom de la charge utile a été précédé de « UVC- » et migre la balise dans le magasin de propriétés de l’interface de périphérique (en supprimant le préfixe « UVC- »).
Par conséquent, une caméra de type 1 et de type 2 qui publie les éléments suivants permet au système d’exploitation de synthétiser les caméras dans un groupe de capteurs multi-appareils à utiliser avec Windows Hello :
UVC-FSSensorGroupId
UVC-FSSensorGroupName
La charge utile de chaque balise doit être une chaîne Unicode. La charge utile UVC-FSSensorGroupId doit être une chaîne GUID au format suivant :
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
La valeur du GUID doit être identique entre les caméras Type 1 et Type 2 et les deux caméras doivent être ajoutées au même châssis physique. Pour les caméras intégrées, le châssis physique est l’ordinateur lui-même. Pour les caméras externes, les modules caméra de type 1 et de type 2 doivent être intégrés au même appareil physique connecté à l’ordinateur.
Catégories d’interface d’appareil personnalisées pour les groupes de capteurs
À compter de 19H1, Windows fournit un mécanisme d’extension spécifié par IHV/OEM pour permettre la publication de groupes de capteurs synthétisés dans n’importe quelle catégorie personnalisée ou prédéfinie. La génération d’un groupe de capteurs est définie par les IHV/OEM fournissant une clé d’ID de groupe de capteurs dans l’INF personnalisé :
FSSensorGroupId : {GUID personnalisé}
FSSensorGroupName : <Nom convivial utilisé pour le groupe de capteurs>
Outre les deux entrées AddReg ci-dessus dans l’inf, une nouvelle entrée AddReg est définie pour les catégories personnalisées :
FSSensorGroupCategoryList : {GUID} ; {GUID} ;... ; {GUID}
Plusieurs catégories sont définies avec une liste de GUID délimitée par un point-virgule (;).
Chaque appareil déclarant un FSSensorGroupId correspondant doit déclarer le même FSSensorGroupCategoryList. Si la liste ne correspond pas, toutes les listes sont ignorées et le groupe de capteurs est publié par défaut dans KSCATEGORY_SENSOR_GROUP comme si aucune catégorie personnalisée n’a été définie.
Rotation de la caméra
Voir Orientation de l’appareil photo
Cache de contrôle UVC
Voir le cache de contrôle UVC
Descripteur BOS et MS OS 2.0
La caméra compatible UVC peut spécifier des valeurs de configuration d’appareil spécifiques à Windows dans un descripteur BOS de fonctionnalité de plateforme dans son microprogramme à l’aide des descripteurs Microsoft OS 2.0. Reportez-vous à la documentation sur le descripteur MS OS 2.0 pour comprendre comment spécifier un descripteur BOS valide qui transmet la configuration de l’appareil au système d’exploitation.
En-tête d'ensemble de descripteurs Microsoft OS 2.0
| Offset | Terrain | Taille (octets) | Descriptif |
|---|---|---|---|
| 0 | wLength | 2 | La longueur en octets de cet en-tête doit être de 10. |
| 2 | wDescriptorType | 2 | MSOS20_SET_HEADER_DESCRIPTOR |
| 4 | dwWindowsVersion | 4 | Version de Windows. |
| 8 | wTotalLength | 2 | La taille totale de l’ensemble du descripteur MS OS 2.0, y compris la taille de cet en-tête. |
Descripteur de propriété de Registre Microsoft OS 2.0
| Offset | Terrain | Taille (octets) | Descriptif |
|---|---|---|---|
| 0 | wLength | 2 | Longueur en octets de ce descripteur |
| 2 | wDescriptorType | 2 | MS_OS_20_FEATURE_REG_PROPERTY |
| 4 | wPropertyDataType | 2 | 0x04 (REG_DWORD_LITTLE_ENDIAN) |
| 6 | wPropertyNameLength | 2 | Longueur du nom de la propriété. |
| 8 | Nom de la propriété | Variable | Nom de la propriété du registre. |
| 8+M | wPropertyDataLength | 2 | Longueur des données de propriété. |
| 10+M | PropertyData | Variable | Données de propriété |
Lorsqu’un descripteur MS OS 2.0 valide est spécifié dans le microprogramme, la pile USB copie les valeurs de configuration dans la clé de Registre HW de l’appareil ci-dessous :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<Device ID>\<Instance ID>\Device Parameters
Le pilote UVC lit les valeurs de configuration de la clé de Registre HW de l’appareil et configure l’appareil sur le système d’exploitation en conséquence. Par exemple, si le microprogramme spécifie que l’appareil doit être inscrit en tant que caméra de capteur à l’aide d’une valeur de configuration, le pilote UVC inscrit l’appareil juste sous cette catégorie.
La configuration des appareils UVC via le descripteur BOS de plateforme est un mécanisme activé dans Windows 10, version 1703 pour aider les fournisseurs d’appareils UVC à configurer l’appareil sans avoir besoin d’un fichier INF sur le système d’exploitation Windows.
La configuration d’appareils UVC par le biais d’un INF personnalisé est toujours prise en charge et est prioritaire sur le mécanisme basé sur le descripteur BOS. Lors de la spécification des propriétés de l’appareil via INF, vous n’avez pas besoin d’ajouter le préfixe « UVC- ». Ce préfixe est nécessaire uniquement pour les propriétés d’appareil spécifiées via le descripteur BOS et qui sont spécifiques à l’instance d’interface. Si votre appareil a besoin de plug-ins en mode utilisateur comme DMFT, vous devez fournir un INF pour l’installation de DMFT. Il ne peut pas être configuré à l’aide du microprogramme.
Valeurs de configuration actuellement prises en charge via le descripteur BOS
| Nom de la configuration | Catégorie | Descriptif |
|---|---|---|
| SensorCameraMode | REG_DWORD | Inscrivez la caméra dans une catégorie spécifique. |
| UVC-FSSensorGroupID, UVC-FSSensorGroupName | REG_SZ | Regrouper les caméras avec le même UVC-FSSensorGroupID |
| UVC-EnableDependentStillPinCapture | REG_DWORD | Pour activer la capture d'image fixe Méthode 2/3 |
| UVC-EnablePlatformDmft | REG_DWORD | Pour activer la plateforme DMFT |
Lorsque le pilote UVC voit les valeurs de Registre avec le préfixe « UVC- », il remplit la clé de Registre de l'instance de l'interface de catégorie de l’appareil, avec les mêmes valeurs sans préfixe. Le pilote effectue cette opération pour n’importe quelle variable spécifiée par le microprogramme, pas seulement celles répertoriées ci-dessus.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}\<Device Symbolic Link>\Device Parameters
Pour que le système d’exploitation utilise les descripteurs de capacité du périphérique de la plateforme BOS et MS OS 2.0, le descripteur de l’appareil doit spécifier la version bcdUSB à 0x0210 ou ultérieure.
Exemple d’appareil composite
Cette section fournit un descripteur BOS et un descripteur MS OS 2.0 pour un exemple d’appareil composite avec deux fonctions de caméra. Une fonction est une caméra de couleur UVC et la deuxième fonction est une caméra UVC IR.
Les exemples de descripteurs sont les suivants :
Inscrire la fonction caméra couleur sous KSCATEGORY_VIDEO_CAMERA
Inscrire la fonction de la caméra infrarouge sous KSCATEGORY_SENSOR_CAMERA
Activer la fonction de capture d'images fixes de la caméra couleur
Associe les fonctions de couleur et de caméra IR en tant que groupe
Lors de l’énumération de l’appareil, la pile USB récupère le descripteur BOS de l’appareil. Après le descripteur BOS, il s’agit d’une fonctionnalité d’appareil spécifique à la plateforme.
#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
};
Le descripteur de fonctionnalité de plateforme BOS spécifie :
GUID de capacité de plateforme de descripteur MS OS 2.0
Un code de contrôle fournisseur bMS_VendorCode (voici la valeur 1. Il peut prendre n’importe quelle valeur que le fournisseur préfère) pour récupérer le descripteur MS OS 2.0.
Ce descripteur BOS s’applique à la version du système d’exploitation Windows 10 et versions ultérieures.
Après avoir vu le descripteur BOS, la pile USB émet la demande de contrôle spécifique du fournisseur pour récupérer le descripteur MS OS 2.0.
Format de la demande de contrôle pour récupérer le descripteur spécifique au fournisseur MS OS 2.0 :
| bmRequestType | BRequest | wValue | WIndex | wLength | Données |
|---|---|---|---|---|---|
| 1100 0000B | bMS_VendorCode | 0x00 | 0x07 | Longueur | Objet blob de descripteur MS OS 2.0 retourné |
bmRequestType
Direction du transfert de données – Appareil à hôte
Type – Fournisseur
Destinataire - Appareil
bRequest
Valeur bMS_VendorCode retournée dans la structure d’informations du descripteur.
wValue
Défini sur 0x00.
wIndex
0x7 pour MS_OS_20_DESCRIPTOR_INDEX.
wLength
Longueur de l'ensemble de descripteurs MS OS 2.0, comme retourné dans le descripteur BOS. 0x25C (604) dans cet exemple.
L’appareil est censé retourner le descripteur MS OS 2.0 comme celui spécifié dans USBVideoMSOS20DescriptorSet.
Le USBVideoMSOS20DescriptorSet décrit les fonctions de couleur et d'IR. Il spécifie les valeurs de descripteur MS OS 2.0 suivantes :
Définir l’en-tête
En-tête de sous-ensemble de configuration
En-tête de sous-ensemble de fonctions de caméra couleur
Descripteur de fonctionnalité de la valeur du registre pour l'identifiant du groupe de capteurs
Descripteur de fonctionnalité de valeur du Registre pour le nom du groupe de capteurs
Descripteur de fonctionnalité pour la valeur du Registre permettant l’activation de la capture d'image fixe
Descripteur de fonctionnalité de valeur de clé de registre pour l'activation du DMFT de plateforme
En-tête de sous-ensemble de fonctionnalité caméra IR
Descripteur de la fonctionnalité de la valeur du registre pour l’ID de groupe de capteurs
Descripteur de fonctionnalité de valeur du registre pour le nom du groupe de capteurs
Descripteur de fonctionnalité de valeur de Registre pour l’inscription de la caméra en tant que caméra de capteur
Le microprogramme aura un gestionnaire pour la demande du fournisseur qui retourne le descripteur MS OS 2.0 suivant pour l’appareil imaginaire décrit au début de cette section.
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
};