Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje Windows 10 je k dispozici ovladač UVC (Inbox USB Video Class) pro zařízení kompatibilní se specifikací třídy USB Video Class (verze 1.0 až 1.5). Tento ovladač podporuje barevné kamery a kamery podle typu snímače. Tento dokument popisuje, jak zpřístupnit určité funkce fotoaparátu kompatibilního s UVC aplikacím prostřednictvím integrovaného ovladače.
Terminologie
| Klíčové slovo | Popis |
|---|---|
| UVC | Třída videa USB |
| Ovladač UVC | USBVideo.sys ovladač, který se dodává s operačním systémem |
| IR | Infračervený |
| Barevná kamera | Kamera, která vypíše barevné proudy (například RGB nebo YUV) |
| Senzorová kamera | Kamera, která generuje nebarevné záznamy (například IR nebo hloubkové kamery) |
| BOS | Binární úložiště objektů zařízení |
| Popisovač MS OS 2.0 | Popisovač zařízení specifické pro platformu Microsoft BOS |
Senzorové kamery
Windows podporuje dvě kategorie fotoaparátů. Jedna je barevná kamera a druhá je černobílá kamera. Kamery RGB nebo YUV jsou kategorizovány jako barevné kamery a nebarevné kamery, jako jsou šedé, ir a hloubkové kamery jsou zařazeny do kategorií jako senzorové kamery. Ovladač UVC podporuje oba typy fotoaparátů. Doporučujeme, aby firmware fotoaparátu určil hodnotu, na základě které by ovladač UVC registroval kameru v jedné nebo obou podporovaných kategoriích.
Fotoaparát, který podporuje pouze typy formátů barev, by se měl zaregistrovat v KSCATEGORY_VIDEO_CAMERA. Fotoaparát, který podporuje formáty IR nebo pouze hloubkový, by měl být zařazen do KSCATEGORY_SENSOR_CAMERA. Fotoaparát, který podporuje barevné i jiné typy formátů, by se měl zaregistrovat v KSCATEGORY_VIDEO_CAMERA a KSCATEGORY_SENSOR_CAMERA. Tato kategorizace pomáhá aplikacím vybrat kameru, se kterou chtějí pracovat.
Kamera UVC může určit preferenci kategorie prostřednictvím atributů SensorCameraMode a SkipCameraEnumeration ve svém BOS MS OS 2.0 popisovač, jak je podrobně vysvětleno v následujících částech.
Atribut SensorCameraMode přebírá hodnotu 1 nebo 2.
Hodnota 1 zaregistruje zařízení v KSCATEGORY_SENSOR_CAMERA. Kromě toho zadejte hodnotu 1 pro SkipCameraEnumeration , aby byla kamera k dispozici pro aplikace, které hledají pouze senzorové kamery. Tuto hodnotu by měla využívat kamera, která zaznamenává pouze typy médií snímacího zařízení.
Hodnota 2 pro SensorCameraMode zaregistruje zařízení v KSCATEGORY_SENSOR_CAMERA a KSCATEGORY_VIDEO_CAMERA. Díky tomu je fotoaparát dostupný pro aplikace, které hledají senzory a barevné kamery. Kamera, která zpracovává jak senzory, tak barevné typy médií, by měla používat tuto hodnotu.
Doporučujeme zadat výše uvedenou hodnotu registru pomocí popisovače BOS. Vizte část Příklad složeného zařízení níže pro ukázkový popisovač BOS se specifickým pro platformu MS OS 2.0 popisovačem.
Pokud nemůžete aktualizovat firmware zařízení, jak je popsáno výše, můžete použít vlastní inf a určit, že vaše kamera musí být registrována jako senzorová kamera zadáním hodnoty pro SensorCameraMode a SkipCameraEnumeration následujícím způsobem:
Vlastní soubor INF (založený na integrovaném UVC ovladači) musí obsahovat následující položky AddReg:
SensorCameraMode: REG_DWORD: 1 (pro registraci jako senzor kamery)
SkipCameraEnumeration: REG_DWORD: 1 (zpřístupnit ji jenom pro aplikace IR)
Příklad vlastní části INF je následující:
[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
Pokud atributy SensorCameraMode a SkipCameraEnumeration nejsou zadané ve firmwaru nebo inf, fotoaparát se zaregistruje jako barevná kamera a bude viditelný pouze pro aplikace podporující barevné kamery.
IR stream
Integrovaný ovladač pro USB Video Class (UVC) podporuje kamery, které zachycují scénu ve formátu YUV a přenášejí pixelová data přes USB jako nekomprimované YUV nebo komprimované snímky ve formátu MJPEG.
V popisovači formátu videa streamu by měly být zadány následující identifikátory GUID formátu streamování, jak je definováno v hlavičkovém souboru WDK ksmedia.h.
| Typ | Popis |
|---|---|
| KSDATAFORMAT_SUBTYPE_L8_IR | Nekomprimovaná 8bitová rovina luma. Tento typ se mapuje na MFVideoFormat_L8. |
| KSDATAFORMAT_SUBTYPE_L16_IR | Nekomprimovaná 16bitová rovina luma. Tento typ se mapuje na MFVideoFormat_L16. |
| KSDATAFORMAT_SUBTYPE_MJPG_IR | Komprimované rámce MJPEG. Media Foundation to převede na nekomprimované snímky NV12 a používá pouze rovinu luma. |
Pokud jsou tyto identifikátory GUID typu formátu zadané v poli guidFormat popisovače rámce, kanál zachycení Media Foundation označí datový proud jako datový proud IR. Aplikace napsané pomocí rozhraní API Media Foundation FrameReader budou moct využívat stream IR. Kanál pro datové proudy IR nepodporuje žádné škálování ani převody rámců IR.
Datový proud, který zveřejňuje typy formátů IR, nesmí zveřejnit typy formátu RGB ani hloubky.
// 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;
Poznámka:
Streamy IR se zobrazí jako běžné zachytávací proudy v DShow.
Hloubkové proudy
Ovladač usb třídy videa ve složce Doručená pošta systému Windows podporuje kamery, které vytvářejí datové proudy Hloubky. Tyto kamery zachycují podrobné informace (například čas letu) scény a přenášejí hloubkovou mapu jako nekomprimované snímky YUV přes USB. V popisovači formátu videa streamu by měl být zadán následující identifikátor GUID typu formátu, jak je definováno v hlavičkovém souboru WDK ksmedia.h.
| Typ | Popis |
|---|---|
| KSDATAFORMAT_SUBTYPE_D16 | 16bitové hodnoty mapy hloubky Tento typ je shodný s MFVideoFormat_D16. Hodnoty jsou v milimetrech. |
Pokud je identifikátor GUID typu formátu zadán v členu guidFormat popisovače rámce, kanál zachycení Media Foundation označí datový proud jako hloubkový proud. Aplikace napsané pomocí rozhraní FrameReader API budou moct využívat hloubkový proud. Kanál nepodporuje žádné škálování ani převody hloubkových snímků pro hloubkové proudy.
Datový proud, který zveřejňuje typy formátu hloubky, nesmí zveřejnit typy formátů RGB ani 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;
Poznámka:
Hloubkové proudy se zobrazují jako běžné zachytávací proudy v DShow.
Seskupování kamer
Systém Windows podporuje seskupování kamer na základě jejich ID kontejneru, aby aplikace mohly pracovat s příbuznými kamerami. Například kamera IR a barevná kamera, které jsou přítomné na stejném fyzickém zařízení, mohou být vystaveny operačnímu systému jako související kamery. Díky tomu aplikace, jako je Windows Hello, používají související kamery pro své scénáře.
Vztah mezi funkcemi fotoaparátu lze zadat v popisovači BOS fotoaparátu ve firmwaru. Ovladač UVC použije tyto informace a zpřístupní tyto funkce fotoaparátu jako související. Díky tomu kamerový zásobník OS zpřístupňuje je aplikacím jako skupinu souvisejících kamer.
Firmware fotoaparátu musí zadat UVC-FSSensorGroupID, což je GUID ve formě řetězce se složenými závorkami. Kamery, které mají stejné UVC-FSSensorGroupID , se seskupí dohromady.
Skupinu snímačů lze pojmenovat zadáním UVC-FSSensorGroupName, řetězce Unicode ve firmwaru.
V níže uvedené části Příklad složeného zařízení najdete ilustrativní příklad BOS, který určuje UVC-FSSensorGroupID a UVC-FSSensorGroupName.
Pokud nemůžete aktualizovat firmware zařízení, jak je popsáno výše, můžete použít vlastní INF a určit, že vaše kamera je součástí skupiny snímačů zadáním ID a názvu skupiny snímačů následujícím způsobem. Vlastní soubor INF (založený na standardním ovladači UVC) musí obsahovat následující položky AddReg:
FSSensorGroupID: REG_SZ: {your sensor group ID GUID}
FSSensorGroupName: REG_SZ: "Popisný název skupiny snímačů"
Příklad vlastního oddílu INF by byl následující:
[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%
Poznámka:
Skupiny senzorů nejsou podporovány v kanálu zachycení DShow.
Metoda 2 nebo Metoda 3 stále zachycuje podporu.
Specifikace UVC poskytuje mechanismus, který určuje, zda rozhraní streamování videa podporuje metody typu 1/2/3 pro zachytávání statických obrázků. Aby operační systém mohl využít podporu zachycení statických snímků pomocí metod 2/3 zařízení prostřednictvím UVC ovladače, může firmware zařízení specifikovat hodnotu v popisovači BOS.
Hodnota, která se má zadat pro povolení zachytávání imagí metody 2/3, je DWORD s názvem UVC-EnableDependentStillPinCapture. Zadejte jeho hodnotu pomocí popisovače BOS. Níže uvedené ukázkové složené zařízení znázorňuje umožnění zachycení obrázků pomocí příkladového popisovače BOS.
Pokud nemůžete aktualizovat firmware zařízení, jak je popsáno výše, můžete pomocí vlastní INF určit, že vaše kamera podporuje metodu pořizování statických snímků 2 nebo 3.
Vlastní soubor INF (založený na vlastním ovladači UVC nebo ovladači doručené pošty UVC) musí obsahovat následující položku AddReg:
EnableDependentStillPinCapture: REG_DWORD: z 0x0 (zakázáno) na 0x1 (povoleno)
Pokud je tato položka nastavena na Povoleno (0x1), zpracování zachycení obrazu využívá metodu 2/3 pro zachycení statických snímků (za předpokladu, že firmware také oznamuje podporu metody 2/3 podle specifikace UVC).
Příklad vlastního oddílu INF je následující:
[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
Řetězení MFT zařízení
Device MFT je doporučený mechanismus plug-in modulu uživatelského režimu pro nezávislé výrobce hardwaru (IHVs) a výrobce originálních zařízení (OEMs) pro rozšíření funkcí fotoaparátu ve Windows.
Před Windows 10 verze 1703 podporoval kanál kamery pouze jeden modul plug-in rozšíření DMFT.
Od Windows 10 verze 1703 podporuje kanál kamery Windows volitelný řetězec DMFT s maximálně dvěma DMFT.
Ve Windows 11, verze 22H2, kamerový řetězec Windows podporuje volitelný řetězec DMFT s maximálně čtyřmi DMFT.
To poskytuje OEMům a IHVům větší flexibilitu při poskytování přidané hodnoty prostřednictvím zpracování datových proudů kamer. Například zařízení může používat PDMFT spolu s IHV DMFT a OEM DMFT.
Následující obrázek znázorňuje architekturu s řetězcem DMFT.
Proud vzorků plyne z ovladače fotoaparátu do DevProxy a pak prochází řetězci DMFT. Každá DMFT v řetězci má šanci zpracovat vzorek. Pokud DMFT nechce ukázku zpracovat, může fungovat jako mezičlánek a prostě předat ukázku dalšímu DMFT.
U ovládacích prvků, jako je KsProperty, volání postupuje proti proudu – poslední DMFT v řetězci přijme volání jako první, volání tam může být zpracováno nebo předáno předchozímu DMFT v řetězci.
Chyby se rozšíří z DMFT do DTM a pak do aplikací. V případě DMFT IHV/OEM, pokud se některé z DMFT nepodaří instancovat, bude to závažná chyba pro DTM.
Požadavky na DMFT:
Počet vstupních kolíků DMFT se musí shodovat s počtem výstupních kolíků předchozího DMFT, jinak by DTM při inicializaci selhal. Počet vstupních a výstupních kolíků stejného DMFT se ale nemusí shodovat.
DMFT musí podporovat rozhraní - MMFDeviceTransform, MMFShutdown, MMFRealTimeClientEx, IKsControl a MMFMediaEventGenerator; MMFTransform může být potřeba podporovat, pokud je v řetězci nakonfigurované MFT0 nebo další DMFT vyžaduje podporu MMFTransform.
V 64bitových systémech, které nepoužívají Frame Server, musí být zaregistrované 32bitové i 64bitové DMFT. Vzhledem k tomu, že se USB kamera může připojit do libovolného systému, by měl dodavatel externích (nebo neinboxových) USB kamer dodat jak 32bitové, tak 64bitové DMFT.
Konfigurace řetězu DMFT
Zařízení fotoaparátu může volitelně poskytnout COM objekt DMFT v knihovně DLL pomocí vlastního souboru INF, který používá oddíly přednastaveného souboru USBVideo.INF.
Ve vlastním souboru .INF v části "Interface AddReg" zadejte CLSID pro DMFT přidáním následující položky do registru:
CameraDeviceMftCLSIDChain (REG_MULTI_SZ) %Dmft0.CLSID%,%Dmft.CLSID%,%Dmft2.CLSID%
Jak je znázorněno v níže uvedeném ukázkovém nastavení INF (nahraďte %Dmft0.CLSID% a % Dmft1.CLSID% skutečnými řetězci CLSID, které používáte pro DMFT), ve Windows 10 verze 1703 jsou povolené maximálně 2 identifikátory CLSID a první z nich je nejblíže DevProxy a poslední z nich je poslední DMFT v řetězu.
DMFT CLSID platformy je {3D096DDE-8971-4AD5-98F9-C74F56492630}.
Příklad nastavení CameraDeviceMftCLSIDChain :
Žádný IHV/OEM DMFT nebo Platform DMFT
- CameraDeviceMftCLSIDChain = "" (nebo není nutné zadat tuto položku registru)
IHV/OEM DMFT
- CameraDeviceMftCLSIDChain = %Dmft.CLSID%
Platforma DMFT <-> IHV/OEM DMFT
CameraDeviceMftCLSIDChain = "{3D096DDE-8971-4AD5-98F9-C74F56492630}",%Dmft.CLSID%
Tady je snímek obrazovky s výsledným klíčem registru pro USB kameru s platformou DMFT a DMFT (s GUID {D671BE6C-FDB8-424F-81D7-03F5B1CE2CC7}) v řetězci.
IHV/OEM DMFT0 <-> IHV/OEM DMFT1
- CameraDeviceMftCLSIDChain = %Dmft0.CLSID%,%Dmft1.CLSID%,
Poznámka:
CameraDeviceMftCLSIDChain může mít maximálně 2 identifikátory CLSID.
Pokud je nakonfigurovaná funkce CameraDeviceMftCLSIDChain , přeskočí DTM starší nastavení CameraDeviceMftCLSID.
Pokud CameraDeviceMftCLSIDChain není nakonfigurován a starší verze CameraDeviceMftCLSID je nakonfigurována, bude řetězec vypadat takto (pokud je kamera USB a podporována platformou DMFT a DMFT platforma je povolena) DevProxy <–> Platform DMFT <–> OEM/IHV DMFT nebo (pokud fotoaparát není podporován platformou DMFT nebo DMFT platforma je zakázána) DevProxy <–> OEM/IHV DMFT.
Příklad nastavení souboru 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 zařízení platformy
Počínaje systémem Windows 10, verzí 1703, poskytuje Windows integrované zařízení MFT pro kamery UVC, známé jako Platform DMFT (PDMFT), na základě volby. Toto DMFT umožňuje nezávislým výrobcům hardwaru (IHV) a výrobcům originálních zařízení (OEM) využívat výhod algoritmů pro postprocessing poskytovaných systémem Windows.
| Funkce podporované platformou DMFT | Vydání Windows |
|---|---|
| Umožňuje oblast zájmu založenou na obličeji (ROI) pro 3A úpravy v USB kamerách podporujících ROI. | Windows 10 verze 1703 |
Poznámka:
Pokud fotoaparát nepodporuje UVC 1.5 založené ROI, PDMFT se nenačte, i když bylo zařízení nastaveno, aby používalo PDMFT.
Kamera UVC se může přihlásit k použití DMFT platformy zadáním EnablePlatformDmft prostřednictvím deskriptoru BOS.
Hodnota, kterou chcete zadat pro povolení DMFT platformy, je DWORD podle názvu UVC-EnablePlatformDmft a zadejte jeho hodnotu pomocí deskriptoru BOS. Část Příklad složeného zařízení níže ilustruje, jak povolit Platform DMFT pomocí ukázkového popisovače BOS.
Pokud nemůžete aktualizovat firmware zařízení, jak je popsáno výše, můžete k povolení DMFT platformy pro zařízení použít vlastní soubor INF.
Vlastní soubor INF (založený na vlastním ovladači UVC nebo ovladači doručené pošty UVC) musí obsahovat následující položku AddReg:
EnablePlatformDmft: REG_DWORD: 0x0 (zakázáno) na 0x1 (povoleno)
Pokud je tato položka nastavena na Povoleno (0x1), kanál zachycení používá pro zařízení DMFT platformy doručené pošty. Následuje příklad této vlastní části 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
Pokud se zařízení ve Windows 10 verze 1703 rozhodne používat PDMFT, jsou povolené všechny funkce podporované pdmFT (na základě možností zařízení). Podrobná konfigurace funkcí PDMFT není podporována.
Poznámka:
Souřadnice ROI založené na rozpoznávání tváře se počítají vzhledem k poli zobrazení obrázku přenášeného do PDMFT. Pokud bylo pole zobrazení změněno z důvodu použití ovládacího prvku, jako je lupa, posun nebo naklonění nebo digitální okno, je fotoaparát zodpovědný za mapování zadaných souřadnic zpět do úplného pole zobrazení senzoru vzhledem k aktuálnímu okně lupy/posunu.
Profil ověřování tváře prostřednictvím popisovačů MS OS
Windows 10 RS5 teď vynucuje požadavek profilu ověřování tváře V2 pro jakoukoli kameru s podporou Windows Hello. U systémů založených na MIPI se specifickým zásobníkem ovladačů fotoaparátu lze tuto podporu publikovat buď prostřednictvím INF (nebo rozšíření INF), nebo prostřednictvím zásuvného modulu v uživatelském režimu (Device MFT).
U zařízení USB Video ale omezení s fotoaparáty založenými na UVC je, že pro Windows 10 19H1 nejsou povolené vlastní ovladače fotoaparátu. Všechny kamery založené na UVC musí používat vestavěný ovladač USB Video Class a všechna rozšíření dodavatelů musí být implementována ve formě MFT zařízení.
U mnoha modulů OEM/ODM je upřednostňovaným přístupem pro moduly fotoaparátu implementovat většinu funkcí ve firmwaru modulu, tj. prostřednictvím popisovačů operačního systému Microsoft.
Pro publikování profilu rozpoznávání tváře prostřednictvím popisovačů MSOS (označovaných také jako popisovače BOS) jsou podporovány následující kamery:
Kamera RGB, která se má používat ve skupině snímačů s oddělenou infračervenou kamerou.
Jen IR kamera, která se má použít ve skupině senzorů se samostatnou RGB kamerou.
Kamera RGB+IR s oddělenými kolíky IR a RGB.
Poznámka:
Pokud firmware fotoaparátu nemůže splňovat jeden ze tří požadavků popsaných výše, musí ODM/OEM použít rozšíření INF k deklaraci profilu fotoaparátu V2.
Příklad rozložení popisovače operačního systému Microsoft OS
Příklady jsou uvedeny níže pro následující specifikace:
Specifikace rozšířených popisovačů operačního systému Microsoft 1.0
Specifikace popisovačů Microsoft OS 2.0
Specifikace rozšířeného popisovače Microsoft OS 1.0
Popisovač rozšířených vlastností operačního systému má dvě komponenty.
- Oddíl záhlaví s pevnou délkou
- Jedna nebo více oddílů vlastních vlastností s proměnnou délkou, které následují za oddílem záhlaví
Oddíl záhlaví popisovače Microsoft OS 1.0
Oddíl záhlaví popisuje jednu vlastní vlastnost (profil ověřování tváře).
| Offset | Obor | Velikost (bajty) | Hodnota | Popis |
|---|---|---|---|---|
| 0 | dwLength | 4 | <> | |
| 4 | bcdVersion | 2 | 0x0100 | Verze 1.0 |
| 6 | wIndex | 2 | 0x0005 | Popisovač rozšířené vlastnosti operačního systému |
| 8 | wCount | 2 | 0x0001 | Jedna vlastní vlastnost |
Oddíl uživatelské vlastnosti deskriptoru Microsoft OS 1.0
| Offset | Obor | Velikost (bajty) | Hodnota | Popis |
|---|---|---|---|---|
| 0 | dwSize | 4 | 0x00000036 (54) | Celková velikost (v bajtech) pro tuto vlastnost. |
| 4 | dwPropertyDataType | 4 | 0x00000004 | REG_DWORD_LITTLE_ENDIAN |
| 8 | wPropertyNameLength | 2 | 0x00000024 (36) | Velikost (v bajtech) názvu vlastnosti |
| 10 | bPropertyName | 36 | UVC-CPV2FaceAuth | Řetězec UVC-CPV2FaceAuth v kódu Unicode |
| 46 | dwPropertyDataLength | 4 | 0x00000004 | 4 bajty pro data vlastností (sizeof(DWORD)). |
| 50 | bPropertyData | 4 | Viz schéma dat níže | Viz schéma dat níže. |
Schéma datové části
Datová část UVC-CPV2FaceAuth je 32bitové celé číslo bez znaménka. Vyšších 16 bitů představuje index 0 seznamu typů médií vystaveného RGB pinem. 16bitový index nižšího řádu představuje seznam typů médií s indexováním od 0 zpřístupněný IR pinem.
Například fotoaparát Typu 3, který zveřejňuje následující typy médií v pořadí deklarované z špendlíku RGB:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
A následující typ médií pro infračervené prostředí:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Hodnota datové části 0x00010000 způsobí publikování následujícího profilu ověřování obličeje:
Pin0:(RES==1280;720; FRT==30,1; SUT==MJPG) // Druhý typ média (0x0001)
Pin1:(RES==480,480; FRT==30,1; SUT==L8) // První typ média (0x0000)
Poznámka:
V době psaní tohoto článku má Windows Hello minimální požadavek na 480x480@7.5fps pro datový proud RGB a 340x340@15fps pro datový proud IR. IHV/OEM musí vybrat typy médií, které splňují tento požadavek při povolování profilu ověřování obličeje.
Ukázka kamery typu 1
Pro fotoaparát typu 1, protože neexistuje žádný IR vstup (předpokládá se, že se kamera Typu 1 spáruje s kamerou Typu 2 na zařízení ve skupině senzorů), je publikován pouze index typu média RGB. U indexu typu média IR musí být hodnota 16bitové části datového paketu s nižším pořadím nastavena na 0xFFFF.
Pokud například fotoaparát typu 1 odhalil následující seznam typů médií:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
Pokud chcete zveřejnit CPV2FaceAuth v mediálním typu MJPG, 1280x720@30fps, datová část musí být nastavena na 0x0001FFFF.
Ukázka kamery typu 2
U fotoaparátu typu 2 musí být horních 16 bitů nastaveno na 0xFFFF a dolní 16 bity označují typ IR média, který se má použít.
Například pro fotoaparát typu 2 s následujícími typy médií:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Pokud se pro ověřování tváře používá první typ média, hodnota musí být: 0xFFFF0000.
Specifikace rozšířeného popisovače Microsoft OS verze 2.0
Rozšířené popisovače MSOS 2.0 lze použít k definování hodnot registru pro přidání podpory profilu ověřování tváře. To se provádí pomocí popisovače vlastností registru Microsoft OS 2.0.
Pro položku registru UVC-CPV2FaceAuth se zobrazí ukázková sada popisovače 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)
}
Když přidáte položku registru UVC-CPV2FaceAuth, zařízení nemusí publikovat položku registru EnableDshowRedirection, jak je popsáno v pokynech k implementaci mostu DShow pro zařízení UVC.
Pokud ale dodavatel zařízení musí podporovat starší verze Windows nebo musí povolit dekompresi MJPEG v rámci Frame Serveru, musí být přidána položka registru EnableDshowRedirection.
Generování skupiny senzorů
Když OEM vytváří systémy pomocí fotoaparátů Typu 1 a Type 2, aby poskytovaly podporu RGB i IR pro podporu Windows Hello, musí OEM deklarovat obě kamery, které jsou součástí syntetizované skupiny senzorů.
To se provádí deklarováním značky FSSensorGroupId a FSSensorGroupName v souboru INF rozšíření, který se vytvoří v rámci vlastnosti rozhraní zařízení pro každou jednotlivou kameru.
Pokud však není k dispozici rozšíření INF, mohou ODMs použít stejné popisovače MSOS k publikování hodnot FSSensorGroupId a FSSensorGroupName. Ovladač inbox Windows 10 USB Video Class automaticky převezme jakýkoli popisovač MSOS, jehož název datové části má předponu "UVC-" a migruje značku do úložiště vlastností rozhraní zařízení (odebere předponu UVC-).
Takže fotoaparát Typu 1 a Typ 2, který publikuje následující, umožní operačnímu systému syntetizovat fotoaparáty do skupiny snímačů s více zařízeními pro použití s Windows Hello:
UVC-FSSensorGroupId
UVC-FSSensorGroupName
Datová část pro každou značku musí být řetězec Unicode. Datová část UVC-FSSensorGroupId musí být řetězec GUID v následujícím formátu:
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
Hodnota identifikátoru GUID musí být stejná mezi fotoaparáty Typu 1 a Type 2 a obě kamery musí být přidány do stejné fyzické skříně. Pro vestavěné kamery je fyzická skříň sama o sobě počítač. U externích fotoaparátů musí být oba moduly Typu 1 a Type 2 Camera integrované do stejného fyzického zařízení připojeného k počítači.
Vlastní kategorie rozhraní zařízení pro skupiny senzorů
Od verze 19H1 poskytuje Systém Windows mechanismus rozšíření určený pro IHV/OEM, který umožňuje publikování syntetizovaných skupin senzorů do jakékoli vlastní nebo předdefinované kategorie. Generování skupiny snímačů je definováno tím, že IHV/OEMs poskytují klíč ID skupiny snímačů ve vlastním INF souboru.
FSSensorGroupId: {Custom GUID}
FSSensorGroupName: <Popisný název používaný pro skupinu senzorů>
Kromě dvou výše uvedených položek AddReg v INF je pro vlastní kategorie definována nová položka AddReg:
FSSensorGroupCategoryList: {GUID}; {GUID};...; {GUID}
Více kategorií je definováno pomocí seznamu GUID odděleného středníkem (;).
Každé zařízení deklarující odpovídající FSSensorGroupId musí deklarovat stejné FSSensorGroupCategoryList. Pokud se seznam neshoduje, všechny seznamy se ignorují a skupina senzorů se ve výchozím nastavení publikuje do KSCATEGORY_SENSOR_GROUP, jako by nebyly definovány žádné vlastní kategorie.
Otočení kamery
Zobrazit orientaci zařízení fotoaparátu
Mezipaměť ovládacího prvku UVC
Popisovač BOS a MS OS 2.0
Kamera kompatibilní s UVC může specifikovat hodnoty konfigurace zařízení specifické pro Windows pomocí popisovačů Microsoft OS 2.0 v popisovači BOS schopností platformy ve svém firmwaru. V dokumentaci k popisovači MS OS 2.0 se dozvíte, jak určit platný popisovač BOS, který předává konfiguraci zařízení operačnímu systému.
Hlavička sady popisovačů Microsoft OS 2.0
| Offset | Obor | Velikost (bajty) | Popis |
|---|---|---|---|
| 0 | wDélka | 2 | Délka v bajtech této hlavičky musí být 10. |
| 2 | wDescriptorType | 2 | MSOS20_SET_HEADER_DESCRIPTOR |
| 4 | dwWindowsVersion | 4 | Verze systému Windows. |
| 8 | wCelkováDélka | 2 | Velikost celé sady popisovačů MS OS 2.0 včetně této velikosti záhlaví. |
Popisovač vlastností registru Microsoft OS 2.0
| Offset | Obor | Velikost (bajty) | Popis |
|---|---|---|---|
| 0 | wDélka | 2 | Délka v bajtech tohoto popisovače |
| 2 | wDescriptorType | 2 | MS_OS_20_FEATURE_REG_PROPERTY |
| 4 | wPropertyDataType | 2 | 0x04 (REG_DWORD_LITTLE_ENDIAN) |
| 6 | wPropertyNameLength | 2 | Délka názvu vlastnosti. |
| 8 | NázevVlastnosti | Proměnná | Název vlastnosti registru. |
| 8+M | wPropertyDataLength | 2 | Délka dat vlastnosti. |
| 10+ milionů | Údaje o nemovitosti | Proměnná | Data vlastností |
Pokud je ve firmwaru zadán platný popisovač MS OS 2.0, USB zásobník řadiče zkopíruje konfigurační hodnoty do níže uvedeného klíče registru HW zařízení.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<Device ID>\<Instance ID>\Device Parameters
Ovladač UVC načte konfigurační hodnoty z klíče registru HW zařízení a odpovídajícím způsobem nakonfiguruje zařízení v operačním systému. Pokud například firmware určuje zařízení, které se má zaregistrovat jako kamera snímače pomocí konfigurační hodnoty, ovladač UVC zaregistruje zařízení přímo v této kategorii.
Konfigurace zařízení UVC prostřednictvím deskriptoru BOS platformy je mechanismus, který byl povolen ve Windows 10 verze 1703, který pomáhá dodavatelům zařízení UVC konfigurovat zařízení bez nutnosti souboru INF v operačním systému Windows.
Konfigurace zařízení UVC prostřednictvím vlastního INF se stále podporuje a má přednost před mechanismem založeným na deskriptoru BOS. Při zadávání vlastností zařízení prostřednictvím INF nemusíte přidávat předponu UVC-. Tato předpona je nutná pouze pro vlastnosti zařízení, které jsou zadány prostřednictvím popisovače BOS a které jsou specifické pro každou instanci rozhraní. Pokud vaše zařízení potřebuje pluginy v uživatelském režimu, jako je DMFT, je nutné dodat INF pro instalaci DMFT. Nejde ho nakonfigurovat pomocí firmwaru.
Aktuálně podporované hodnoty konfigurace prostřednictvím popisovače BOS
| Název konfigurace | Typ | Popis |
|---|---|---|
| SensorCameraMode | REG_DWORD | Zaregistrujte kameru v konkrétní kategorii. |
| UVC-FSSensorGroupID, UVC-FSSensorGroupName | REG_SZ | Seskupte kamery se stejnými UVC-FSSensorGroupID |
| UVC-EnableDependentStillPinCapture | REG_DWORD | Povolení metody zachycení 2/3 |
| UVC-EnablePlatformDmft | REG_DWORD | Povolit platformu DMFT |
Když ovladač UVC zobrazí hodnoty registru s předponou UVC-, naplní klíč registru instance rozhraní kategorie zařízení stejnými hodnotami bez předpony. Ovladač to provede pro libovolnou proměnnou určenou firmwarem, nejen pro proměnné uvedené výše.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}\<Device Symbolic Link>\Device Parameters
Aby operační systém mohl využít schopnosti zařízení BOS platformy a deskriptory MS OS 2.0, musí popisovač zařízení určit verzi bcdUSB, která musí být 0x0210 nebo vyšší.
Příklad složeného zařízení
Tato část obsahuje popisovač BOS a popisovač MS OS 2.0 pro příklad složeného zařízení se dvěma funkcemi fotoaparátu. Jedna funkce je barevná kamera UVC a druhou funkcí je kamera IR UVC.
Ukázkové popisovače jsou následující:
Registrace funkce barevné kamery v KSCATEGORY_VIDEO_CAMERA
Registrace funkce kamery IR v KSCATEGORY_SENSOR_CAMERA
Povolit funkci barevné kamery pro snímání statických obrázků
Spojuje funkce barevné a infračervené kamery do skupiny.
Při výčtu zařízení načte zásobník USB deskriptor BOS ze zařízení. Po popisovači BOS následuje schopnost zařízení specifická pro danou platformu.
#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
};
Popisovač schopností platformy BOS určuje:
GUID schopnosti platformy popisovače MS OS 2.0
Kód ovládacího prvku dodavatele bMS_VendorCode (tady je nastavená hodnota 1. Může vzít jakoukoli hodnotu, kterou dodavatel preferuje) k načtení popisovače MS OS 2.0.
Tento popisovač BOS se vztahuje na verzi operačního systému Windows 10 a novější.
Po zobrazení deskriptoru BOS vydá zásobník USB žádost o kontrolu konkrétního dodavatele, která načte popisovač MS OS 2.0.
Formát žádosti o ovládání pro načtení popisovače specifického pro výrobce MS OS 2.0:
| bmRequestType | BRequest | wValue | WIndex | wDélka | Údaje |
|---|---|---|---|---|---|
| 1100 0000B | bMS_VendorCode | 0x00 | 0x07 | Délka | Vrácený blob sady popisovačů MS OS 2.0 |
bmRequestType
Směr přenosu dat – zařízení k hostiteli
Typ – Dodavatel
Příjemce – zařízení
bRequest
Hodnota bMS_VendorCode vrácená ve struktuře informací o sadě deskriptorů.
wValue
Nastavte na 0x00.
wIndex
0x7 pro MS_OS_20_DESCRIPTOR_INDEX.
wLength
Délka sady popisovače MS OS 2.0, jak je vráceno v popisovači BOS. 0x25C (604) v tomto příkladu.
Očekává se, že zařízení vrátí popisovač MS OS 2.0, jako je ten zadaný v sadě USBVideoMSOS20DescriptorSet.
Sada USBVideoMSOS20DescriptorSet popisuje barevné a IR funkce. Určuje následující hodnoty popisovače MS OS 2.0:
Nastavit záhlaví
Hlavička podmnožiny konfigurace
Záhlaví podmnožiny funkcí barevné kamery
Popisovač funkce hodnoty registru pro ID skupiny senzorů
Popisovač funkce hodnoty registru pro název skupiny senzorů
Popisovač funkce hodnoty registru pro povolení pořízení statického snímku
Popisovač funkce hodnoty registru pro aktivaci platformy DMFT
Záhlaví pro podmnožinu funkcí IR kamery
Popisovač funkce hodnoty registru pro ID skupiny senzorů
Popisovač funkce hodnoty registru pro název skupiny senzorů
Popisovač vlastností hodnot registru pro registraci kamery jako senzorové kamery
Firmware bude mít obslužnou rutinu pro požadavek dodavatele, který vrátí následující popisovač MS OS 2.0 pro imaginární zařízení popsané na začátku této části.
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
};