Compartilhar via


Identificando a localização de câmeras internas (aplicativos de dispositivo UWP)

Este tópico fornece informações sobre o suporte a câmeras internas em sistemas no Windows 8.1. Ele descreve como identificar a localização física de câmeras internas para que elas funcionem corretamente com aplicativos UWP. Ele também descreve como definir a ID do Modelo para que a câmera funcione com aplicativos de dispositivo UWP. Para saber mais sobre aplicativos de dispositivo UWP em geral, consulte Conhecer os aplicativos de dispositivo UWP.

Fornecendo localização física

Os sistemas com câmeras embutidas com direção fixada mecanicamente devem informar a localização física das câmeras. Essas informações de localização física indicam para qual direção a câmera está voltada, como para frente ou para trás, de forma que os aplicativos para usar a câmera no Windows 8.1 funcionem corretamente.

Os dois Requisitos de Certificação de Hardware do Windows a seguir, que permitem que o Windows reconheça a localização de uma câmera, são necessários:

  • System.Client.PCContainer.PCAppearsAsSingleObject. A câmera deve ser agrupada no contêiner do dispositivo do computador, que contém as funções do dispositivo localizadas fisicamente dentro do computador. Uma câmera deve ser agrupada no contêiner de dispositivo do computador para expor sua localização física aos aplicativos, porque os dispositivos externos ao contêiner do computador não devem ter uma direção mecanicamente fixa.

  • System.Client.Webcam.PhysicalLocation. O firmware deve fornecer informações de localização física, usando as informações de _PLD em tabelas ACPI para indicar a localização e a orientação da câmera.

Por que o Windows requer as câmeras de localização física

O Windows precisa saber a localização física das câmeras internas pelos seguintes motivos:

  • Os aplicativos UWP usam a localização física para determinar qual câmera usar se várias câmeras estiverem presentes. Por exemplo, um aplicativo de chat usará como padrão a câmera frontal que fica voltada para o usuário quando o aplicativo for iniciado.

  • Os aplicativos UWP usam a localização física para determinar como espelhar ou girar a visualização do vídeo.

  • Se a câmera estiver voltada para o usuário, a visualização deverá parecer como se o usuário estivesse olhando para um espelho. Para fazer isso, o aplicativo inverterá os lados esquerdo e direito da visualização, para que a visualização espelhe o vídeo. Se a câmera estiver virada para longe do usuário, o aplicativo não precisará espelhar o vídeo.

  • Se o aplicativo girar a visualização, o grau de rotação será diferente, dependendo da posição da câmera.

Como agrupar a câmera no contêiner do dispositivo de computadores

De acordo com o requisito de certificação System.Client.PCContainer.PCAppearsAsSingleObject, também conhecido como SYSFUND-0200, os nós internos do dispositivo da câmera devem ser agrupados no contêiner do dispositivo de computadores. Em outras palavras, a câmera interna não deve ser exibida em Dispositivos e Impressoras e deve ser consolidada no contêiner de computador.

A maneira de implementar esse requisito depende do tipo de barramento da câmera interna. Se o dispositivo puder expor informações sobre o local do dispositivo físico em tabelas ACPI, o agrupamento correto poderá ser especificado na camada ACPI, incluindo informações _PLD nas tabelas e modificando o sinalizador UserVisible na tabela ACPI, conforme descrito em Suporte a dispositivos multifuncionais e agrupamentos de contêineres de dispositivos. Caso contrário, substitua o sinalizador removível usando a chave do Registro DeviceOverrides. Para obter mais informações, consulte Chave do Registro DeviceOverrides.

Como fornecer localização física usando informações de _PLD na tabela ACPI

De acordo com o requisito de certificação System.Client.Webcam.PhysicalLocation, o valor _PLD que indica a localização da câmera deve ser fornecido na tabela ACPI (Interface de Energia e Configuração Avançada). Isso se aplica a qualquer dispositivo de câmera que esteja embutido no chassi do sistema e tenha direção fixada mecanicamente. O firmware deve fornecer o método _PLD e definir o campo Painel (bits 69:67) para o valor apropriado para o painel no qual a câmera está montada. Por exemplo, Front indica que a câmera está voltada para o usuário (webcam), enquanto Back indica que a câmera está voltada para longe do usuário final (câmera fotográfica ou de vídeo).

Valor dos bits 69:67 Painel
0 TOP
1 Inferior
2 Left
3 Right
4 Front
5 Voltar
6 Desconhecido

