Linee guida per l'implementazione di DShow Bridge per i dispositivi UVC
Questo argomento fornisce indicazioni sull'implementazione per la configurazione di DShow Bridge per fotocamere e dispositivi conformi alla specifica UVC (USB Video Class). La piattaforma usa descrittori del sistema operativo Microsoft dallo standard del bus USB per configurare DShow Bridge. I descrittori del sistema operativo delle proprietà estese sono un'estensione dei descrittori standard USB e vengono usati dai dispositivi USB per restituire proprietà specifiche del dispositivo Windows non abilitate tramite specifiche standard.
Panoramica
Lo stack microsoft Camera Capture è costituito da uno stack di framework legacy denominato DirectShow e un framework moderno denominato Multimedia Foundation. Gli IHD e gli OEM hanno dovuto scrivere componenti per i dispositivi per soddisfare entrambe le pipeline.
DShow Bridge è stato scritto con l'intento di colmare la pipeline DShow con la piattaforma Media Foundation. Ciò abilita i veri driver universali in modo che IHD e OEM possano scrivere driver che possono essere eseguiti con MediaFoundation e DShow applicazioni in Windows versione 1607 e successive. Con il consenso esplicito di DShow Bridge abilitato, un'applicazione DShow e le applicazioni di condivisione possono condividere contemporaneamente lo stesso hardware della fotocamera.
Gli IHD e gli OEM potrebbero richiedere un'esenzione dai criteri che regolano la pipeline DShow. I partner possono abilitare le funzionalità seguenti usando i descrittori del sistema operativo:
Consenso esplicito o rifiuto esplicito di DShow Bridge: il dispositivo può acconsentire esplicitamente o rifiutare esplicitamente il bridge a una pipeline più adatta alle proprie esigenze. La pipeline moderna è più accuratamente documentata e usa le funzionalità aggiunte al sistema operativo in più versioni. La pipeline legacy, in modalità di manutenzione, ritarda.
Decompressione MJPEG in FrameServer: FrameServer è un servizio che virtualizza un dispositivo fotocamera. Ciò consente di condividere i pin dal dispositivo tra più client. Le architetture con un decompressore di Media Foundation ottimizzato possono usare questa funzionalità per decodificare MJPEG in FrameServer. I formati multimediali tradotti non compressi (YUY2) vengono offerti a più applicazioni. Il flusso viene decompresso una sola volta per più client possibili. Ciò migliora le prestazioni delle applicazioni. Il diagramma seguente mostra la pipeline di acquisizione della fotocamera:
Gli OEM e IHV che includono i dispositivi fotocamera USB possono usare la specifica del descrittore delle funzionalità del sistema operativo delle proprietà estese del bus USB per configurare DShow Bridge senza ricorrere ad alcuna modifica dei file INF per il driver UVC.
I descrittori del sistema operativo consentono ai dispositivi di definire le proprietà del Registro di sistema per dispositivi USB o dispositivi compositi.
Per configurare DShow Bridges usando i descrittori del sistema operativo USB, il software host deve creare la seguente chiave del Registro di sistema per ogni interfaccia del dispositivo USB:
HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters
DWORD: EnableDshowRedirection
Il valore del Registro di sistema EnableDshowRedirection è un valore di maschera di bit che può essere usato per configurare DShow Bridge come descritto nella tabella seguente.
Maschera di bit | Descrizione | Osservazioni |
---|---|---|
0x00000001 | Acconsentire esplicitamente a DShow Bridge | 0 – Rifiutare esplicitamente 1 – Acconsentire esplicitamente |
0x00000002 | Abilitare la decodifica MJPEG una sola volta in FrameServer (vedere la nota seguente) | 0 : tipo di supporto compresso MJPEG esposto (nessuna operazione) 1 : esporre i tipi di supporti non compressi tradotti da MJPEG (YUY2) |
Nota
Abilita la decodifica di MJPEG una volta in FrameServer e quindi i formati multimediali tradotti non compressi (YUY2) vengono offerti a più applicazioni. Il flusso viene decompresso una sola volta per più client possibili. Ciò migliora le prestazioni delle applicazioni.
Layout di esempio
Di seguito sono riportati esempi per le specifiche seguenti:
Specifica dei descrittori estesi del sistema operativo Microsoft 1.0
Specifica dei descrittori di Microsoft OS 2.0
Specifiche dei descrittori delle proprietà estese del sistema operativo Microsoft versione 1.0
Il descrittore del sistema operativo delle proprietà estese ha due componenti
Sezione intestazione a lunghezza fissa
Una o più sezioni delle proprietà personalizzate a lunghezza variabile, che segue la sezione dell'intestazione
Sezione di intestazione
La sezione intestazione descrive l'intero descrittore delle proprietà estese, inclusa la lunghezza totale e il numero di versione.
Offset | Campo | Dimensioni (byte) | Valore | Descrizione |
---|---|---|---|---|
0 | dwLength | 4 | 0x0000004c | 76 decimali |
4 | bcdVersion | 2 | 0x0100 | Versione 1.0 |
6 | Windex | 2 | 0x005 | Descrittore del sistema operativo della proprietà estesa |
8 | wCount | 2 | 0x0001 | Una proprietà personalizzata |
Sezione Proprietà personalizzata (descrittore 1.0)
Il descrittore della proprietà estesa del dispositivo USB HID dispone di una sezione di proprietà personalizzata per creare la chiave del Registro di sistema DWORD EnableDshowRedirection .
Offset | Campo | Dimensioni (byte) | Valore |
---|---|---|---|
0 | dwSize | 4 | 0x00000042 (66 byte per questa proprietà) |
4 | dwPropertyDataType | 4 | 0x00000004 (REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyNameLength | 2 | 0x0030 |
10 | bPropertyName | 48 | EnableDshowRedirection (stringa Unicode) |
58 | dwPropertyDataLength | 4 | 0x00000004 (Sizeof(DWORD)) |
62 | bPropertyData | 4 | 0x00000001 (dati DWORD) |
Specifica dei descrittori di Microsoft OS 2.0
In questo esempio viene illustrato come usare i set di descrittori di Microsoft 2.0 per fornire un singolo valore del Registro di sistema DWORD di EnableDshowRedirection applicabile alle versioni di Windows.
Sezione Proprietà personalizzata (descrittore 2.0)
Offset | Campo | Dimensioni (byte) | Valore |
---|---|---|---|
0 | wLength | 2 | Lunghezza in byte di questo descrittore |
4 | wDescriptorType | 2 | 0x00000004 (REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyDataType | 2 | 0x0030 |
wPropertyNameLength | 2 | ||
10 | PropertyName | Variabile | Lunghezza del nome della proprietà |
58 | dwPropertyDataLength | 2 | Lunghezza dei dati delle proprietà |
62 | PropertyData | Variabile | Dati delle proprietà |
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)
}
Risorse
Descrittori del sistema operativo Microsoft per dispositivi USB