Поделиться через


Определение расположения внутренних камер (приложения устройств UWP)

Important

Метаданные устройства являются устаревшими и будут удалены в будущем выпуске Windows. Сведения о замене этой функции см. в разделе Метаданные контейнера пакетов драйверов.

В этом разделе содержатся сведения о поддержке внутренних камер в системах Windows 8.1. В нем описывается, как определить физическое расположение встроенных камер, чтобы они правильно работали с приложениями UWP. Он также описывает, как задать идентификатор модели, чтобы камера работала с приложениями устройств UWP. Дополнительные сведения о приложениях устройств UWP см. в статье "Знакомство с приложениями устройств UWP".

Предоставление физического расположения

Системы со встроенными камерами с механически фиксированным направлением должны сообщать о физическом расположении камер. Эта информация о физическом расположении указывает направление, к которому сталкивается камера, например передний или задний, чтобы приложения для использования камеры в Windows 8.1 работали правильно.

Требуются следующие два требования к сертификации оборудования Windows, которые позволяют Windows распознавать расположение камеры:

  • System.Client.PCContainer.PCAppearsAsSingleObject. Камера должна быть сгруппирована в контейнер устройства компьютера, который содержит функции устройства, расположенные физически внутри компьютера. Камера должна быть сгруппирована в контейнер устройства компьютера, чтобы предоставить ей физическое расположение для приложений, так как устройства, внешние для контейнера компьютера, не предполагают, что имеют механически фиксированное направление.

  • System.Client.Webcam.PhysicalLocation. Встроенное ПО должно предоставлять сведения о физическом расположении, используя сведения о _PLD в таблицах ACPI, чтобы указать расположение и ориентацию камеры.

Почему Для 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 сведения в таблицы и изменив флаг UserVisible в таблице ACPI, как описано в разделе "Поддержка устройств multifunction" и "Группы контейнеров устройств". В противном случае переопределите съемный флаг с помощью раздела реестра DeviceOverrides. Дополнительные сведения см. в разделе реестра DeviceOverrides.

Как предоставить физическое расположение с помощью _PLD сведений в таблице ACPI

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 указывает, что камера сталкивается с пользователем (веб-камера), а назад указывает, что камера находится подальше от конечного пользователя (все еще или видеокамера).

Значение битов 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. Задайте значение в _ADR в таблице ACPI

  7. Задайте значение _PLD на основе спецификации ACPI и дизайна КОМПЬЮТЕРА

В этом примере показана таблица ACPI для usb-подключенной камеры. В этом примере значение равно 0x1. Девятый байт содержит код панели для расположения (биты[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), значение адреса вычисляется только с использованием номера порта.

Предоставление идентификатора модели

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 для конкретной камеры, изготовитель оборудования должен выполнить следующие действия:

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

Настройка идентификатора модели для узла устройства внутренней камеры

Для внутренних камер ИЗГОТОВИТЕЛЬ создает 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 GUID для ModelID. Наличие этого ключа добавляет идентификатор модели в узел устройства камеры на основе идентификатора оборудования устройства и сведений о расположении, указанных значением _PLD в таблице ACPI.

разделы реестра и значения для внутреннегоdevicemodification.

Раздел реестра InternalDeviceModification

Раздел реестра InternalDeviceModification указывает, что по крайней мере одна камера использует ModelID.

Имя ключа реестра InternalDeviceModification
Required/optional Required
Path HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
Format requirements None
Valid subkeys Раздел реестра идентификаторов модели (см. следующие требования к формату подраздела и примеры)

Раздел реестра идентификаторов модели

Имя ключа реестра Идентификатор модели (точное значение идентификатора модели — это имя ключа)
Required/optional Required
Format requirements Имя ключа — это GUID, созданный изготовителем оборудования. Она должна иметь как открывающая, так и закрывающая скобки.
Valid values Значения реестра идентификаторов оборудования или PLD_Panel
Examples {43922620-DAD9-4C05-BE3F-F65B089D84D8}

Значение реестра идентификаторов оборудования

Имя параметра реестра HardwareIDs
Required/optional Required
Type Multi-string
Format requirements Должен включать префикс шины идентификатора оборудования. Все символы "" должны быть заменены на "#".
Examples USB#VID_1234&PID_ABCD&REV_0001, PCI#VEN_ABCD&DEV_1234&SUBSYS_000
Comment Можно указать несколько значений идентификаторов оборудования. Если любое из аппаратных идентификаторов в списке происходит несколько раз, система задает идентификатор модели узла устройства на основе идентификатора оборудования.

значение реестра PLD_Panel

Имя параметра реестра PLD_Panel
Required/optional Optional
Type DWORD
Format requirements Должен включать префикс шины аппаратного идентификатора. Все символы "\" должны быть заменены на "#".
Examples 4,5

PLD_Panel Details

Значение PLD_Panel, предоставленное в таблицах ACPI, позволяет камерам отличаться друг от друга, если система имеет два идентичных устройства камеры и оба имеют идентичные аппаратные идентификаторы. Для создания различных идентификаторов моделей используется сочетание аппаратных идентификаторов и PLD_Panel значений.

Note

Параметр PLD_Panel в разделе реестра необязателен. Windows определяет физическое расположение камеры по параметрам в таблице ACPI.

Значение реестра PLD_Panel определяется as_PLD (расположение физического устройства) в спецификации ACPI. Это значение, указывающее физическое расположение камеры в корпусе, должно быть одним из следующих значений.

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 загружает пакет метаданных устройства на основе идентификатора модели. Идентификатор оборудования внутренней камеры не используется.

Дополнительные сведения о создании метаданных устройства для приложения устройства UWP см. в статье "Создание приложений устройств UWP".

Pre-installation

Приложение устройства Microsoft Store и пакет метаданных устройства можно предварительно установить на устройстве с помощью комплекта предварительной установки OEM (OPK).