Compartir a través de


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:

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

Controlador primario genérico USB (Usbccgp.sys)

Especificación USB