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

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

  • Если камера сталкивается с пользователем, предварительный просмотр должен выглядеть так, как если бы пользователь смотрел на зеркало. Для этого приложение перевернет левую и правую стороны предварительного просмотра, чтобы предварительный просмотр зеркало видео. Если камера находится подальше от пользователя, приложению не нужно зеркало видео.

  • Если приложение поворачивает предварительный просмотр, степень поворота отличается в зависимости от положения камеры.

Как сгруппировать камеру в контейнер устройств компьютеров

В соответствии с требованием сертификации System.Client.PCContainer.PCAppearsAsSingleObject, также известном как SYSFUND-0200, внутренние узлы устройств камеры должны быть сгруппированы в контейнер устройства ПК. Другими словами, внутренняя камера не должна отображаться на устройствах и принтерах и должна быть консолидирована в контейнер ПК.

Способ реализации этого требования зависит от типа шины внутренней камеры. Если устройство может предоставлять сведения о расположении физического устройства в таблицах ACPI, правильное группирование можно указать на уровне ACPI, включив _PLD сведения в таблицы и изменив флаг UserVisible в таблице ACPI, как описано в разделе "Поддержка многофункционированных устройств" и "Группы контейнеров устройств". В противном случае переопределите съемный флаг с помощью раздела реестра DeviceOverrides. Дополнительные сведения см. в разделе реестра DeviceOverrides.

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

В соответствии с требованием сертификации System.Client.Webcam.PhysicalLocation значение _PLD, указывающее расположение камеры, должно быть указано в таблице ACPI (расширенная конфигурация и интерфейс питания). Это относится к любому устройству камеры, встроенному в шасси системы, и имеет механически фиксированное направление. Встроенное ПО должно предоставить метод _PLD и задать поле Панели (биты 69:67) соответствующим значением для панели, на которой подключена камера. Например, front указывает, что камера сталкивается с пользователем (веб-камера), а назад указывает, что камера находится подальше от конечного пользователя (все еще или видеокамера).

Значение битов 69:67 Панель
0 Верх
1 Снизу
2 Left
3 Right
4 Front
5 BACK
6 Неизвестно

Кроме того, бит 143:128 (вертикальное смещение) и биты 159:144 (горизонтальное смещение) должны обеспечить относительное расположение камеры относительно дисплея. Этот источник относится к адресации собственных пикселей в компоненте отображения и должен соответствовать текущей ориентации отображения альбомной или книжной. Источником является нижний левый угол дисплея, где положительные значения горизонтального и вертикального смещения находятся справа и вверх соответственно.

Для внутренней камеры, подключенной к USB, узел устройства для USB-устройства будет создан в таблице ACPI под узлом usb-порта.

Чтобы указать адрес (_ADR):

  1. Установка Windows на целевой компьютер

  2. Перейти к диспетчер устройств

  3. Выберите и удерживайте (или щелкните правой кнопкой мыши) целевую веб-камеру и выберите пункт "Свойства"

  4. Откройте вкладку "Сведения" и выберите "Адрес " в меню "Свойство "

  5. Значение в поле "Значение " — адрес, на который находится ваше устройство.

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

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

Система метаданных устройства Windows может запрашивать внутренний пакет метаданных устройства встроенной камеры, только если узел устройства камеры имеет свойство "Идентификатор модели" и категория Imaging.Webcamустройства . Чтобы сделать метаданные внутренней камеры обнаруживаемыми Windows, чтобы пакет метаданных устройства правильно связывался с устройством и приложением устройства UWP для конкретной камеры, изготовитель оборудования должен выполнить следующие действия:

  • Задайте идентификатор модели на узле устройства с помощью InternalDeviceModification флага в разделе реестра устройств.

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

Для внутренних камер ИЗГОТОВИТЕЛЬ создает GUID для идентификатора модели и создает для него раздел реестра. Свойство идентификатора модели добавляется на узел устройства с помощью механизма InternalDeviceModification, который является таблицей подстановки на основе реестра (LUT), состоящей из разделов реестра, которые сопоставляются с определенными устройствами. Эта таблица InternalDeviceModification поддерживается в следующем разделе реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\InternalDeviceModification

Запись подраздела, созданная в разделе реестра InternalDeviceModification, — это предоставленный OEM GUID для ModelID. Наличие этого ключа добавляет идентификатор модели в узел устройства камеры на основе идентификатора оборудования устройства и сведений о расположении, указанных значением _PLD в таблице ACPI.

registry keys and values for internaldevicemodification.

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

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

Имя раздела реестра InternalDeviceModification
Обязательный/необязательный Обязательное поле
Путь HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
Требования к формату нет
Допустимые подразделы Раздел реестра идентификаторов модели (см. следующие требования к формату подраздела и примеры)

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

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

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

Имя параметра реестра Аппаратные идентификаторы
Обязательный/необязательный Обязательное поле
Тип Многостроняя строка
Требования к формату Должен включать префикс шины идентификатора оборудования. Все символы "" должны быть заменены на "#".
Примеры USB#VID_1234&PID_ABCD&REV_0001, PCI#VEN_ABCD&DEV_1234&SUBSYS_000
Комментарий Можно указать несколько значений идентификаторов оборудования. Если любое из аппаратных идентификаторов в списке происходит несколько раз, система задает идентификатор модели узла устройства на основе идентификатора оборудования.

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

Имя параметра реестра PLD_Panel
Обязательный/необязательный Необязательно
Тип DWORD
Требования к формату Должен включать префикс шины аппаратного идентификатора. Все символы "\" должны быть заменены на "#".
Примеры 4,5

сведения о PLD_Panel

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

Примечание.

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

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

значение Описание
0 Верх
1 Снизу
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

Структура метаданных

Пакет метаданных устройства для внутренней камеры имеет ту же структуру, что и пакет метаданных устройства для любого другого устройства. Ключ метаданных в packageinfo.xml в пакете метаданных устройства — это идентификатор модели, определенный с помощью раздела реестра InternalDeviceModification. Система метаданных Windows загружает пакет метаданных устройства на основе идентификатора модели. Идентификатор оборудования внутренней камеры не используется.

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

Предварительная установка

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

Приложения устройств UWP для внутренних устройств