DShow Bridge-Implementierungsanleitung für UVC-Geräte
Dieses Thema enthält Implementierungsanleitungen zum Konfigurieren von DShow Bridge für Kameras und Geräte, die der USB Video Class (UVC)-Spezifikation entsprechen. Die Plattform verwendet Microsoft-Betriebssystemdeskriptoren aus dem USB-Busstandard, um DShow Bridge zu konfigurieren. Die Erweiterten Eigenschaften-Betriebssystemdeskriptoren sind eine Erweiterung von USB-Standarddeskriptoren und werden von USB-Geräten verwendet, um Windows-spezifische Geräteeigenschaften zurückzugeben, die nicht gemäß Standardspezifikationen aktiviert sind.
Überblick
Der Microsoft Camera Capture-Stapel besteht aus einem Legacyframeworkstapel namens DirectShow und einem modernen Framework namens Multimedia Foundation. IHVs und OEMs mussten Komponenten für ihre Geräte schreiben, um beide Pipelines zu erfüllen.
DShow Bridge wurde mit der Absicht geschrieben, die DShow-Pipeline mit der Media Foundation-Plattform zu überbrücken. Dies ermöglicht echte universelle Treiber, sodass IHVs und OEMs Treiber schreiben können, die mit MediaFoundation- und DShow-Anwendungen unter Windows Version 1607 und höher ausgeführt werden können. Wenn DShow Bridge-Opt-In aktiviert ist, können eine DShow-Anwendung und Freigabeanwendungen die gleiche Kamerahardware gleichzeitig gemeinsam nutzen.
IHVs und OEMs benötigen möglicherweise eine Ausnahme von den Richtlinien für die DShow-Pipeline. Partner können die folgenden Features mithilfe der Betriebssystemdeskriptoren aktivieren:
Ein- oder Abmelden von DShow Bridge: Das Gerät kann die Bridge für eine Pipeline aktivieren, die besser für seine Anforderungen geeignet ist. Die moderne Pipeline ist gründlicher dokumentiert und nutzt die Features, die dem Betriebssystem über die verschiedenen Releases hinzugefügt wurden. Die Legacypipeline, die sich im Wartungsmodus befindet, liegt hinterher.
MJPEG-Dekomprimierung in FrameServer: FrameServer ist ein Dienst, der ein Kameragerät virtualisiert. Dadurch können die Pins vom Gerät von mehreren Clients gemeinsam verwendet werden. Architekturen mit einem optimierten Media Foundation-Dekomprimierungsmodul können dieses Feature verwenden, um MJPEG in FrameServer zu decodieren. Die unkomprimierten übersetzten Medienformate (YUY2) werden den verschiedenen Anwendungen angeboten. Der Stream wird nur einmal für mehrere mögliche Clients dekomprimiert. Dies verbessert die Leistung von Anwendungen. Das folgende Diagramm zeigt die Kameraaufnahmepipeline:
Die OEMs und IHVs, die ihre USB-Kamerageräte verpacken, können die Spezifikation für erweiterte Eigenschaften des USB-Bus-Betriebssystemfeaturedeskriptors verwenden, um DShow Bridge zu konfigurieren, ohne auf INF-Dateiänderungen für ihren UVC-Treiber zurückgreifen zu müssen.
Mit den Betriebssystemdeskriptoren können Geräte Registrierungseigenschaften für USB-Geräte oder zusammengesetzte Geräte definieren.
Zum Konfigurieren von DShow Bridges mithilfe der USB-Betriebssystemdeskriptoren sollte die Hostsoftware den folgenden Registrierungsschlüssel für jede USB-Geräteschnittstelle erstellen:
HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters
DWORD: EnableDshowRedirection
Der Registrierungswert EnableDshowRedirection ist ein Bitmaskenwert, der zum Konfigurieren von DShow Bridge verwendet werden kann, wie in der folgenden Tabelle beschrieben.
Bitmaske | BESCHREIBUNG | Bemerkungen |
---|---|---|
0x00000001 | Anmelden bei DShow Bridge | 0 – Abmelden 1 – Opt-In |
0x00000002 | Aktivieren der MJPEG-Decodierung einmal in FrameServer (siehe Hinweis unten) | 0 – MJPEG-komprimierter Medientyp verfügbar gemacht (kein Vorgang) 1 – Verfügbarmachen der übersetzten unkomprimierten Medientypen aus MJPEG (YUY2) |
Hinweis
Aktiviert die MJPEG-Decodierung einmal in FrameServer, und dann werden die unkomprimierten übersetzten Medienformate (YUY2) für mehrere Anwendungen angeboten. Der Stream wird nur einmal für mehrere mögliche Clients dekomprimiert. Dies verbessert die Leistung von Anwendungen.
Beispiellayouts
Nachfolgend finden Sie Beispiele für die folgenden Spezifikationen:
Spezifikation 1.0 für erweiterte Microsoft-Betriebssystemdeskriptoren
Microsoft OS 2.0-Deskriptorenspezifikation
Microsoft OS Extended Property Descriptors Specification Version 1.0
Der Betriebssystemdeskriptor für erweiterte Eigenschaften verfügt über zwei Komponenten.
Kopfzeilenabschnitt mit fester Länge
Ein oder mehrere benutzerdefinierte Eigenschaftenabschnitte mit variabler Länge, die dem Headerabschnitt folgen
Headerabschnitt
Der Headerabschnitt beschreibt den gesamten Deskriptor für erweiterte Eigenschaften, einschließlich der Gesamtlänge und der Versionsnummer.
Offset | Feld | Größe (Byte) | Wert | BESCHREIBUNG |
---|---|---|---|---|
0 | dwLength | 4 | 0x0000004c | 76 dezimal |
4 | bcdVersion | 2 | 0x0100 | Version 1.0 |
6 | Windex | 2 | 0x005 | Betriebssystemdeskriptor für erweiterte Eigenschaften |
8 | wCount | 2 | 0x0001 | Eine benutzerdefinierte Eigenschaft |
Abschnitt "Benutzerdefinierte Eigenschaft" (1.0-Deskriptor)
Der OS-Deskriptor der erweiterten Eigenschaft des USB-HID-Geräts verfügt über einen benutzerdefinierten Eigenschaftenabschnitt, um den DWORD-Registrierungsschlüssel EnableDshowRedirection zu erstellen.
Offset | Feld | Größe (Byte) | Wert |
---|---|---|---|
0 | dwSize | 4 | 0x00000042 (66 Bytes für diese Eigenschaft) |
4 | dwPropertyDataType | 4 | 0x00000004 (REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyNameLength | 2 | 0x0030 |
10 | bPropertyName | 48 | EnableDshowRedirection (Unicode-Zeichenfolge) |
58 | dwPropertyDataLength | 4 | 0x00000004 (Sizeof(DWORD)) |
62 | bPropertyData | 4 | 0x00000001 (DWORD-Daten) |
Microsoft OS 2.0-Deskriptorenspezifikation
In diesem Beispiel wird veranschaulicht, wie Microsoft 2.0-Deskriptorsätze verwendet werden können, um einen einzelnen DWORD-Registrierungswert von EnableDshowRedirection bereitzustellen, der für Windows-Versionen gilt.
Abschnitt "Benutzerdefinierte Eigenschaft" (2.0-Deskriptor)
Offset | Feld | Größe (Byte) | Wert |
---|---|---|---|
0 | wLength | 2 | Länge dieses Deskriptors in Bytes |
4 | wDescriptorType | 2 | 0x00000004 (REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyDataType | 2 | 0x0030 |
wPropertyNameLength | 2 | ||
10 | PropertyName | Variable | Die Länge des Eigenschaftsnamens |
58 | dwPropertyDataLength | 2 | Länge der Eigenschaftendaten |
62 | PropertyData | Variable | Eigenschaftendaten |
UCHAR Example2\_MSOS20DescriptorSetForFutureWindows\[0x48\] =
{
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength - 12 bytes
0x00, 0x00, // MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x06030000 for future Windows version
0x4A, 0x00, // wTotalLength – 72 bytes
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x3E, 0x00, // wLength - 62 bytes
0x04, 0x00, // wDescriptorType – 5 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD
0x30, 0x00, // wPropertyNameLength – 48 bytes
0x45, 0x00, 0x6E, 0x00, // Property Name - "EnableDshowRedirection"
0x61, 0x00, 0x62, 0x00,
0x6C, 0x00, 0x65, 0x00,
0x44, 0x00, 0x73, 0x00,
0x68, 0x00, 0x6F, 0x00,
0x77, 0x00, 0x52, 0x00,
0x65, 0x00, 0x64, 0x00,
0x69, 0x00, 0x72, 0x00,
0x65, 0x00, 0x63, 0x00,
0x74, 0x00, 0x69, 0x00,
0x6F, 0x00, 0x6E, 0x00,
0x00, 0x00, 0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x00, 0x00, 0x00, 0x00 // PropertyData – 0x00000003 (DShow Bridge is enabled and MJPEG is decoded in FrameServer)
}
Ressourcen
Microsoft OS-Deskriptoren für USB-Geräte