Além disso, o bit 143:128 (Deslocamento Vertical) e os bits 159:144 (Deslocamento Horizontal) devem fornecer a localização relativa da câmera em relação ao visor. Essa origem é relativa ao endereçamento de pixel nativo no componente de visor e deve corresponder à orientação de exibição atual de paisagem ou retrato. A origem é o canto inferior esquerdo do visor, em que os valores positivos de Deslocamento Horizontal e Vertical estão à direita e para cima, respectivamente.

Para uma câmera interna conectada por USB, o nó do dispositivo para o dispositivo USB será criado na tabela ACPI sob um nó de dispositivo Porta USB.

Para especificar o endereço (_ADR):

  1. Instale o Windows no PC de destino.

  2. Vá para o Gerenciador de Dispositivos.

  3. Selecione e segure (ou clique com o botão direito do mouse) na webcam de destino e escolha Propriedades.

  4. Abra a guia Detalhes e selecione Endereço no menu Propriedade.

  5. O valor na caixa Valor é o endereço em que o dispositivo está localizado.

  6. Defina o valor em _ADR na tabela ACPI.

  7. Defina o valor _PLD com base na especificação ACPI e no design do PC.

Este exemplo é uma tabela ACPI para uma câmera conectada por USB. Neste exemplo, o valor é 0x1. O nono byte contém o código do painel para o local (bits[69:67]). Se o dispositivo for um dispositivo composto USB, o PLD deverá estar no vídeo FUNCTION. Isso significa que uma entrada Device() adicional será necessária.

