Определение расположения внутренних камер (приложения устройств 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):
Установка Windows на целевой компьютер
Перейти к диспетчер устройств
Выберите и удерживайте (или щелкните правой кнопкой мыши) целевую веб-камеру и выберите пункт "Свойства"
Откройте вкладку "Сведения" и выберите "Адрес " в меню "Свойство "
Значение в поле "Значение " — адрес, на который находится ваше устройство.
Задайте значение в _ADR в таблице ACPI
Задайте значение _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.
Раздел реестра 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).