Identificación de la ubicación de las cámaras internas (aplicaciones de dispositivos para UWP)
En este tema se proporciona información sobre cómo admitir cámaras internas en sistemas en Windows 8.1. Se describe cómo identificar la ubicación física de las cámaras integradas para que funcionen correctamente con aplicaciones para UWP. También se describe cómo establecer el identificador de modelo para que la cámara funcione con aplicaciones de dispositivo para UWP. Para obtener más información sobre las aplicaciones de dispositivos para UWP en general, consulte Conocer las aplicaciones de dispositivos para UWP.
Aprovisionamiento de una ubicación física
Los sistemas con cámaras incorporadas con dirección fijada mecánicamente deben informar de la ubicación física de las cámaras. Esta información de ubicación física indica en qué dirección está orientada la cámara, por ejemplo, hacia delante o hacia atrás, para que las aplicaciones que utilizan la cámara en Windows 8.1 funcionen correctamente.
Se requieren los dos siguientes Requisitos de certificación de hardware de Windows, que permiten a Windows reconocer la ubicación de una cámara:
System.Client.PCContainer.PCAppearsAsSingleObject. La cámara debe agruparse en el contenedor de dispositivos del equipo, que contiene las funciones de dispositivo ubicadas físicamente dentro del equipo. Una cámara debe agruparse en el contenedor de dispositivos del equipo para exponer su ubicación física a las aplicaciones, porque se supone que los dispositivos externos al contenedor del equipo no tienen una dirección mecánicamente fija.
System.Client.Webcam.PhysicalLocation. El firmware debe proporcionar información de ubicación física, mediante el uso de la información de _PLD en las tablas ACPI para indicar la ubicación y la orientación de la cámara.
Por qué Windows necesita la ubicación física de las cámaras
Windows debe conocer la ubicación física de las cámaras internas por los siguientes motivos:
Las aplicaciones para UWP usan la ubicación física para determinar qué cámara usar si hay varias cámaras presentes. Por ejemplo, una aplicación de chat utilizará por defecto la cámara frontal orientada hacia el usuario cuando se inicie la aplicación.
Las aplicaciones para UWP usan la ubicación física para determinar cómo reflejar o girar la vista previa del vídeo.
Si la cámara está orientada hacia el usuario, la vista previa debe parecer como si el usuario se estuviera mirando en un espejo. Para ello, la aplicación girará los lados izquierdo y derecho de la vista previa, de modo que esta refleje el vídeo. Si la cámara está de espaldas al usuario, la aplicación no necesita reflejar el vídeo.
Si la aplicación gira la vista previa, el grado de rotación difiere en función de la posición de la cámara.
Cómo agrupar la cámara en el contenedor de dispositivos de equipos
De acuerdo con el requisito de certificación System.Client.PCContainer.PCAppearsAsSingleObject, también conocido como SYSFUND-0200, los nodos del dispositivo de la cámara interna deben agruparse en el contenedor de dispositivos del equipo. Es decir, la cámara interna no debe mostrarse en Dispositivos e impresoras y debe consolidarse en el contenedor del equipo.
La manera de implementar este requisito depende del tipo de bus de la cámara interna. Si el dispositivo puede exponer información sobre la ubicación del dispositivo físico en las tablas ACPI, la agrupación correcta se puede especificar en la capa ACPI incluyendo la información de _PLD en las tablas y modificando la marca UserVisible en la tabla ACPI, como se describe en Compatibilidad con dispositivos multifunción y agrupaciones de contenedores de dispositivos. De lo contrario, anule la marca extraíble mediante la clave de registro DeviceOverrides. Para obtener más información, consulte Clave de registro DeviceOverrides.
Cómo proporcionar una ubicación física mediante la información de _PLD en la tabla ACPI
De acuerdo con el requisito de certificación System.Client.Webcam.PhysicalLocation, el valor de _PLD que indica la ubicación de la cámara debe proporcionarse en la tabla ACPI (Advanced Configuration and Power Interface). Esto se aplica a cualquier dispositivo de cámara integrado en el chasis del sistema y tiene una dirección mecánicamente fija. El firmware debe proporcionar el método _PLD y establecer el campo Panel (bits 69:67) en el valor adecuado para el panel en el que se monta la cámara. Por ejemplo, Front indica que la cámara está orientada hacia el usuario (webcam), mientras que Back indica que la cámara está orientada en sentido contrario al usuario final (cámara fija o de vídeo).
Valor de bits 69:67 | Panel |
---|---|
0 | TOP |
1 | Inferior |
2 | Izquierda |
3 | Right |
4 | Front |
5 | Atrás |
6 | Unknown |
Además, el bit 143:128 (desplazamiento vertical) y los bits 159:144 (desplazamiento horizontal) deben proporcionar la ubicación relativa de la cámara con respecto a la pantalla. Este origen es relativo al direccionamiento nativo de píxeles en el componente de visualización y debe coincidir con la orientación actual de la pantalla, horizontal o vertical. El origen es la esquina inferior izquierda de la pantalla, donde los valores positivos de Desplazamiento horizontal y Desplazamiento vertical están hacia la derecha y hacia arriba, respectivamente.
En el caso de una cámara interna conectada a USB, el nodo del dispositivo USB se crearía en la tabla ACPI bajo un nodo de dispositivo de puerto USB.
Para especificar la dirección (_ADR):
Instale Windows en el equipo de destino
Vaya a Administrador de dispositivos
Mantenga pulsada (o haga clic con el botón derecho) la cámara web de destino y seleccione Propiedades
Abra la pestaña Detalles y seleccione Dirección en el menú Propiedad
El valor del cuadro Valor es la dirección en la que se encuentra el dispositivo
Establezca el valor en _ADR en la tabla ACPI
Establezca el valor de _PLD en función de la especificación ACPI y el diseño del equipo
Este ejemplo es una tabla ACPI para una cámara conectada a USB. En este ejemplo, el valor es 0x1. El noveno byte contiene el código del panel para la ubicación (bits[69:67]). Tenga en cuenta que si el dispositivo es un dispositivo compuesto USB, PLD debe estar en FUNCTION del vídeo. Esto significa que se necesitaría una entrada adicional Device().
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 la especificación ACPI para obtener información más detallada sobre _PLD.
Para los nodos descendientes de USBCCGP, el valor de dirección se calcula sumando el número de puerto al primer número de la interfaz de la función de cámara. Si USBCCGP no se carga para el dispositivo, la dirección es simplemente el número de puerto. Si necesita predecir el número de dirección sin instalar Windows, use esta fórmula para calcularlo. Si el dispositivo de destino es un único dispositivo de función (sin usar el dispositivo de estilo compuesto USB), el valor de dirección se calcula usando solo el número de puerto.
Aprovisionamiento del identificador de modelo
El sistema de metadatos del dispositivo Windows puede consultar el paquete de metadatos de dispositivo de una cámara insertada internamente solo si el nodo de dispositivo de la cámara tiene una propiedad de Identificador de modelo y la categoría del dispositivo es Imaging.Webcam
. Para que Windows detecte los metadatos de una cámara interna para que el paquete de metadatos del dispositivo se asocie correctamente al dispositivo y a la aplicación de dispositivo para UWP específica de la cámara, un OEM debe hacer lo siguiente:
- Establecer el Identificador de modelo en el nodo del dispositivo mediante la marca
InternalDeviceModification
de la clave del registro del dispositivo.
Cómo establecer el identificador de modelo para el nodo de dispositivo de la cámara interna
En el caso de las cámaras internas, el OEM crea un GUID que se usará para el identificador de modelo y crea una clave del Registro para ella. La propiedad Identificador de modelo se agrega al nodo del dispositivo mediante el mecanismo InternalDeviceModification, que es una tabla de búsqueda basada en el registro (LUT) que consta de claves del registro que se asignan a dispositivos específicos. Esta tabla InternalDeviceModification se mantiene bajo la siguiente clave del registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\InternalDeviceModification
La entrada de subclave que se va a crear en la clave del registro InternalDeviceModification es el GUID proporcionado por el OEM para ModelID. La presencia de esta clave agrega el identificador de modelo al nodo del dispositivo de la cámara, en función del identificador de hardware del dispositivo y la información de ubicación indicada por el valor de _PLD en la tabla ACPI.
Clave del registro InternalDeviceModification
La clave del registro InternalDeviceModification indica que al menos una cámara usa ModelID.
Nombre de la clave del registro | InternalDeviceModification |
---|---|
Obligatorio/opcional | Obligatorio |
Path | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control |
Requisitos de formato | None |
Subclaves válidas | Clave de registro de identificador de modelo (consulte los siguientes requisitos y ejemplos de formato de subclave) |
Clave de registro de identificador de modelo
Nombre de la clave del registro | Identificador de modelo (el valor exacto del identificador de modelo es el nombre de clave) |
---|---|
Obligatorio/opcional | Obligatorio |
Requisitos de formato | El nombre de clave es un GUID creado por el OEM. Debe tener corchetes de apertura y cierre. |
Valores válidos | Valores de registro de identificador de hardware o PLD_Panel |
Ejemplos | {43922620-DAD9-4C05-BE3F-F65B089D84D8} |
Valor de registro de identificador de hardware
Nombre del valor de registro | HardwareIDs |
---|---|
Obligatorio/opcional | Obligatorio |
Tipo | Varias cadenas |
Requisitos de formato | Debe incluir el prefijo de bus del identificador de hardware. Todos los caracteres "" deben reemplazarse por "#". |
Ejemplos | USB#VID_1234&PID_ABCD&REV_0001 , PCI#VEN_ABCD&DEV_1234&SUBSYS_000 |
Comentario | Se pueden proporcionar varios valores de identificador de hardware. Cuando cualquiera de los identificadores de hardware aparece en la lista más de una vez, el sistema establece el identificador de modelo del nodo de dispositivo en función del identificador de hardware. |
Valor de registro de PLD_Panel
Nombre del valor de registro | PLD_Panel |
---|---|
Obligatorio/opcional | Opcionales |
Tipo | DWORD |
Requisitos de formato | Debe incluir el prefijo de bus de HardwareID. Todos los caracteres "\" deben reemplazarse por "#". |
Ejemplos | 4,5 |
Detalles de PLD_Panel
El valor de PLD_Panel proporcionado en las tablas ACPI permite distinguir cámaras entre sí cuando un sistema tiene dos dispositivos de cámara idénticos y ambos tienen identificadores de hardware idénticos. Para crear diferentes identificadores de modelo, se usa la combinación de identificadores de hardware y valores de PLD_Panel.
Nota:
La configuración de PLD_Panel en la clave de registro es opcional. Windows determina la ubicación física de la cámara por la configuración de la tabla ACPI.
El valor de registro de PLD_Panel se define como _PLD (ubicación del dispositivo físico) en la especificación ACPI. Este valor, que indica la ubicación física de la cámara en su alojamiento, debe ser uno de los siguientes.
Value | Descripción |
---|---|
0 | TOP |
1 | Inferior |
2 | Izquierda |
3 | Right |
4 | Front |
5 | Atrás |
6 | Desconocido (se omitirá la posición vertical y horizontal) |
Ejemplos de claves del registro InternalDeviceModification
En los ejemplos siguientes se muestra el formato de la clave del 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
Estructura de metadatos
El paquete de metadatos del dispositivo para una cámara interna tiene la misma estructura que el paquete de metadatos del dispositivo para cualquier otro dispositivo. MetadataKey en packageinfo.xml dentro del paquete de metadatos del dispositivo es el identificador de modelo definido mediante la clave del registro InternalDeviceModification. El sistema de metadatos de Windows descarga el paquete de metadatos del dispositivo en función del identificador de modelo. No se usa el identificador de hardware de la cámara interna.
Para obtener más información sobre cómo crear metadatos de dispositivo para su aplicación de dispositivo para UWP, consulte Creación de aplicaciones de dispositivos para UWP.
Preinstalación
Tanto la aplicación de dispositivo de Microsoft Store como el paquete de metadatos del dispositivo se pueden preinstalar en el dispositivo mediante el Kit de preinstalación de OEM (OPK).
Temas relacionados
Aplicaciones de dispositivos para UWP para dispositivos internos