Device(PRTD)
{
     Name(_ADR, 0x6)
     Name(_UPC, Package(0x4)
     {
            ....
     }
     Name(_PLD, Buffer(0x10)
     {
            ....
     }
     Device(WCAM)
     {
           Name(_ADR, 0x6)
           Name(_PLD, Buffer(0x10) {
           0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
           0x20, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
     }
}

Consulte a especificação de ACPI para obter informações mais detalhadas sobre _PLD.

Para nós downstream de USBCCGP, o valor de endereço é calculado adicionando o número da porta ao primeiro número de interface da função da câmera. Se USBCCGP não estiver carregado para o dispositivo, o endereço será simplesmente o número da porta. Se você precisar prever o número de endereço sem instalar o Windows, use esta fórmula para calculá-lo. Se o dispositivo de destino for um dispositivo de função única (sem usar o dispositivo de estilo composto USB), o valor de endereço será calculado usando apenas o número da porta.

Fornecendo ID do modelo

O sistema de metadados de dispositivo do Windows poderá consultar o pacote de metadados de dispositivo de uma câmera inserida internamente somente se o nó de dispositivo da câmera tiver uma propriedade Model ID e a categoria de dispositivo for Imaging.Webcam. Para tornar os metadados de uma câmera interna detectáveis pelo Windows para que o pacote de metadados do dispositivo seja associado corretamente ao dispositivo e ao aplicativo de dispositivo UWP específico da câmera, um OEM precisa fazer o seguinte:

  • Defina a Model ID no nó do dispositivo, usando o sinalizador InternalDeviceModification na chave do Registro do dispositivo.

Como definir a Model ID para o nó de dispositivo da câmera interna

Para câmeras internas, o OEM cria um GUID a ser usado para a Model ID e cria uma chave do Registro para ela. A propriedade Model ID é adicionada ao nó do dispositivo usando o mecanismo InternalDeviceModification, que é uma tabela de pesquisa baseada no Registro (LUT) que consiste em chaves do Registro mapeadas para dispositivos específicos. Esta tabela InternalDeviceModification é mantida sob a seguinte chave do Registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\InternalDeviceModification

A entrada de subchave a ser criada na chave do Registro InternalDeviceModification é o GUID fornecido pelo OEM para ModelID. A presença dessa chave adiciona a Model ID ao nó do dispositivo da câmera, com base na ID de hardware do dispositivo e nas informações de localização indicadas pelo valor _PLD na tabela ACPI.

registry keys and values for internaldevicemodification.

Chave do Registro InternalDeviceModification

A chave do Registro InternalDeviceModification indica que pelo menos uma câmera usa a ModelID.

Nome da chave do Registro InternalDeviceModification
Obrigatório/opcional Obrigatório
Caminho HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
Requisitos de formato Nenhum
Subchaves válidas Chave do Registro Model ID (consulte os seguintes requisitos e exemplos de formato de subchave)

Chave do Registro Model ID

Nome da chave do Registro Model ID (o valor exato da ID do modelo é o nome da chave)
Obrigatório/opcional Obrigatório
Requisitos de formato O nome da chave é um GUID criado pelo OEM. Deve ter colchetes de abertura e fechamento.
Valores válidos Valores de Registro de ID de hardware ou PLD_Panel
Exemplos {43922620-DAD9-4C05-BE3F-F65B089D84D8}

Valor do Registro de ID de hardware

Nome do valor do Registro HardwareIDs
Obrigatório/opcional Obrigatório
Tipo Várias cadeias
Requisitos de formato Deve incluir o prefixo de barramento da ID de Hardware. Todos os caracteres "" devem ser substituídos por "#".
Exemplos USB#VID_1234&PID_ABCD&REV_0001, PCI#VEN_ABCD&DEV_1234&SUBSYS_000
Comentário Podem ser fornecidos múltiplos valores de ID de hardware. Quando qualquer uma das IDs de hardware ocorre na lista mais de uma vez, o sistema define a Model ID do nó do dispositivo com base na ID de hardware.

Valor do Registro PLD_Panel

Nome do valor do Registro PLD_Panel
Obrigatório/opcional Opcional
Tipo DWORD
Requisitos de formato Deve incluir o prefixo de barramento da ID de Hardware. Todos os caracteres "\" devem ser substituídos por "#".
Exemplos 4,5

Detalhes de PLD_Panel

O valor PLD_Panel fornecido nas tabelas ACPI permite que as câmeras sejam distinguidas umas das outras quando um sistema tem dois dispositivos de câmera idênticos e ambos têm IDs de hardware idênticas. Para criar IDs de Modelo diferentes, a combinação de IDs de hardware e valor de PLD_Panel é usada.

Observação

A configuração PLD_Panel na chave do Registro é opcional. O Windows determina a localização física da câmera pelas configurações na tabela ACPI.

O valor do Registro PLD_Panel é definido como _PLD (Localização Física do Dispositivo) na especificação de ACPI. Esse valor, que indica a localização física da câmera em seu gabinete, deve ser um dos seguintes:

Valor Descrição
0 TOP
1 Inferior
2 Left
3 Right
4 Front
5 Voltar
6 Desconhecido (a posição Vertical e a posição Horizontal serão ignoradas)

Exemplos de chave do Registro InternalDeviceModification

Os exemplos a seguir demonstram o formato da chave do Registro InternalDeviceModification.

{00001111-2222-3333-4444-555566667777}
      HardwareIDs (Multi sz) =
      "USB#VID_1234&PID_ABCD&REV_0001","USB#VID_1234&PID_ABCD"
      PLD_Panel (DWORD) = 4
{88889999-aaaa-bbbb-cccc-ddddeeeeffff}
      HardwareIDs (multi sz) = "USB#VID_5678&PID_WXYZ&REV_0001"
      PLD_Panel (DWORD) = 5
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\InternalDeviceModification]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\InternalDeviceModification\{BBBF38D6-9866-493D-B86F-986E339E096D}]
"PLD_Panel"=dword:00000004
"HardwareIDs"=hex(7):55,00,53,00,42,00,23,00,56,00,49,00,44,00,5f,00,30,00,34,\
  00,35,00,45,00,26,00,50,00,49,00,44,00,5f,00,30,00,30,00,31,00,30,00,23,00,\
  52,00,45,00,56,00,5f,00,30,00,30,00,30,00,31,00,00,00,55,00,53,00,42,00,23,\
  00,56,00,49,00,44,00,5f,00,30,00,34,00,35,00,45,00,26,00,50,00,49,00,44,00,\
  5f,00,30,00,30,00,31,00,30,00,00,00,00,00

Estrutura de metadados

O pacote de metadados do dispositivo para uma câmera interna tem a mesma estrutura que o pacote de metadados do dispositivo para qualquer outro dispositivo. A MetadataKey em packageinfo.xml no pacote de metadados do dispositivo é a Model ID definida usando a chave do Registro InternalDeviceModification. O sistema de metadados do Windows baixa o pacote de metadados do dispositivo com base na Modelo ID. A ID de hardware da câmera interna não é usada.

Para obter mais informações sobre como criar metadados de dispositivo para seu aplicativo de dispositivo UWP, consulte Criando aplicativos de dispositivo UWP.

Pré-instalação

O aplicativo de dispositivo da Microsoft Store e o pacote de metadados do dispositivo podem ser pré-instalados no dispositivo usando o Kit de Pré-instalação de OEM (OPK).

Aplicativos de dispositivo UWP para dispositivos internos