标识内部相机的位置(UWP 设备应用)

Important

设备元数据已弃用,并将在 Windows 的将来版本中删除。 有关替代功能的信息,请参阅驱动程序包容器元数据

本主题提供有关在 Windows 8.1 中的系统上支持内部相机的信息。 它介绍如何识别内置相机的物理位置,以便它们能够正确使用 UWP 应用。 它还介绍如何设置模型 ID,以便相机适用于 UWP 设备应用。 若要了解有关 UWP 设备应用的一般详细信息,请参阅 UWP 设备应用简介

提供物理位置

具有具有机械固定方向的内置相机的系统必须报告相机的物理位置。 此物理位置信息指示相机朝哪个方向(例如正面或背面),以便应用在 Windows 8.1 中正确使用相机。

以下两项 Windows 硬件认证要求(允许 Windows 识别相机的位置)是必需的:

  • System.Client.PCContainer.PCAppearsAsSingleObject. 相机必须分组到计算机的设备容器中,该容器包含计算机内部的物理设备功能。 必须将相机分组到计算机的设备容器中,以便将其物理位置公开给应用,因为计算机容器外部的设备不会假定有机械固定的方向。

  • System.Client.Webcam.PhysicalLocation. 固件必须使用 ACPI 表中的_PLD信息来指示相机的位置和方向,从而提供物理位置信息。

为什么 Windows 需要物理位置相机

Windows 需要知道内部相机的物理位置,原因如下:

  • UWP 应用使用物理位置来确定是否存在多个相机时要使用的相机。 例如,聊天应用程序默认使用启动应用时面向用户的前置摄像头。

  • UWP 应用使用物理位置来确定如何镜像或旋转视频预览。

  • 如果相机面向用户,则预览应与用户正在查看镜像一样。 为此,应用将翻转预览的左侧和右侧,以便预览镜像视频。 如果相机远离用户,则应用不需要镜像视频。

  • 如果应用旋转预览,则旋转程度因相机位置而异。

如何将相机分组到计算机设备容器中

In accordance with certification requirement System.Client.PCContainer.PCAppearsAsSingleObject, also known as SYSFUND-0200, the internal camera device nodes must be grouped under the PC device container. 换句话说,内部相机不应显示在 设备和打印机 中,并且必须合并到电脑容器中。

实现此要求的方式取决于内部相机的总线类型。 如果设备可以公开 ACPI 表中物理设备位置的信息,则可以在 ACPI 层中指定正确的分组,方法是在表中包括_PLD信息并修改 ACPI 表中的 UserVisible 标志,如 多功能设备支持和设备容器分组中所述。 否则,请使用 DeviceOverrides 注册表项替代可移动标志。 有关详细信息,请参阅 DeviceOverrides 注册表项

如何使用 ACPI 表中_PLD信息提供物理位置

In accordance with certification requirement System.Client.Webcam.PhysicalLocation, the _PLD value that indicates the camera's location must be provided in the ACPI (Advanced Configuration and Power Interface) table. 这适用于系统机箱中内置的任何相机设备,并且具有机械固定方向。 固件必须提供_PLD方法,并将面板字段(位 69:67)设置为安装相机的面板的适当值。 例如,Front 指示相机面向用户(网络摄像头),而 Back 表示相机与最终用户(静止或摄像机)相距。

位值 69:67 Panel
0 Top
1 Bottom
2 Left
3 Right
4 Front
5 Back
6 Unknown

此外,位 143:128(垂直偏移量)和位 159:144(水平偏移量)必须提供相机相对于显示器的相对位置。 此原点相对于显示组件中的本机像素寻址,应与当前横向或纵向的显示方向匹配。 原点是显示器的左下角,其中正水平偏移值和垂直偏移值分别位于右侧和向上。

对于连接 USB 的内部相机,将在 USB 端口设备节点下的 ACPI 表中创建 USB 设备的设备节点。

若要指定地址(_ADR):

  1. 将 Windows 安装到目标电脑

  2. Go to Device Manager

  3. Select and hold (or right-click) your target webcam and select Properties

  4. Open the Details tab and select Address in the Property menu

  5. The value in the Value box is the address that your device is located at

  6. 设置 ACPI 表中_ADR中的值

  7. 根据 ACPI 规格和电脑设计设置_PLD值

此示例是 USB 连接的相机的 ACPI 表。 在此示例中,该值0x1。 第九个字节包含位置(bits[69:67])的面板代码。 请注意,如果设备是 USB 复合设备,PLD 必须位于视频 FUNCTION 上。 这意味着需要其他 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})
     }
}

