Freigeben über


Implementierungshandbuch für die USB-Videoklasse (UVC)

Ab Windows 10 wird ein USB Video Class (UVC) Treiber für Geräte bereitgestellt, die mit der USB Video Class Spezifikation kompatibel sind (Versionen 1.0 bis 1.5). Dieser Treiber unterstützt Farb- und Sensortypkameras. In diesem Dokument wird beschrieben, wie bestimmte Funktionen einer UVC-kompatiblen Kamera für die Anwendungen über den Posteingangstreiber verfügbar gemacht werden.

Terminologie

Schlüsselwort BESCHREIBUNG
UVC USB-Videoklasse
UVC-Treiber USBVideo.sys Treiber, der mit dem Betriebssystem ausgeliefert wird
IR Infrarot
Farbkamera Die Kamera, die Farbströme ausgibt (z. B. RGB- oder YUV-Kameras)
Sensorkamera Die Kamera, die nicht farbfreie Datenströme ausgibt (z. B. IR- oder Tiefenkameras)
BOS Binärgeräteobjektspeicher
MS OS 2.0-Deskriptor Microsoft-plattformspezifischer BOS-Gerätefähigkeitsdeskriptor

Sensorkameras

Windows unterstützt zwei Kategorien von Kameras. Eine ist eine Farbkamera und die andere ist eine Nicht-Farbsensorkamera. RGB- oder YUV-Kameras werden als Farbkameras und Nicht-Farbkameras wie Graustufen, IR- und Tiefenkameras als Sensorkameras kategorisiert. Der UVC-Treiber unterstützt beide Arten von Kameras. Es wird empfohlen, dass die Kamerafirmware einen Wert angibt, auf dem der UVC-Treiber die Kamera unter einer oder beiden unterstützten Kategorien registrieren würde.

Eine Kamera, die nur Farbformattypen unterstützt, sollte unter KSCATEGORY_VIDEO_CAMERA registriert werden. Eine Kamera, die IR- oder Tiefenformattypen unterstützt, sollte unter KSCATEGORY_SENSOR_CAMERA registriert werden. Eine Kamera, die sowohl Farb- als auch Nicht-Farbformattypen unterstützt, sollte unter KSCATEGORY_VIDEO_CAMERA und KSCATEGORY_SENSOR_CAMERA registriert werden. Diese Kategorisierung hilft Anwendungen beim Auswählen der Kamera, mit der sie arbeiten möchten.

Eine UVC-Kamera kann ihre Kategoriepräferenz durch Attribute wie SensorCameraMode und SkipCameraEnumeration in ihrem BOS MS OS 2.0 Descriptor, der in den folgenden Abschnitten detailliert beschrieben wird, angeben.

Das Attribut SensorCameraMode akzeptiert einen Wert 1 oder 2.

Der Wert 1 registriert das Gerät unter KSCATEGORY_SENSOR_CAMERA. Geben Sie darüber hinaus einen Wert von 1 für SkipCameraEnumeration an, um die Kamera für Anwendungen verfügbar zu machen, die nur nach Sensorkameras suchen. Eine Kamera, die nur Sensorkameramedientypen verfügbar macht, sollte diesen Wert verwenden.

Der Wert 2 für SensorCameraMode registriert das Gerät unter KSCATEGORY_SENSOR_CAMERA & KSCATEGORY_VIDEO_CAMERA. Dadurch steht die Kamera für Anwendungen zur Verfügung, die nach Sensor- und Farbkameras suchen. Eine Kamera, die sowohl Sensorkamera als auch Farbkameramedien verfügbar macht, sollte diesen Wert verwenden.

Es wird empfohlen, den oben genannten Registrierungswert mithilfe des BOS-Deskriptors anzugeben. Im Abschnitt "Beispiel für zusammengesetzte Geräte " finden Sie einen Beispiel-BOS-Deskriptor mit einem plattformspezifischen MS OS 2.0-Deskriptor.

Wenn Sie die Gerätefirmware wie oben beschrieben nicht aktualisieren können, können Sie eine benutzerdefinierte INF verwenden und angeben, dass Ihre Kamera als Sensorkamera registriert werden muss, indem Sie einen Wert für SensorCameraMode und SkipCameraEnumeration wie folgt angeben:

Eine benutzerdefinierte INF-Datei (basierend auf dem UVC-Treiber im Posteingang) muss die folgenden AddReg-Einträge enthalten:

SensorCameraMode: REG_DWORD: 1 (zur Registrierung als Sensorkamera)

SkipCameraEnumeration: REG_DWORD: 1 (nur für IR-Anwendungen verfügbar machen)

Ein Beispiel für den benutzerdefinierten INF-Abschnitt lautet wie folgt:

