Orientações de implementação do DShow Bridge para dispositivos UVC

Este tópico fornece orientações de implementação para configurar o DShow Bridge para câmeras e dispositivos que estão em conformidade com a especificação USB Video Class (UVC). A plataforma utiliza os descritores de Sistema Operativo da Microsoft do padrão de barramento USB para configurar o DShow Bridge. Os Descritores do SO de Propriedades Estendidas são uma extensão dos descritores padrão USB e são usados por dispositivos USB para retornar propriedades de dispositivos específicos do Windows que não estão habilitadas por meio de especificações padrão.

Visão geral

A stack de Captura de Câmara da Microsoft é composta por um framework legado chamado DirectShow e um framework moderno chamado Media Foundation. IHVs e OEMs tiveram que escrever componentes para seus dispositivos para satisfazer ambos os pipelines.

O DShow Bridge foi escrito com a intenção de fazer a ponte entre o pipeline do DShow e a plataforma Media Foundation. Isso permite verdadeiros drivers universais para que IHVs e OEMs possam escrever drivers que podem ser executados com aplicativos MediaFoundation e DShow no Windows versão 1607 e posterior. Com a opção de inclusão do DShow Bridge habilitada, um aplicativo DShow e aplicativos de compartilhamento podem compartilhar o mesmo hardware de câmera simultaneamente.

IHVs e OEMs podem precisar de uma isenção das políticas que regem o pipeline DShow. Os parceiros podem ativar os seguintes recursos usando os descritores do sistema operacional:

  • Optar por entrar ou sair do DShow Bridge: O dispositivo pode optar por entrar ou sair do Bridge para um pipeline mais adequado às suas necessidades. O fluxo de trabalho moderno é mais bem documentado e utiliza os recursos adicionados ao OS ao longo de várias versões. O sistema legado, estando em modo de manutenção, está atrasado.

  • Descompressão MJPEG no FrameServer: FrameServer é um serviço de virtualização de um dispositivo de câmera. Isso permite que os Pins do dispositivo sejam compartilhados entre vários clientes. Arquiteturas com um descompactador Media Foundation otimizado podem usar esse recurso para decodificar MJPEG no FrameServer. Os formatos de mídia traduzidos não compactados (YUY2) são oferecidos para os vários aplicativos. O fluxo só é descompactado uma vez para vários clientes possíveis. Isso melhora o desempenho dos aplicativos. O diagrama a seguir mostra o fluxo de captura da câmera.

pipeline de captura de câmera.

Os OEMs e IHVs que empacotam seus dispositivos de câmera USB podem usar a especificação Extended Properties OS Feature Descriptor do padrão de barramento USB para configurar o DShow Bridge sem recorrer a quaisquer alterações de arquivo INF para seu driver UVC.

Os descritores do SO permitem que os dispositivos definam propriedades de registo para dispositivos USB ou dispositivos compostos.

Para configurar o DShow Bridges usando os descritores do sistema operacional USB, o software host deve criar a seguinte chave do Registro para cada interface de dispositivo USB:

HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters

DWORD: EnableDshowRedirection

O valor do Registro EnableDshowRedirection é um valor de máscara de bits que pode ser usado para configurar a Ponte DShow conforme descrito na tabela abaixo.

Máscara de bits Descrição Observações
0x00000001 Opte pelo DShow Bridge 0 – Opt-out
1 – Adesão
0x00000002 Habilite a decodificação MJPEG uma vez no FrameServer (veja a nota abaixo) 0 – Tipo de mídia compactada MJPEG exposta (sem operação)
1 – Exponha os tipos de mídia não compactados traduzidos do MJPEG (YUY2)

Observação

Permite a decodificação MJPEG uma vez no FrameServer e, em seguida, os formatos de mídia traduzidos não compactados (YUY2) são oferecidos a vários aplicativos. O fluxo só é descompactado uma vez para vários clientes possíveis. Isso melhora o desempenho dos aplicativos.

Layouts de exemplo

Seguem-se exemplos para as seguintes especificações:

  • Microsoft OS extended descriptors specification 1.0

  • Especificação dos descritores do Microsoft OS 2.0

Especificação das descrições de propriedades estendidas do Microsoft OS versão 1.0

O descritor de SO de propriedades estendidas tem dois componentes:

  • Uma seção de cabeçalho de comprimento fixo

  • Uma ou mais seções de propriedades personalizadas de comprimento variável, que seguem a seção de cabeçalho

Seção de cabeçalho

A seção header descreve todo o descritor de propriedades estendidas, incluindo o comprimento total e o número da versão.

Compensação Campo Tamanho (bytes) Valor Descrição
0 dwComprimento 4 0x0000004c 76 decimais
4 bcdVersão 2 0x0100 Versão 1.0
6 wÍndice 2 0x005 Descritor de SO de propriedade estendida
8 wContagem 2 0x0001 Uma propriedade personalizada

Seção de propriedade personalizada (descritor 1.0)

O descritor de propriedade estendida de SO do dispositivo USB HID tem uma seção de propriedade personalizada para criar a chave de registro DWORD EnableDshowRedirection.

Compensação Campo Tamanho (bytes) Valor
0 dwSize 4 0x00000042 (66 bytes para esta propriedade)
4 dwPropertyDataType 4 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyNameLength 2 0x0030
10 bNome da propriedade 48 EnableDshowRedirection (cadeia de caracteres Unicode)
58 dwPropertyDataLength 4 0x00000004 (Sizeof(DWORD))
62 bPropertyData 4 0x00000001 (dados DWORD)

Especificação dos descritores do Microsoft OS 2.0

Este exemplo demonstra como os conjuntos de descritores do Microsoft 2.0 podem ser usados para fornecer um único valor do Registro DWORD de EnableDshowRedirection que se aplica às versões do Windows.

Seção de propriedade personalizada (descritor 2.0)

Compensação Campo Tamanho (bytes) Valor
0 wComprimento 2 Comprimento em bytes deste descritor
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 TipoDeDadosDaPropriedade 2 0x0030
wPropertyNameLength 2
10 Nome da propriedade Variável O comprimento do nome da propriedade
58 dwPropertyDataLength 2 Comprimento dos dados de propriedade
62 Dados de Propriedade Variável Dados da propriedade
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

Descritores do sistema operacional Microsoft para dispositivos USB

Driver principal genérico USB (Usbccgp.sys)

Especificação USB