有关_PLD的更多详细信息,请参阅 ACPI 规范。

对于 USBCCGP 下游的节点,地址值是通过将端口号添加到相机函数的第一个接口号来计算的。 如果未为设备加载 USBCCGP,则地址只是端口号。 如果需要在不安装 Windows 的情况下预测地址号,请使用此公式计算它。 如果目标设备是单个功能设备(不使用 USB 复合样式设备),则仅使用端口号计算地址值。

提供模型 ID

The Windows device metadata system is able to query for an internally embedded camera's device metadata package only if the camera's device node has a Model ID property and the device category is Imaging.Webcam. 若要使内部相机的元数据可由 Windows 发现,以便设备元数据包与设备和特定于相机的 UWP 设备应用正确关联,OEM 需要执行以下作:

  • Set the Model ID in the device node, by using the InternalDeviceModification flag in the device registry key

如何设置内部相机设备节点的型号 ID

对于内部相机,OEM 将创建用于模型 ID 的 GUID,并为其创建注册表项。 The Model ID property is added to the device node by using the InternalDeviceModification mechanism, which is a registry-based lookup table (LUT) that consists of registry keys that map to specific devices. 此 InternalDeviceModification 表在以下注册表项下维护:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\InternalDeviceModification

在 InternalDeviceModification 注册表项下创建的子项是 OEM 提供的 ModelID GUID。 此密钥的存在基于设备硬件 ID 和 ACPI 表中_PLD值指示的位置信息,将模型 ID 添加到相机的设备节点。

internaldevicemodification 的注册表项和值。

InternalDeviceModification 注册表项

InternalDeviceModification 注册表项指示至少有一个相机使用 ModelID。

注册表项名称 InternalDeviceModification
Required/optional Required
Path HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
Format requirements None
Valid subkeys 模型 ID 注册表项(请参阅以下子项格式要求和示例)

模型 ID 注册表项

注册表项名称 模型 ID (确切的模型 ID 值是密钥名称)
Required/optional Required
Format requirements 密钥名称是由 OEM 创建的 GUID。 它必须同时具有左括号和右括号。
Valid values 硬件 ID 注册表值或 PLD_Panel
Examples {43922620-DAD9-4C05-BE3F-F65B089D84D8}

硬件 ID 注册表值

注册表值名称 HardwareIDs
Required/optional Required
类型 Multi-string
Format requirements 必须包含硬件 ID 的总线前缀。 所有“”字符都必须替换为“#”。
Examples USB#VID_1234&PID_ABCD&REV_0001PCI#VEN_ABCD&DEV_1234&SUBSYS_000
Comment 可以提供多个硬件 ID 值。 当列表中出现任何硬件 ID 多次时,系统会根据硬件 ID 设置设备节点的型号 ID。

PLD_Panel注册表值

注册表值名称 PLD_Panel
Required/optional Optional
类型 DWORD
Format requirements 必须包含 HardwareID 的总线前缀。 所有“\”字符都必须替换为“#”。
Examples 4,5

PLD_Panel Details

ACPI 表中提供的PLD_Panel值使相机能够在系统具有两个相同的相机设备并且都具有相同的硬件 ID 时相互区分。 若要创建不同的模型 ID,请使用硬件 ID 和PLD_Panel值的组合。

Note

注册表项中的PLD_Panel设置是可选的。 Windows 通过 ACPI 表中的设置确定相机的物理位置。

PLD_PANEL注册表值在 ACPI 规范中定义as_PLD(物理设备位置)。 此值指示相机的机箱中的物理位置必须是下列值之一。

Value Description
0 Top
1 Bottom
2 Left
3 Right
4 Front
5 Back
6 未知(将忽略垂直位置和水平位置)

InternalDeviceModification 注册表项示例

以下示例演示 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

Metadata structure

内部相机的设备元数据包的结构与任何其他设备的设备元数据包具有相同的结构。 The MetadataKey in packageinfo.xml within the device metadata package is the Model ID defined by using the InternalDeviceModification registry key. Windows 元数据系统基于模型 ID 下载设备元数据包。 不使用内部相机的硬件 ID。

有关为 UWP 设备应用创建设备元数据的详细信息,请参阅 生成 UWP 设备应用

Pre-installation

Microsoft应用商店设备应用和设备元数据包都可以使用 OEM 预安装工具包(OPK)在设备上预安装。