Compartilhar via


Diretrizes de implementação da Ponte DShow para dispositivos UVC

Este tópico fornece diretrizes de implementação para configurar a Ponte DShow para câmeras e dispositivos que estão em conformidade com a especificação da Classe de Vídeo USB (UVC). A plataforma usa descritores do sistema operacional da Microsoft do padrão de barramento USB para configurar a Ponte DShow. Os Descritores de SO de Propriedades Estendidas são uma extensão de descritores padrão USB e são usados por dispositivos USB para retornar propriedades de dispositivo específicas do Windows que não estão habilitadas por meio de especificações padrão.

Visão geral

A pilha do Microsoft Camera Capture é composta por uma pilha de estrutura herdada chamada DirectShow e uma estrutura moderna chamada Multimedia Foundation. IHVs e OEMs tiveram que escrever componentes para seus dispositivos para atender a ambos os pipelines.

A Ponte DShow foi escrita com a intenção de fazer a ponte do pipeline DShow com a plataforma Media Foundation. Isso permite drivers universais verdadeiros para que IHVs e OEMs possam gravar drivers que podem ser executados com aplicativos MediaFoundation e DShow no Windows versão 1607 e posterior. Com a aceitaçã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 habilitar os seguintes recursos usando os Descritores do sistema operacional:

  • Aceitando ou saindo da Ponte DShow: o dispositivo pode aceitar ou sair da Ponte para um pipeline mais adequado às suas necessidades. O pipeline moderno é documentado mais detalhadamente e utiliza os recursos adicionados ao sistema operacional em várias versões. O pipeline herdado, que está no modo de manutenção, fica para trás.

  • Descompactação MJPEG em FrameServer: FrameServer é um serviço que virtualiza um dispositivo de câmera. Isso permite que os Pinos do dispositivo sejam compartilhados entre vários clientes. As arquiteturas com um descompactador otimizado do Media Foundation podem usar esse recurso para decodificar o MJPEG no FrameServer. Os formatos de mídia traduzidos descompactados (YUY2) são oferecidos aos 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 pipeline de captura de câmera:

pipeline de captura de câmera.

Os OEMs e os IHVs que empacotam seus dispositivos de câmera USB podem usar a especificação do Descritor de Recursos do SISTEMA Operacional de Propriedades Estendidas do padrão do barramento USB para configurar a Ponte DShow sem recorrer a nenhuma alteração de arquivo INF para o driver UVC.

Os descritores do sistema operacional permitem que os dispositivos definam propriedades do Registro 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 pela tabela abaixo.

Máscara de bits Descrição Comentários
0x00000001 Aceitar a Ponte DShow 0 – Recusar
1 – Aceitar
0x00000002 Habilitar a decodificação MJPEG uma vez no FrameServer (veja a observação abaixo) 0 – Tipo de mídia compactada MJPEG exposto (sem operação)
1 – Expor os tipos de mídia descompactados traduzidos do MJPEG (YUY2)

Observação

Habilita a decodificação de MJPEG uma vez no FrameServer e, em seguida, os formatos de mídia traduzidos descompactados (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

Os exemplos estão incluídos abaixo para as seguintes especificações:

  • Especificação de descritores estendidos do sistema operacional da Microsoft 1.0

  • Especificação de descritores do Microsoft OS 2.0

Especificação de descritores de propriedade estendida do sistema operacional da Microsoft versão 1.0

O descritor do sistema operacional 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 segue a seção de cabeçalho

Seção de cabeçalho

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

Deslocamento Campo Tamanho (bytes) Valor Descrição
0 dwLength 4 0x0000004c 76 decimais
4 bcdVersion 2 0x0100 Versão 1.0
6 Windex 2 0x005 Descritor de sistema operacional de propriedade estendida
8 wCount 2 0x0001 Uma propriedade personalizada

Seção De propriedade personalizada (descritor 1.0)

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

Deslocamento Campo Tamanho (bytes) Valor
0 dwSize 4 0x00000042 (66 bytes para essa propriedade)
4 dwPropertyDataType 4 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyNameLength 2 0x0030
10 bPropertyName 48 EnableDshowRedirection (cadeia de caracteres Unicode)
58 dwPropertyDataLength 4 0x00000004 (Sizeof(DWORD))
62 bPropertyData 4 0x00000001 (dados DWORD)

Especificação de 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 de registro DWORD de EnableDshowRedirection que se aplica a versões do Windows.

Seção Propriedade Personalizada (descritor 2.0)

Deslocamento Campo Tamanho (bytes) Valor
0 wLength 2 Comprimento em bytes deste descritor
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyDataType 2 0x0030
wPropertyNameLength 2
10 PropertyName Variável O comprimento do nome da propriedade
58 dwPropertyDataLength 2 Comprimento dos dados da propriedade
62 PropertyData 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 da Microsoft para dispositivos USB

Driver pai genérico USB (Usbccgp.sys)

Especificação USB