[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

Wenn die Attribute SensorCameraMode und SkipCameraEnumeration nicht in der Firmware oder in der INF angegeben sind, wird die Kamera als Farbkamera registriert und nur für Farbkamera-fähige Anwendungen sichtbar.

Infrarot-Datenstrom

Der Windows-Posteingangs-USB-Videoklasse (UVC)-Treiber unterstützt Kameras, die die Szene im YUV-Format erfassen und die Pixeldaten über USB als unkomprimierte YUV oder als komprimierte MJPEG-Frames übertragen.

Die folgenden Formattyp-GUIDs sollten im Stream-Videoformatdeskriptor angegeben werden, wie in der WDK ksmedia.h-Headerdatei definiert:

Typ BESCHREIBUNG
KSDATAFORMAT_SUBTYPE_L8_IR Nicht komprimierte 8-Bit-Luma-Ebene. Dieser Typ ist MFVideoFormat_L8 zugeordnet.
KSDATAFORMAT_SUBTYPE_L16_IR Nicht komprimierte 16-Bit-Luma-Ebene. Dieser Typ ist MFVideoFormat_L16 zugeordnet.
KSDATAFORMAT_SUBTYPE_MJPG_IR Komprimierte MJPEG-Frames. Media Foundation konvertiert dies in NICHT komprimierte NV12-Frames und verwendet nur die Luma-Ebene.

Wenn diese Formattyp-GUIDs im guidFormat-Feld des Framedeskriptors angegeben werden, markiert die Media Foundation-Aufnahmepipeline den Datenstrom als IR-Datenstrom. Anwendungen, die mit der Media Foundation FrameReader-API geschrieben wurden, können den IR-Stream nutzen. Von der Pipeline für IR-Datenströme werden keine Skalierungen oder Konvertierungen der IR-Frames unterstützt.

Ein Datenstrom, der IR-Formattypen verfügbar macht, darf keine RGB- oder Tiefenformattypen verfügbar machen.

// 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;

Hinweis

IR-Datenströme werden als normale Aufnahmedatenströme in DShow angezeigt.

Tiefenstrom

Der Windows-Posteingangs-USB-Videoklassentreiber unterstützt Kameras, die Tiefenstreams erzeugen. Diese Kameras erfassen die Tiefeninformationen (z. B. Flugzeit) der Szene und übertragen die Tiefenkarte als unkomprimierte YUV-Frames über USB. Die folgende Formattyp-GUID sollte im Stream-Videoformatdeskriptor angegeben werden, wie in der WDK ksmedia.h-Headerdatei definiert:

Typ BESCHREIBUNG
KSDATAFORMAT_SUBTYPE_D16 16-Bit-Tiefenkartenwerte. Dieser Typ ist identisch mit MFVideoFormat_D16. Die Werte liegen in Millimetern.

Wenn die FORMATtyp-GUID im guidFormat-Element des Framedeskriptors angegeben wird, markiert die Media Foundation-Aufnahmepipeline den Datenstrom als Tiefenstream. Anwendungen, die mit der FrameReader-API geschrieben wurden, können den Tiefendatenstrom nutzen. In der Pipeline für Tiefenstreams werden keine Skalierungen oder Konvertierungen der Tiefenframes unterstützt.

Ein Datenstrom, der Tiefenformattypen verfügbar macht, darf keine RGB- oder IR-Formattypen verfügbar machen.

// 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;

Hinweis

Tiefendatenströme werden als reguläre Aufnahmedatenströme in DShow angezeigt.

Gruppieren von Kameras

Windows unterstützt die Gruppierung von Kameras basierend auf ihrer Container-ID, um Anwendungen bei der Arbeit mit verwandten Kameras zu unterstützen. Beispielsweise kann eine IR-Kamera und eine Farbkamera, die auf demselben physischen Gerät vorhanden ist, dem Betriebssystem als verwandte Kameras verfügbar gemacht werden. Dadurch verwenden Anwendungen wie Windows Hello die zugehörigen Kameras für ihre Szenarien.

Die Beziehung zwischen den Kamerafunktionen könnte in der BOS-Beschreibung der Kamera in der Firmware angegeben werden. Der UVC-Treiber verwendet diese Informationen und macht diese Kamerafunktionen als zusammenhängend verfügbar. Dadurch macht der Kamerastapel des Betriebssystems sie als verwandte Gruppe von Kameras für die Anwendungen verfügbar.

Die Kamerafirmware muss eine UVC-FSSensorGroupID angeben, bei der es sich um eine GUID in Zeichenfolgenform mit der geschweiften Klammer handelt. Die Kameras mit derselben UVC-FSSensorGroupID werden gruppiert.

Die Sensorgruppe kann einen Namen erhalten, indem sie UVC-FSSensorGroupName, eine Unicode-Zeichenfolge, in der Firmware angeben.

Weitere Informationen finden Sie im Abschnitt "Beispiel zusammengesetzter Geräte" für ein illustratives Beispiel BOS, das UVC-FSSensorGroupID und UVC-FSSensorGroupName angibt.

Wenn Sie die Gerätefirmware wie oben beschrieben nicht aktualisieren können, können Sie eine benutzerdefinierte INF verwenden und angeben, dass Ihre Kamera Teil einer Sensorgruppe ist, indem Sie wie folgt eine Sensorgruppen-ID und einen Namen angeben. Die benutzerdefinierte INF-Datei (basierend auf dem UVC-Treiber für den Posteingang) muss die folgenden AddReg-Einträge enthalten:

FSSensorGroupID: REG_SZ: "{Ihr Sensorgruppen-ID-GUID}"

FSSensorGroupName: REG_SZ: "Ihr freundlicher Sensorgruppenname"

Ein Beispiel für den benutzerdefinierten INF-Abschnitt lautet wie folgt:

[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%

Hinweis

Sensorgruppen werden in der DShow-Aufnahmepipeline nicht unterstützt.

Methode 2 oder Methode 3 erfassen weiterhin Unterstützung.

Die UVC-Spezifikation stellt einen Mechanismus bereit, um anzugeben, ob die Videostreamingschnittstelle die Methode 1/2/3 vom Typ "Still Image Capture" unterstützt. Damit das Betriebssystem die Unterstützung der Methode 2/3 des Geräts voll ausschöpfen kann, könnte die Geräte-Firmware über den UVC-Treiber einen Wert im BOS-Deskriptor angeben.

Der Wert, der anzugeben ist, um die Stillbildaufnahme mit Methode 2/3 zu aktivieren, ist ein DWORD mit dem Namen UVC-EnableDependentStillPinCapture. Geben Sie den Wert mithilfe des BOS-Deskriptors an. Das nachstehende zusammengesetzte Beispielgerät veranschaulicht die Aktivierung der Stillbildaufnahme mit einem Beispiel-BOS-Deskriptor.

Wenn Sie die Gerätefirmware wie oben beschrieben nicht aktualisieren können, können Sie eine benutzerdefinierte INF verwenden, um anzugeben, dass Ihre Kamera die Aufnahmemethode Methode 2 oder Methode 3 unterstützt.

Die benutzerdefinierte INF-Datei (basierend auf entweder einem benutzerdefinierten UVC-Treiber oder dem Standard-UVC-Treiber) muss den folgenden AddReg-Eintrag enthalten:

EnableDependentStillPinCapture: REG_DWORD: 0x0 (Deaktiviert) bis 0x1 (Aktiviert)

Wenn dieser Eintrag auf "Enabled" (0x1) festgelegt ist, nutzt die Aufnahmepipeline Methode 2/3 für die Standbildaufnahme, vorausgesetzt, die Firmware kündigt auch die Unterstützung für Methode 2/3 an, wie in der UVC-Spezifikation angegeben.

Ein Beispiel für den benutzerdefinierten INF-Abschnitt lautet wie folgt:

[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

Geräte-MFT-Verkettung

Geräte-MFT ist der empfohlene Benutzermodus-Plug-In-Mechanismus für IHVs und OEMs, um die Kamerafunktionalität unter Windows zu erweitern.

Vor Windows 10, Version 1703, unterstützte die Kamerapipeline nur ein DMFT-Erweiterungs-Plug-In.

Ab Windows 10, Version 1703, unterstützt die Windows-Kamerapipeline eine optionale Kette von DMFTs mit maximal zwei DMFTs.

Ab Windows 11, Version 22H2, unterstützt die Windows-Kamerapipeline eine optionale Kette von DMFTs mit bis zu maximal vier DMFTs.

Dies bietet größere Flexibilität für OEMs und IHVs, um Mehrwert in Form der Nachbearbeitung von Kamerastreams bereitzustellen. Beispielsweise könnte ein Gerät PDMFT zusammen mit einer IHV DMFT und einem OEM DMFT verwenden.

In der folgenden Abbildung ist die Architektur dargestellt, die eine Kette von DMFTs umfasst.

DMFT-Kette.

Proben fließen vom Kameratreiber zu DevProxy und durchlaufen anschließend die DMFT-Ketten. Jede DMFT in der Kette hat die Möglichkeit, die Probe zu verarbeiten. Wenn das DMFT die Probe nicht verarbeiten möchte, kann es als Durchlauf fungieren und die Probe einfach an das nächste DMFT weitergeben.

Bei Steuerelementen wie KsProperty geht der Aufruf in der Kette rückwärts – der letzte DMFT in der Kette erhält den Aufruf zuerst, der Aufruf kann dort bearbeitet oder an vorherige DMFT in der Kette weitergegeben werden.

Fehler werden von DMFT auf DTM und dann auf Anwendungen übertragen. Bei IHV/OEM-DMFTs ist es ein schwerwiegender Fehler für DTM, wenn einer der DMFT nicht instanziiert werden kann.

Anforderungen an DMFTs:

  • Die Eingangsanzahl der DMFT muss mit der Ausgangsanzahl der vorherigen DMFT übereinstimmen, andernfalls schlägt DTM während der Initialisierung fehl. Die Anzahl der Eingabe- und Ausgabe-Pins desselben DMFT muss jedoch nicht übereinstimmen.

  • DMFT muss Schnittstellen unterstützen - IMFDeviceTransform, IMFShutdown, IMFRealTimeClientEx, IKsControl und IMFMediaEventGenerator; IMFTransform muss möglicherweise unterstützt werden, wenn MFT0 konfiguriert ist oder die nächste DMFT in der Kette IMFTransform-Unterstützung erfordert.

  • Auf 64-Bit-Systemen, die frame Server nicht verwenden, müssen sowohl 32-Bit- als auch 64-Bit-DMFTs registriert werden. Da eine USB-Kamera möglicherweise an ein beliebiges System angeschlossen wird, sollte der Hersteller für "externe" (oder nicht im Lieferumfang enthaltene) USB-Kameras sowohl 32-Bit- als auch 64-Bit-DMFTs bereitstellen.

Konfigurieren der DMFT-Kette

Ein Kameragerät kann optional ein DMFT COM-Objekt in einer DLL mithilfe einer benutzerdefinierten INF-Datei bereitstellen, die Sektionen der Inbox USBVideo.INF verwendet.

In der benutzerdefinierten .INF-Datei im Abschnitt "Interface AddReg" geben Sie die DMFT CLSIDs an, indem Sie den folgenden Registrierungseintrag hinzufügen:

CameraDeviceMftCLSIDChain (REG_MULTI_SZ) %Dmft0.CLSID%,%Dmft. CLSID%,%Dmft2.CLSID%

Wie im folgenden Beispiel in den INF-Einstellungen gezeigt (ersetzen Sie die %Dmft0.CLSID-% und % Dmft1.CLSID-% mit den tatsächlichen CLSID-Zeichenfolgen, die Sie für Ihre DMFTs verwenden), sind in Windows 10, Version 1703, maximal zwei CLSIDs zulässig. Die erste steht näher an DevProxy, und die letzte ist der abschließende DMFT in der Kette.

Die Plattform-DMFT-CLSID ist {3D096DDE-8971-4AD5-98F9-C74F56492630}.

Einige Beispieleinstellungen für CameraDeviceMftCLSIDChain :

  • Keine IHV/OEM-DMFT oder Plattform-DMFT

    • CameraDeviceMftCLSIDChain = "" (oder nicht erforderlich, diesen Registrierungseintrag anzugeben)
  • IHV/OEM DMFT

    • CameraDeviceMftCLSIDChain = %Dmft.CLSID%
  • Plattform DMFT <-> IHV/OEM DMFT

    • CameraDeviceMftCLSIDChain = "{3D096DDE-8971-4AD5-98F9-C74F56492630}",%Dmft. CLSID-%

    • Hier ist ein Screenshot des Ergebnisregistrierungsschlüssels für eine USB-Kamera mit der Plattform-DMFT und einer DMFT (mit GUID {D671BE6C-FDB8-424F-81D7-03F5B1CE2CC7}) in der Kette.

Registrierungs-Editor DMFT-Kette.

  • IHV/OEM DMFT0 <-> IHV/OEM DMFT1

    • CameraDeviceMftCLSIDChain = %Dmft0.CLSID%,%Dmft1.CLSID%,

Hinweis

Die CameraDeviceMftCLSIDChain kann maximal 2 CLSIDs aufweisen.

Wenn CameraDeviceMftCLSIDChain konfiguriert ist, werden die älteren CameraDeviceMftCLSID-Einstellungen von DTM übersprungen.

Wenn CameraDeviceMftCLSIDChain nicht konfiguriert ist und das ältere CameraDeviceMftCLSID konfiguriert ist, würde die Kette wie folgt aussehen: (wenn es sich um eine USB-Kamera handelt, die von Platform DMFT unterstützt wird und Platform DMFT aktiviert ist) DevProxy <–> Platform DMFT <–> OEM/IHV DMFT; oder (wenn die Kamera nicht von Platform DMFT unterstützt wird oder Platform DMFT deaktiviert ist) DevProxy <-> OEM/IHV DMFT.

Beispieleinstellungen für INF-Dateien:

[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%

Plattformgerät-MFT

Ab Windows 10, Version 1703, stellt Windows eine integrierte Gerät-MFT für UVC-Kameras bereit, die als Plattform-DMFT (PDMFT) bezeichnet wird. Mit diesem DMFT können IHVs und OEMs von Windows bereitgestellte Nachbearbeitungsalgorithmen nutzen.

Von Platform DMFT unterstützte Features Windows-Veröffentlichung
Ermöglicht gesichtsbasiertes Region of Interest (ROI) für 3A-Anpassungen in ROI-fähigen USB-Kameras. Windows 10, Version 1703

Hinweis

Wenn die Kamera UVC 1.5-basierten ROI nicht unterstützt, wird der PDMFT nicht geladen, auch wenn sich das Gerät für die Verwendung von PDMFT entschieden hat.

Eine UVC-Kamera kann sich für die Verwendung der Plattform DMFT entscheiden, indem sie das Attribut EnablePlatformDmft über den BOS-Deskriptor angibt.

Der Wert, der zum Aktivieren von Platform DMFT angegeben werden soll, ist ein DWORD mit dem Namen UVC-EnablePlatformDmft und gibt seinen Wert mithilfe des BOS-Deskriptors an. Im Abschnitt " Beispiel zusammengesetztes Gerät " unten wird die Aktivierung von Platform DMFT mit einem Beispiel-BOS-Deskriptor veranschaulicht.

Wenn Sie die Gerätefirmware wie oben beschrieben nicht aktualisieren können, können Sie eine benutzerdefinierte INF-Datei verwenden, um Platform DMFT für das Gerät zu aktivieren.

Die benutzerdefinierte INF-Datei (basierend auf einem benutzerdefinierten UVC-Treiber oder dem Inbox-UVC-Treiber) muss den folgenden AddReg-Eintrag enthalten:

EnablePlatformDmft: REG_DWORD: 0x0 (deaktiviert) bis 0x1 (aktiviert)

Wenn dieser Eintrag auf "Enabled" (0x1) festgelegt ist, verwendet die Aufnahmepipeline die Posteingangsplattform DMFT für das Gerät. Im Folgenden sehen Sie ein Beispiel für diesen benutzerdefinierten INF-Abschnitt:

[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

Wenn sich ein Gerät in Windows 10, Version 1703, für die Verwendung von PDMFT entscheidet, werden alle von der PDMFT unterstützten Features aktiviert (basierend auf den Gerätefunktionen). Die granulare Konfiguration von PDMFT-Features wird nicht unterstützt.

Hinweis

Gesichtsbasierte ROI-Koordinaten werden relativ zum Sichtfeld des bilds berechnet, das in den PDMFT übertragen wird. Wenn das Ansichtsfeld aufgrund der Verwendung eines Steuerelements wie Zoom, Schwenken oder Kippen oder Digitales Fenster geändert wurde, ist die Kamera für die Zuordnung der bereitgestellten Koordinaten zum vollständigen Ansichtsfeld des Sensors verantwortlich, wobei das aktuelle Zoom-/Schwenkfenster berücksichtigt wird.

Gesichtsauthentifizierungsprofil via MS OS Descriptors

Windows 10 RS5 erzwingt jetzt eine Face Auth Profile V2-Anforderung für jede Kamera mit Windows Hello-Unterstützung. Für MIPI-basierte Systeme mit benutzerdefiniertem Kameratreiberstapel kann diese Unterstützung entweder über eine INF (oder eine ErweiterungS-INF) oder über ein Benutzermodus-Plug-In (Device MFT) veröffentlicht werden.

Für USB-Videogeräte ist jedoch eine Einschränkung mit UVC-basierten Kameras, dass für Windows 10 19H1 benutzerdefinierte Kameratreiber nicht zulässig sind. Alle UVC-basierten Kameras müssen den nativen USB-Videoklassentreiber verwenden, und alle Anbietererweiterungen müssen in Form eines Geräte-MFT implementiert werden.

Für viele OEM/ODMs ist der bevorzugte Ansatz für Kameramodule die Implementierung eines Großteils der Funktionen innerhalb der Firmware des Moduls, d. h. über Microsoft OS-Deskriptoren.

Die folgenden Kameras werden für die Veröffentlichung des Face Auth-Profils über die MSOS-Deskriptoren (auch BOS-Deskriptoren genannt) unterstützt:

  • In der Sensorgruppe soll eine RGB-Kamera ausschließlich zusammen mit einer separaten IR-Kamera verwendet werden.

  • IR-Kamera, die nur in einer Sensorgruppe mit einer separaten RGB-Kamera verwendet werden soll.

  • RGB+IR-Kamera mit separaten IR- und RGB-Pins.

Hinweis

Wenn die Kamerafirmware einen der drei oben beschriebenen Anforderungen nicht erfüllen kann, muss das ODM/OEM eine Erweiterungs-INF verwenden, um Kameraprofil V2 zu deklarieren.

Microsoft-Beschreibungslayout für Betriebssysteme

Beispiele sind unten für die folgenden Spezifikationen enthalten:

  • Spezifikation erweiterter Beschreibungen des Microsoft-Betriebssystems 1.0

  • Microsoft OS 2.0-Beschreibungsspezifikation

Microsoft OS Extended Descriptor 1.0 Spezifikation

Die erweiterten Eigenschaften des Betriebssystemdeskriptors verfügen über zwei Komponenten.

  • Ein Kopfzeilenabschnitt mit fester Länge
  • Ein oder mehrere benutzerdefinierte Eigenschaftenabschnitte mit variabler Länge, die dem Kopfzeilenabschnitt folgen

Microsoft OS 1.0 Beschreibungs-Kopfzeilenabschnitt

Der Kopfzeilenabschnitt beschreibt eine einzelne benutzerdefinierte Eigenschaft (Face Auth Profile).

Offset Feld Größe (Bytes) Wert BESCHREIBUNG
0 dwLength 4 <>
4 bcdVersion 2 0x0100 Version 1.0
6 wIndex 2 0x0005 Erweiterte Eigenschaft Betriebssystem-Deskriptor
8 wCount 2 0x0001 Eine benutzerdefinierte Eigenschaft

Abschnitt für benutzerdefinierte Eigenschaften der Microsoft OS 1.0-Beschreibung

Offset Feld Größe (Bytes) Wert BESCHREIBUNG
0 dwSize 4 0x00000036 (54) Gesamtgröße (in Byte) für diese Eigenschaft.
4 dwPropertyDataType 4 0x00000004 REG_DWORD_LITTLE_ENDIAN
8 wPropertyNameLength 2 0x00000024 (36) Größe (in Byte) des Eigenschaftsnamens.
10 bPropertyName 36 UVC-CPV2FaceAuth Zeichenfolge "UVC-CPV2FaceAuth" in Unicode.
46 dwPropertyDataLength 4 0x00000004 4 Byte für Eigenschaftsdaten (sizeof(DWORD)).
50 bPropertyData 4 Siehe Datenschema unten Siehe Datenschema unten.
Nutzlastschema

Die UVC-CPV2FaceAuth Datennutzlast ist eine 32-Bit-Ganzzahl ohne Vorzeichen. Der höherwertige 16-Bit-Wert stellt den 0-basierten Index der Medientypliste dar, die vom RGB-Pin bereitgestellt wird. Die niedrigwertigen 16-Bit stellen den 0-basierten Index der Medientypliste dar, die vom IR-Pin bereitgestellt wird.

Beispielsweise eine Typ 3-Kamera, die die folgenden Medientypen verfügbar macht, in der Reihenfolge, die aus dem RGB-Pin deklariert wird:

  • YUY2, 640x480@30fps

  • MJPG, 1280x720@30fps

  • MJPG, 800x600@30fps

  • MJPG, 1920x1080@30fps

Und folgender Medientyp für IR:

  • L8, 480x480@30fps

  • L8, 480x480@15fps

  • L8, 480x480@10fps

Ein Nutzlastwert von 0x00010000 führt dazu, dass das folgende Face Auth-Profil veröffentlicht wird:

Pin0:(RES==1280,720; FRT==30,1; SUT==MJPG) // Zweiter Medientyp (0x0001)
Pin1:(RES==480,480; FRT==30,1; SUT==L8) // Erster Medientyp (0x0000)

Hinweis

Zum Zeitpunkt dieses Schreibens hat Windows Hello eine Mindestanforderung an 480x480@7.5fps für den RGB-Stream und 340x340@15fps für den IR-Datenstrom. IHV/OEMs sind verpflichtet, Medientypen auszuwählen, die diese Anforderung erfüllen, wenn das Face Auth Profile aktiviert wird.

Typ 1 Kamerabeispiel

Da für eine Kamera vom Typ 1 kein IR-Pin vorhanden ist (mit der Erwartung, dass eine Typ 1-Kamera mit einer Typ 2-Kamera auf dem Computer in einer Sensorgruppe gekoppelt wird), wird nur der RGB-Medientypindex veröffentlicht. Für den IR-Medientypindex muss der 16-Bit-Wert der Nutzlast in niedriger Reihenfolge auf 0xFFFF festgelegt werden.

Wenn beispielsweise eine Kamera vom Typ 1 die folgende Liste der Medientypen verfügbar gemacht hat:

  • YUY2, 640x480@30fps

  • MJPG, 1280x720@30fps

  • MJPG, 800x600@30fps

  • MJPG, 1920x1080@30fps

Um die CPV2FaceAuth mit dem Medientyp MJPG, 1280x720@30fps, zu veröffentlichen, muss die Nutzlast auf 0x0001FFFF festgelegt werden.

Typ 2 Kamerabeispiel

Für eine Typ-2-Kamera muss das höhere 16-Bit-Wort auf 0xFFFF festgelegt werden, wobei das niedrigere 16-Bit-Wort den zu verwendenden IR-Medientyp angibt.

Zum Beispiel, für eine Kamera Typ 2 mit den folgenden Medientypen:

  • L8, 480x480@30fps

  • L8, 480x480@15fps

  • L8, 480x480@10fps

Wenn der erste Medientyp für Face Auth verwendet wird, muss der Wert folgendes sein: 0xFFFF0000.

Microsoft OS Extended Descriptor 2.0 Spezifikation

MSOS Extended Descriptor 2.0 kann verwendet werden, um die Registrierungswerte zu definieren, um die Unterstützung von Face Auth-Profil hinzuzufügen. Dies erfolgt mithilfe des Microsoft OS 2.0 Registry-Deskriptors.

Für den Registrierungseintrag UVC-CPV2FaceAuth zeigt Folgendes einen MSOS 2.0-Beispieldeskriptorsatz:

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)
}

Wenn UVC-CPV2FaceAuth Registrierungseintrag hinzugefügt wird, müssen Geräte den Registrierungseintrag "EnableDshowRedirection" nicht veröffentlichen, wie in den DShow Bridge-Implementierungsanleitungen für UVC-Geräte beschrieben.

Wenn der Geräteanbieter jedoch ältere Versionen von Windows unterstützen muss und/oder die MJPEG-Dekomprimierung in Frame Server aktivieren muss, muss der Registrierungseintrag "EnableDshowRedirection" hinzugefügt werden.

Sensorgruppengenerierung

Wenn OEMs Systeme mit Typ 1- und Typ 2-Kameras erstellen, um sowohl RGB- als auch IR-Datenströme für Windows Hello-Unterstützung bereitzustellen, müssen OEMs die beiden Kameras als Teil einer synthetisierten Sensorgruppe deklarieren.

Dazu deklarieren Sie ein FSSensorGroupId- und FSSensorGroupName-Tag in einer Erweiterungs-INF, die für jede Kamera unter der Geräteschnittstelleneigenschaft erstellt werden soll.

Wenn die Erweiterung INF jedoch nicht bereitgestellt wird, können ODMs dieselben MSOS-Deskriptoren verwenden, um die FSSensorGroupId- und FSSensorGroupName-Werte zu veröffentlichen. Der Inbox-USB-Video Class-Treiber von Windows 10 übernimmt automatisch jeden MSOS-Deskriptor, dessen Payload-Name mit dem Präfix "UVC-" beginnt, und migriert den Tag in den Eigenschaftenspeicher der Geräteschnittstelle (wobei das Präfix "UVC-" entfernt wird).

Eine Typ 1- und Typ 2-Kamera, die folgendes veröffentlicht, ermöglicht dem Betriebssystem, die Kameras in eine Sensorgruppe mit mehreren Geräten für die Verwendung mit Windows Hello zu synthetisieren:

UVC-FSSensorGroupId
UVC-FSSensorGroupName

Die Nutzlast für jedes Tag muss eine Unicode-Zeichenfolge sein. Die UVC-FSSensorGroupId-Nutzlast muss eine GUID-Zeichenfolge im folgenden Format sein:

{XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXXXXXX}

Der Wert der GUID muss zwischen den Kameras Typ 1 und Typ 2 identisch sein, und beide Kameras müssen demselben physischen Gehäuse hinzugefügt werden. Für integrierte Kameras ist das physische Chassis der Computer selbst. Für externe Kameras müssen sowohl Type 1- als auch Type 2-Kameramodule in dasselbe physische Gerät integriert werden, das mit dem Computer verbunden ist.

Benutzerdefinierte Geräteschnittstellenkategorien für Sensorgruppen

Ab 19H1 stellt Windows einen angegebenen Erweiterungsmechanismus für IHV/OEM bereit, mit dem synthetisierte Sensorgruppen in einer beliebigen benutzerdefinierten oder vordefinierten Kategorie veröffentlicht werden können. Die Generierung einer Sensorgruppe wird durch IHV/OEMs definiert, die einen Sensorgruppen-ID-Schlüssel im benutzerdefinierten INF bereitstellen:

FSSensorGroupId: {Custom GUID}
FSSensorGroupName: <Anzeigename, der für die Sensorgruppe verwendet wird>

Zusätzlich zu den beiden oben genannten AddReg-Einträgen im INF wird ein neuer AddReg-Eintrag für benutzerdefinierte Kategorien definiert:

FSSensorGroupCategoryList: {GUID}; {GUID};...; {GUID}

Mehrere Kategorien werden mithilfe einer durch Semikolons (;) getrennten GUID-Liste definiert.

Jedes Gerät, das eine übereinstimmende FSSensorGroupId deklariert, muss dieselbe FSSensorGroupCategoryList deklarieren. Wenn die Liste nicht übereinstimmt, werden alle Listen ignoriert, und die Sensorgruppe wird standardmäßig in KSCATEGORY_SENSOR_GROUP veröffentlicht, als ob keine benutzerdefinierten Kategorien definiert wurden.

Kameradrehung

Kamerageräteausrichtung anzeigen

UVC-Kontrollcache

Siehe UVC-Kontrollcache

BOS- und MS OS 2.0-Deskriptor

UVC-kompatible Kamera kann Windows-spezifische Gerätekonfigurationswerte in einer Plattformfunktions-BOS-Deskriptor in seiner Firmware mithilfe von Microsoft OS 2.0-Deskriptoren angeben. In der Dokumentation zu MS OS 2.0-Deskriptor erfahren Sie, wie Sie einen gültigen BOS-Deskriptor angeben, der die Gerätekonfiguration an das Betriebssystem weitergibt.

Microsoft OS 2.0-Deskriptor-Satz-Header

Offset Feld Größe (Bytes) BESCHREIBUNG
0 wLength 2 Die Länge in Bytes dieses Headers muss 10 sein.
2 wDescriptorType 2 MSOS20_SET_HEADER_DESCRIPTOR
4 dwWindowsVersion 4 Windows-Version.
8 wTotalLength 2 Die Größe des gesamten MS OS 2.0-Deskriptors, einschließlich dieser Headergröße.

Microsoft OS 2.0 Registry-Eigenschafts-Deskriptor

Offset Feld Größe (Bytes) BESCHREIBUNG
0 wLength 2 Länge in Bytes dieses Deskriptors
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 wPropertyDataType 2 0x04 (REG_DWORD_LITTLE_ENDIAN, DWORD im Little-Endian-Format)
6 wPropertyNameLength 2 Die Länge des Eigenschaftennamens.
8 Eigenschaftsname Variable Der Name der Registrierungseigenschaft.
8+M wPropertyDataLength 2 Die Länge der Eigenschaftendaten.
10+ Mio. PropertyData Variable Eigenschaftsdaten

Wenn ein gültiger MS OS 2.0-Deskriptor in der Firmware angegeben wird, kopiert der USB-Stack die Konfigurationswerte in den HW-Registrierungsschlüssel des Geräts, wie unten gezeigt:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<Device ID>\<Instance ID>\Device Parameters

Der UVC-Treiber liest die Konfigurationswerte aus dem HW-Registrierungsschlüssel des Geräts und konfiguriert das Gerät auf dem Betriebssystem entsprechend. Wenn die Firmware beispielsweise das Gerät angibt, das mit einem Konfigurationswert als Sensorkamera registriert werden soll, registriert der UVC-Treiber das Gerät direkt unter dieser Kategorie.

Das Konfigurieren von UVC-Geräten über die Plattform-BOS-Beschreibung ist ein Mechanismus, der in Windows 10, Version 1703, aktiviert wurde, um UVC-Geräteanbietern bei der Konfiguration des Geräts zu unterstützen, ohne dass eine INF-Datei unter Windows OS erforderlich ist.

Das Konfigurieren von UVC-Geräten über benutzerdefinierte INF wird weiterhin unterstützt und hat Vorrang vor BOS-Deskriptor-basierten Mechanismus. Beim Angeben von Geräteeigenschaften über INF müssen Sie das Präfix "UVC-" nicht hinzufügen. Dieses Präfix ist nur für Geräteeigenschaften erforderlich, die über BOS-Deskriptor angegeben werden und die pro Schnittstelleninstanz spezifisch sind. Wenn Ihr Gerät Plug-Ins für den Benutzermodus wie DMFT benötigt, müssen Sie einen INF für die Installation des DMFT bereitstellen. Sie kann nicht mithilfe der Firmware konfiguriert werden.

Zurzeit unterstützte Konfigurationswerte über BOS-Deskriptor

Konfigurationsname Typ BESCHREIBUNG
SensorCameraMode REG_DWORD Registrieren Sie die Kamera unter einer bestimmten Kategorie.
UVC-FSSensorGroupID, UVC-FSSensorGroupName REG_SZ Kameras mit demselben UVC-FSSensorGroupID gruppieren
UVC-EnableDependentStillPinCapture REG_DWORD So aktivieren Sie Standbildaufnahme Methode 2/3.
UVC-EnablePlatformDmft REG_DWORD So aktivieren Sie die Plattform-DMFT

Wenn der UVC-Treiber die Registrierungswerte mit dem Präfix "UVC-" sieht, füllt er den Registrierungsschlüssel der Kategorieschnittstelleninstanz des Geräts mit denselben Werten ohne das Präfix auf. Der Treiber führt dies für jede Variable aus, die von der Firmware angegeben wird, nicht nur für die oben aufgeführten Variablen.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}\<Device Symbolic Link>\Device Parameters

Damit das Betriebssystem die BOS Platform Device Capability und MS OS 2.0-Deskriptoren nutzt, muss der Gerätedeskriptor die bcdUSB-Version angeben, die 0x0210 oder höher sein soll.

Beispiel für ein zusammengesetztes Gerät

Dieser Abschnitt enthält einen BOS-Deskriptor und einen MS OS 2.0-Deskriptor für ein Beispiel für ein zusammengesetztes Gerät mit zwei Kamerafunktionen. Eine Funktion ist eine UVC-Farbkamera und die zweite Funktion ist eine UVC IR-Kamera.

Die Beispielbeschreibungen sind wie folgt:

  1. Registrieren der Farbkamerafunktion unter KSCATEGORY_VIDEO_CAMERA

  2. Registrieren der IR-Kamerafunktion unter KSCATEGORY_SENSOR_CAMERA

  3. Aktivieren Sie die Standbildaufnahme der Farbkamera

  4. Ordnet die Farb- und IR-Kamerafunktionen als Gruppe zu.

Bei der Geräteaufzählung ruft der USB-Stapel den BOS-Deskriptor vom Gerät ab. Nach dem BOS-Deskriptor handelt es sich um eine plattformspezifische Gerätefunktion.

#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
};

Der BOS-Plattformfunktionsdeskriptor gibt Folgendes an:

  1. MS OS 2.0-Deskriptorplattform-GUID

  2. Ein Anbietersteuerungscode bMS_VendorCode (hier ist er auf 1 gesetzt, kann jedoch jeden vom Anbieter gewählten Wert annehmen), um den MS OS 2.0-Deskriptor abzurufen.

  3. Dieser BOS-Deskriptor gilt für Die Betriebssystemversion Windows 10 und höher.

Nachdem der BOS-Deskriptor angezeigt wurde, stellt der USB-Stapel die herstellerspezifische Steuerelementanforderung aus, um den MS OS 2.0-Deskriptor abzurufen.

Format der Steuerelementanforderung zum Abrufen von anbieterspezifischen MS OS 2.0-Deskriptoren:

bmRequestType BRequest wValue WIndex wLength Daten
1100 0000B bMS_VendorCode 0x00 0x07 Länge Zurückgegebener MS OS 2.0-Deskriptorsatz-Datenblock

bmRequestType

  • Datenübertragungsrichtung – Gerät zu Host

  • Typ – Anbieter

  • Empfänger – Gerät

bRequest

Der bMS_VendorCode-Wert, der in der Informationsstruktur des Deskriptorsatzes zurückgegeben wird.

wValue

Auf 0x00 festgelegt.

wIndex

0x7 für MS_OS_20_DESCRIPTOR_INDEX.

wLength

Länge des MS OS 2.0-Deskriptorsatzes, wie im BOS-Deskriptor zurückgegeben. 0x25C (604) in diesem Beispiel.

Es wird erwartet, dass das Gerät den MS OS 2.0-Deskriptor zurückgibt, wie er im USBVideoMSOS20DescriptorSet angegeben ist.

Das USBVideoMSOS20DescriptorSet beschreibt die Farb- und IR-Funktionen. Es gibt die folgenden MS OS 2.0-Deskriptorwerte an:

  1. Kopfzeile festlegen

  2. Konfigurationsunterabschnitt-Kopfzeile

  3. Kopfzeile des Farbkamerafunktionsuntermenüs

  4. Deskriptor des Registrierungswertmerkmals für Sensorgruppen-ID

  5. Registrierungswert-Featuredeskriptor für Sensorgruppennamen

  6. Registrierungswert-Featuredeskriptor zum Aktivieren der stillen Bildaufnahme

  7. Registrierungswert-Featuredeskriptor zum Aktivieren von Plattform-DMFT

  8. Kopfzeile der IR-Kamerafunktion

  9. Registrywert-Feature-Deskriptor für Sensorgruppen-ID

  10. "Merkmalsbeschreiber für Registrierungswert des Sensorgruppennamens"

  11. Registrierungswertfunktionsdeskriptor für die Registrierung der Kamera als Sensorkamera

Die Firmware verfügt über einen Handler für die Herstelleranforderung, der den folgenden MS OS 2.0-Deskriptor für das am Anfang dieses Abschnitts beschriebene imaginäre Gerät zurückgibt.

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
};