Guía de implementación de puente de DShow para dispositivos UVC
En este tema se proporcionan instrucciones de implementación para configurar DShow Bridge para cámaras y dispositivos que cumplan con la especificación de clase de vídeo USB (UVC). La plataforma usa descriptores de sistema operativo de Microsoft desde el estándar de bus USB para configurar DShow Bridge. Los descriptores del sistema operativo de propiedades extendidas son una extensión de descriptores estándar USB y los usan los dispositivos USB para devolver propiedades de dispositivo específicas de Windows que no están habilitadas a través de especificaciones estándar.
Información general
La pila de captura de cámara de Microsoft consta de una pila de marcos heredada denominada DirectShow y un marco moderno denominado Multimedia Foundation. Los IHD y los OEM han tenido que escribir componentes para que sus dispositivos satisfagan ambas canalizaciones.
DShow Bridge se escribió con la intención de puenter la canalización de DShow con la plataforma media Foundation. Esto habilita controladores universales verdaderos para que los IHD y los OEM puedan escribir controladores que se pueden ejecutar con MediaFoundation y las aplicaciones DShow en Windows versión 1607 y posteriores. Con la participación de DShow Bridge habilitada, una aplicación DShow y las aplicaciones de uso compartido pueden compartir simultáneamente el mismo hardware de cámara.
Los IHD y los OEM pueden necesitar una exención de las directivas que rigen la canalización de DShow. Los asociados pueden habilitar las siguientes características mediante los descriptores del sistema operativo:
Participar o no en DShow Bridge: el dispositivo puede optar por participar o no en el Puente a una canalización más adecuada para sus necesidades. La canalización moderna se documenta con más detalle y utiliza las características agregadas al sistema operativo en las varias versiones. La canalización heredada, en modo de mantenimiento, se retrasa.
Descompresión de MJPEG en FrameServer: FrameServer es un servicio que virtualiza un dispositivo de cámara. Esto permite que los Pins del dispositivo se compartan entre varios clientes. Las arquitecturas que tienen un descomprimor optimizado de Media Foundation pueden usar esta característica para descodificar MJPEG en FrameServer. Los formatos multimedia traducidos sin comprimir (YUY2) se ofrecen a las varias aplicaciones. La secuencia solo se descomprime una vez para varios clientes posibles. Esto mejora el rendimiento de las aplicaciones. En el diagrama siguiente se muestra la canalización de captura de cámara:
Los OEM y los IHD empaquetan sus dispositivos de cámara USB pueden usar la especificación del descriptor de características del sistema operativo de propiedades extendidas del bus USB para configurar DShow Bridge sin tener que recurrir a ningún cambio de archivo INF para su controlador UVC.
Los descriptores del sistema operativo permiten a los dispositivos definir propiedades del Registro para dispositivos USB o dispositivos compuestos.
Para configurar puentes de DShow mediante los descriptores del sistema operativo USB, el software host debe crear la siguiente clave del Registro para cada interfaz de dispositivo USB:
HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters
DWORD: EnableDshowRedirection
El valor del Registro EnableDshowRedirection es un valor de máscara de bits que se puede usar para configurar DShow Bridge como se describe en la tabla siguiente.
Máscara de bits | Descripción | Observaciones |
---|---|---|
0x00000001 | Participación en el puente de DShow | 0 – Optar por no participar 1 – Participación |
0x00000002 | Habilitar la descodificación de MJPEG una vez en FrameServer (consulte la nota siguiente) | 0: tipo de medio comprimido MJPEG expuesto (sin operación) 1 – Exponer los tipos de medios sin comprimir traducidos de MJPEG (YUY2) |
Nota
Habilita la descodificación de MJPEG una vez en FrameServer y, a continuación, los formatos multimedia traducidos sin comprimir (YUY2) se ofrecen a varias aplicaciones. La secuencia solo se descomprime una vez para varios clientes posibles. Esto mejora el rendimiento de las aplicaciones.
Diseños de ejemplo
A continuación se incluyen ejemplos para las especificaciones siguientes:
Especificación de descriptores extendidos del sistema operativo de Microsoft 1.0
Especificación de descriptores de Microsoft OS 2.0
Especificación de descriptores de propiedad extendida de Microsoft OS versión 1.0
El descriptor del sistema operativo de propiedades extendidas tiene dos componentes
Una sección de encabezado de longitud fija
Una o varias secciones de propiedades personalizadas de longitud variable, que siguen a la sección de encabezado
Sección de encabezado
En la sección de encabezado se describe el descriptor de propiedades extendidas completo, incluida la longitud total y el número de versión.
Offset | Campo | Tamaño (bytes) | Valor | Descripción |
---|---|---|---|---|
0 | dwLength | 4 | 0x0000004c | 76 decimales |
4 | bcdVersion | 2 | 0x0100 | Versión 1.0 |
6 | Windex | 2 | 0x005 | Descriptor del sistema operativo de propiedad extendida |
8 | wCount | 2 | 0x0001 | Una propiedad personalizada |
Sección de propiedad personalizada (descriptor 1.0)
El descriptor del sistema operativo de la propiedad extendida del dispositivo USB HID tiene una sección de propiedad personalizada para crear la clave del Registro EnableDshowRedirection DWORD.
Offset | Campo | Tamaño (bytes) | Valor |
---|---|---|---|
0 | dwSize | 4 | 0x00000042 (66 bytes para esta propiedad) |
4 | dwPropertyDataType | 4 | 0x00000004 (REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyNameLength | 2 | 0x0030 |
10 | bPropertyName | 48 | EnableDshowRedirection (cadena Unicode) |
58 | dwPropertyDataLength | 4 | 0x00000004 (Sizeof(DWORD)) |
62 | bPropertyData | 4 | 0x00000001 (datos DWORD) |
Especificación de descriptores de Microsoft OS 2.0
En este ejemplo se muestra cómo se pueden usar los conjuntos de descriptores de Microsoft 2.0 para proporcionar un único valor del Registro DWORD de EnableDshowRedirection que se aplica a las versiones de Windows.
Sección de propiedad personalizada (descriptor 2.0)
Offset | Campo | Tamaño (bytes) | Valor |
---|---|---|---|
0 | wLength | 2 | Longitud en bytes de este descriptor |
4 | wDescriptorType | 2 | 0x00000004 (REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyDataType | 2 | 0x0030 |
wPropertyNameLength | 2 | ||
10 | PropertyName | Variable | Longitud del nombre de propiedad |
58 | dwPropertyDataLength | 2 | Longitud de los datos de propiedad |
62 | PropertyData | Variable | Datos de propiedad |
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)
}
Recursos
Descriptores de so de Microsoft para dispositivos USB