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:
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