Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор 1
Сводка 1.1
Расширения Microsoft для спецификации USB Video Class включают новые элементы управления и возможность переносить хорошо определенные метаданные кадров в стандартном формате.
1.2 Решения по архитектуре
Поддержка метаданных кадров класса USB (UVC) доступна для конечных точек ISOCH и BULK. Однако в случае конечной точки BULK размер метаданных ограничен 240 байтами (так как все данные видеокадров передаются в одном пакете видеокадров на конечных точках BULK).
Поддержка метаданных UVC доступна только для полезных данных на основе кадров.
Поддержка метаданных UVC доступна только через конвейер захвата Media Foundation (MF).
Метаданные UVC требуют согласия на участие. Каждый IHV/OEM, которому требуется поддержка метаданных, должен быть активирован с помощью пользовательского INF-файла.
Метаданные UVC поддерживают только выделенную системой память. Поверхности VRAM или DX не поддерживаются.
Обзор архитектуры 2
Описание 2.1
2.2.1 Обнаружение возможностей с помощью INF
2.2.1.1 Захват неподвижного изображения – Метод 2
Некоторые существующие устройства UVC могут не поддерживать метод 2, описанный в разделе 2.4.2.4 (захват неподвижного изображения) класса UVC 1.5 specification.pdf, который можно скачать на веб-сайте спецификации класса видео USB.
В Windows 10 версии 1607 и более ранних версиях конвейер захвата не использовал Метод 2, даже если устройство объявляло поддержку этому в соответствии со спецификацией UVC 1.5.
В Windows 10 версии 1703 устройства, использующие этот метод, должны использовать пользовательский INF-файл для драйвера камеры; кроме того, для данного оборудования требуется другой пользовательский INF-файл для включения Метод 2 захвата неподвижных изображений.
Примечание. Драйвер камеры может быть основан на USBVIDEO.SYS Windows или может быть основан на пользовательском двоичном файле драйвера.
Пользовательский INF-файл, основанный на пользовательском драйвере UVC или драйвере UVC в папке "Входящие", должен содержать следующую запись AddReg:
EnableDependentStillPinCapture: REG_DWORD: 0x0 (отключено) до 0x1 (включено)
Если для этой записи установлено значение "Включено" (0x1), конвейер захвата использует Метод 2 для захвата неподвижных изображений (при условии, что встроенное ПО также поддерживает Метод 2, как указано в спецификации UVC 1.5).
Примером для пользовательского раздела INF будет следующее:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnableDependentStillPinCapture,0x00010001,0x00000001
2.2.2 Элементы управления блоками расширения
Расширение Microsoft к спецификации USB Video Class для включения новых элементов управления выполняется с помощью модуля расширения, определяемого GUID MS_CAMERA_CONTROL_XU (именуемому Microsoft-XU).
// {0F3F95DC-2632-4C4E-92C9-A04782F43BC8}
DEFINE_GUID(MS_CAMERA_CONTROL_XU,
0xf3f95dc, 0x2632, 0x4c4e, 0x92, 0xc9, 0xa0, 0x47, 0x82, 0xf4, 0x3b, 0xc8);
Microsoft-XU, реализованный во встроенном ПО устройства, включает в себя новые элементы управления, определенные в следующих подразделах. Следующие определения запросов применяются ко всем этим элементам управления, если для конкретного элемента управления не указано явное переопределение. Ознакомьтесь с классом UVC 1.5 specification.pdf для определений D3, D4, GET_INFO и т. д.
Запрос GET_INFO должен предоставить отчет об элементе управления, не имеющем функций автоматического обновления и асинхронных возможностей (например, для битов D3 и D4 должно быть задано значение 0).
GET_LEN запрос должен сообщать максимальную длину полезных данных для этого элемента управления (wLength).
GET_RES запрос должен сообщить о разрешении (шаг-размер) для qwValue/dwValue. Все остальные поля должны иметь значение 0.
GET_MIN запрос должен сообщать минимальное поддерживаемое значение для qwValue/dwValue. Все остальные поля должны иметь значение 0.
GET_MAX запрос должен сообщать максимально поддерживаемое значение для qwValue/dwValue. Кроме того, все поддерживаемые флаги должны иметь значение 1 в bmControlFlags. Все остальные поля должны иметь значение 0.
запросы GET_DEF и GET_CUR должны сообщать о параметрах по умолчанию и текущих параметрах соответственно для полей qwValue/dwValue и bmControlFlags. Все остальные поля должны иметь значение 0.
Запрос SET_CUR выполняется хостом после установки всех полей.
В следующей таблице перечислены селекторы элементов управления для Microsoft-XU с соответствующими значениями и битовой позицией поля bmControls в дескрипторе модуля расширения:
| Селектор элементов управления | Ценность | Битовое положение (поле bmControls) |
|---|---|---|
| MSXU_CONTROL_UNDEFINED | 0x00 | NA |
| MSXU_CONTROL_FOCUS | 0x01 | D0 |
| MSXU_УПРАВЛЕНИЕ_ЭКСПОЗИЦИЕЙ | 0x02 | D1 |
| MSXU_CONTROL_EVCOMPENSATION | 0x03 | D2 |
| MSXU_CONTROL_WHITEBALANCE | 0x04 | D3 |
| Зарезервировано для дальнейшего использования | 0x05 | D4 |
| MSXU_CONTROL_FACE_AUTHENTICATION (управление аутентификацией по лицу) | 0x06 | D5 |
| Управление внешней параметризацией камеры (MSXU_CONTROL_CAMERA_EXTRINSICS) | 0x07 | D6 |
| MSXU_CONTROL_CAMERA_INTRINSICS | 0x08 | D7 |
| MSXU_CONTROL_METADATA | 0x09 | D8 |
| MSXU_CONTROL_IR_ФОНАРЬ | 0x0A | D9 |
| MSXU_CONTROL_ЦИФРОВОЕ_ОКНО | 0X0B | Д10 |
| MSXU_CONTROL_DIGITALWINDOW_CONFIG | 0X0C | D11 |
| MSXU_CONTROL_VIDEO_HDR | 0X0D | D12 |
| MSXU_CONTROL_FRAMERATE_THROTTLE (контрольное ограничение кадровой частоты) | 0x0E | D13 |
| MSXU_CONTROL_FIELDOFVIEW2_CONFIG | 0x0F | D14 |
| MSXU_CONTROL_FIELDOFVIEW2 | 0x10 | D15 |
2.2.2.1 Отменяемые элементы управления
Определение отменяемого элемента управления здесь производится с использованием возможности автоматического обновления.
GET_INFO должен отображать такое управление как управление autoupdate (например, D3-бит должен иметь значение 1), но не как асинхронное управление (например, D4-бит должен иметь значение 0).
Для такого элемента управления можно вывести запрос SET_CUR, чтобы задать новое значение (запрос SET_CUR(NORMAL), в котором в bmOperationFlags:D0 бит имеет значение 0) или отменить предыдущий запрос SET_CUR(NORMAL) (запрос SET_CUR(CANCEL), где в bmOperationFlags:D0 бит имеет значение 1. Запрос SET_CUR должен быть выполнен устройством немедленно при получении (даже если оборудование еще не настроено на новые параметры). Для каждого запроса SET_CUR(NORMAL) устройство создает соответствующее прерывание изменения элемента управления, возникающее при применении новых параметров или при поступлении запроса SET_CUR(CANCEL); пока это прерывание не будет доставлено, запрос SET_CUR(NORMAL) считается выполняемым. Во время выполнения запроса SET_CUR(NORMAL) дополнительные запросы SET_CUR(NORMAL) для этого конкретного элемента управления приведут к сбою. Запрос SET_CUR(CANCEL) всегда будет выполнен успешно. Если нет ничего, чтобы отменить, устройство просто ничего не делает.
Полезная нагрузка прерывания изменения управления должна иметь битовое значение bmOperationFlags:D0, равное 0, если параметры, указанные SET_CUR(NORMAL), были применены (например, конвергенция произошла), и установлено в 1, если параметры не были применены из-за запроса SET_CUR(ОТМЕНА), который поступил после запроса SET_CUR(NORMAL) (например, конвергенция еще не произошла).
Элемент управления фокусом 2.2.2
Этот элемент управления позволяет программному обеспечению узла указывать параметры фокуса для камеры. Это глобальный элемент управления, который влияет на все конечные точки во всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео.
Этот элемент управления должен функционировать как отменяемый элемент управления (см. раздел 2.2.2.1 для требований запроса GET_INFO и функциональных характеристик запроса SET_CUR).
GET_MAX требование: этот элемент управления должен объявлять поддержку битов D0, D1, D2, D8 и D18 в bmControlFlags.
GET_DEF требование. Значение по умолчанию для bmControlFlags должно иметь значение D0 и D18, равным 1, а dwValue — 0.
Для запросов GET_CUR/SET_CUR применяются следующие ограничения для полей bmControlFlags:
Среди битов D0, D1 и D8 можно задать только один бит; Ни один из них не является допустимым, если задан бит D2.
Среди D16, D17, D18, D19 и D20 можно задать только один бит, ни один из них не является допустимым.
D1 несовместим с всеми другими битами, определенными в настоящее время (D0, D2, D8, D16, D17, D18, D19 и D20).
D2 несовместим с D1 и D8.
D2 несовместим с D16, D17, D18, D19 и D20, если D0 не задан.
2.2.2.3 Управление экспозицией
Этот элемент управления позволяет программному обеспечению узла указывать параметры экспозиции для камеры. Это глобальный элемент управления, который влияет на все конечные точки во всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео.
Запрос GET_INFO должен сообщать об этом элементе управления как об асинхронном элементе управления (например, бит D4 должен иметь значение 1), но не как об элементе управления AutoUpdate (например, бит D3 должен иметь значение 0).
GET_MAX требование: этот элемент управления должен объявлять поддержку битов D0, D1 и D2 в bmControlFlags.
GET_DEF требование. Значение по умолчанию для bmControlFlags должно иметь значение D0 1, а qwValue — 0.
Для запросов GET_CUR/SET_CUR применяются следующие ограничения для полей bmControlFlags:
- Среди битов D0, D1 и D2 должен быть установлен как минимум один бит.
- D1 несовместим с D0 и D2.
Контроль компенсации EV 2.2.2.4
Этот элемент управления позволяет программному обеспечению узла указывать параметры компенсации EV для камеры. Это глобальный элемент управления, который влияет на все конечные точки во всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео.
GET_INFO запрос должен сообщать об этом элементе управления как асинхронном элементе управления (например, D4 бит должен иметь значение 1), но не как элемент управления AutoUpdate (например, D3 бит должен иметь значение 0).
GET_RES запрос должен сообщать обо всех поддерживаемых разрешениях (шаг-размер), задав соответствующие биты в bmControlFlags. Все остальные поля должны иметь значение 0.
запросы GET_MIN и GET_MAX должны сообщать о минимальном и максимально поддерживаемом значении dwValue. Бит D4 (указывающий размер шага 1) должен быть одним и единственным битом в bmControlFlags. Все остальные поля должны иметь значение 0.
Запросы GET_DEF, GET_CUR и SET_CUR должны соответствовать определениям в разделе 2.2.2.1, но должны иметь один и только один установленный бит среди битов D0, D1, D2, D3 и D4 для поля bmControlFlags. Кроме того, GET_DEF запрос должен иметь dwValue , равный 0.
2.2.2.5 Элемент управления белым балансом
Этот элемент управления позволяет программному обеспечению узла указывать параметры баланса для камеры. Это глобальный элемент управления, который влияет на все конечные точки во всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео.
Запрос GET_INFO должен сообщать об этом элементе управления как об асинхронном элементе управления (например, бит D4 должен иметь значение 1), но не как об элементе управления AutoUpdate (например, бит D3 должен иметь значение 0).
GET_RES, GET_MIN, запросы GET_MAX должны соответствовать определениям в разделе 2.2.2.1, но должно иметь значение dwValueFormat равным 1.
GET_MAX требование: этот элемент управления должен объявлять поддержку битов D0, D1 и D2 в bmControlFlags.
требование GET_DEF. Значение по умолчанию для bmControlFlags должно иметь значение D0 1, а dwValueFormat и dwValue — 0.
Для запросов GET_CUR/SET_CUR применяются следующие ограничения для полей bmControlFlags:
- Среди битов D0, D1 и D2 должен быть установлен как минимум один бит.
- D1 несовместим с D0 и D2.
2.2.2.6 Управление проверкой подлинности лиц
Этот элемент управления позволяет программному обеспечению узла указать, поддерживает ли камера режимы потоковой передачи, используемые для проверки подлинности лиц. Поддержка этого элемента управления подразумевает, что камера может выполнять проверку подлинности лиц. Этот элемент управления не поддерживается в противном случае.
Этот элемент управления применим только к камерам, которые могут создавать данные Infra-Red (IR) и применимы только к указанным интерфейсам потоковой передачи (это подмножество всех интерфейсов потоковой передачи видео, связанных с интерфейсом управления видео).
GET_RES и GET_MIN запросы должны сообщать поле bNumEntries, установленным в 0, следовательно, не имеют дополнительных полей.
Для запроса GET_MAX битовое значение 1 в поле bmControlFlags указывает, что соответствующий режим поддерживается для этого интерфейса потоковой передачи. Выходные данные запроса GET_MAX должны содержать список всех и только тех интерфейсов потоковой передачи, которые могут работать либо с D1, либо с D2 (например, если интерфейс потоковой передачи способен либо на D1, либо на D2, он включается в список; в противном случае он не включается в список). Кроме того, интерфейс потоковой передачи не должен рекламироваться как поддерживающий оба стандарта D1 и D2. Если интерфейс потоковой передачи также предназначен для использования в общем порядке (например, вне цели проверки подлинности лиц), D0 должен иметь значение 1 для этого интерфейса потоковой передачи (в дополнение к D1/D2).
Для запросов GET_DEF/ GET_CUR / SET_CUR битовое значение 1 в поле bmControlFlags указывает, что для этого интерфейса потоковой передачи выбран соответствующий режим. В этих запросах для определенного интерфейса потоковой передачи устанавливается только один и только один бит (среди D0, D1 и D2). Для запроса GET_DEF, возвращающего выбор по умолчанию (который является конкретной реализацией), если интерфейс потоковой передачи также предназначен для использования в общем порядке (например, вне цели проверки подлинности лиц), D0 по умолчанию должен иметь значение 1 в этом интерфейсе потоковой передачи; в противном случае значение D1 или D2 (но не оба) должно иметь значение 1 по умолчанию. Выходные данные запроса GET_DEF /GET_CUR должны содержать сведения обо всех интерфейсах потоковой передачи, перечисленных в выходных данных запроса GET_MAX, однако запрос SET_CUR может содержать только подмножество интерфейсов потоковой передачи, перечисленных в выходных данных запроса GET_MAX.
Пример:
Предположим, что камера имеет четыре интерфейса потоковой передачи видео с номерами 0x03, 0x05, 0x08 и 0x0b соответственно, где интерфейс потоковой передачи видео 0x05 создает данные RGB и остальные три интерфейса потоковой передачи видео создают данные IR. Среди интерфейсов потоковой передачи, которые создают данные IR, допустим, что интерфейсы потоковой передачи 0x03 и 0x0b способны на работу с D1, но интерфейс потоковой передачи 0x03 также способен на работу с D0. В этом примере управление проверкой подлинности лиц применимо только к интерфейсам потоковой передачи, нумерованным 0x03 и 0x0b, поэтому в запросах отображаются только эти интерфейсы.
Выходные данные для запроса GET_MAX должны быть следующими:
Выходные данные для запроса GET_DEF должны быть следующими:
Запрос SET_CUR на изменение параметра интерфейса потоковой передачи 0x03 на D1 будет следующим образом:
Выходные данные для запроса GET_CUR после приведенного выше запроса SET_CUR должны быть следующими:
2.2.2.7 Управление экстрасными параметрами камеры
Этот элемент управления позволяет программному обеспечению узла получать данные камеры для конечных точек в интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео. Таким образом, данные, полученные для каждой конечной точки, отображаются как атрибут MFStreamExtension_CameraExtrinsics в хранилище атрибутов для соответствующего потока (полученного с помощью вызова IMFDeviceTransform::GetOutputStreamAttributes).
GET_RES, GET_MIN, GET_MAX и GET_CUR запросы должны сообщать, что поле bNumEntries равно 0 и поэтому не содержат дополнительных полей.
GET_DEF запрос должен содержать список всех конечных точек с доступными сведениями о экстринсиках.
Пример:
Предположим, что камера имеет три интерфейса потоковой передачи видео с номерами 0x03, 0x05 и 0x08 соответственно, где интерфейс потоковой передачи видео 0x05 поддерживает запись изображений с помощью метода 2 в дополнение к видеозахвату, поддерживаемому всеми интерфейсами потоковой передачи видео. Среди этих интерфейсов потоковой передачи предположим, что интерфейсы потоковой передачи 0x05 и 0x08 имеют доступ к сведениям о параметрах экстрасенсорного восприятия, в то время как интерфейс потоковой передачи 0x03 не имеет доступа к этим сведениям.
В этом примере выходные данные для запроса GET_DEF должны быть следующими:
2.2.2.8 Встроенные функции камеры
Этот элемент управления позволяет программному обеспечению узла получать встроенные данные камеры для конечных точек в интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео. Таким образом, данные, полученные для каждой конечной точки, отображаются как атрибут MFStreamExtension_PinholeCameraIntrinsics в хранилище атрибутов для соответствующего потока (полученного с помощью вызова IMFDeviceTransform::GetOutputStreamAttributes).
GET_RES, GET_MIN, GET_MAX и GET_CUR должны сообщать, что поле bNumEntries равно 0, и поэтому не имеют дополнительных полей.
GET_DEF запрос должен содержать список всех конечных точек, имеющих доступные встроенные сведения.
Пример:
Предположим, что камера имеет три интерфейса потоковой передачи видео с номерами 0x03, 0x05 и 0x08 соответственно, где интерфейс потоковой передачи видео 0x05 поддерживает запись изображений с помощью метода 2 в дополнение к видеозахвату, поддерживаемому всеми интерфейсами потоковой передачи видео. Среди этих интерфейсов потоковой передачи предположим, что интерфейсы потоковой передачи 0x05 и 0x08 имеют встроенные сведения, доступные в то время как интерфейс потоковой передачи 0x03 не имеет встроенных сведений.
В этом примере выходные данные для запроса GET_DEF должны быть следующими:
2.2.2.9 Элемент управления метаданными
Этот элемент управления позволяет хост-программному обеспечению запрашивать и контролировать метаданные, созданные камерой. Это глобальный элемент управления, который влияет на все конечные точки во всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA драйвером камеры.
Если запрос SET_CUR поддерживается встроенным ПО, то применяется следующее:
Запросы GET_MIN и GET_DEF должны сообщать, что значение поля dwValue установлено на 0.
GET_RES запрос должен сообщать значение поля dwValue, которое совпадает со значением, сообщаемым запросом GET_MAX.
При получении запроса SET_CUR с dwValue, установленным в 0, камера не должна создавать метаданные. Когда запрос SET_CUR получается с параметром dwValue , равным значению, которое сообщается в запросе GET_MAX, камера может создавать метаданные и размер таких метаданных не может превышать dwValue для любого кадра.
Если запрос SET_CUR не поддерживается встроенным ПО, применяется следующее:
Запросы GET_MIN и GET_DEF должны указывать значение поля dwValue, соответствующее значению, указанному в запросе GET_MAX.
Запрос GET_RES должен сообщать, что значение поля dwValue устанавливается в 0.
Камера может создавать метаданные, и общий размер таких метаданных не может превышать dwValue, как указано в запросе GET_MAX, умноженного на 1024 байта минус размер полезной нагрузки метаданных UsbVideoHeader для любого кадра.
Мета-данные UsbVideoHeader имеют размер sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(KSTREAM_UVC_METADATA) или 24 байта.
Созданные метаданные должны соответствовать метаданным стандартного формата Майкрософт, описанным в разделе 2.2.3.
2.2.2.10 Управление ИК-фонариком
Этот элемент управления предоставляет гибкие средства для оборудования инфракрасных светодиодов, позволяющие сообщать о степени их управляемости, а также обеспечивает возможность управления ими. Это глобальный элемент управления, который влияет на все конечные точки на всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео, путем настройки мощности на лампу IR, подключенную к камере.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_IRTORCHMODE драйвером камеры.
Действует следующее:
GET_LEN запрос должен сообщать о значении 8.
GET_INFO запрос должен сообщать значение 3. Это значение указывает синхронный элемент управления, поддерживающий GET_CUR и SET_CUR.
GET_MIN запрос должен передавать поле dwMode, установленное в 0, и dwValue, установленное в значение, указывающее минимальную мощность. Уровень питания 0 может указывать off, но минимальный рабочий уровень питания не должен быть 0.
GET_RES запрос должен сообщать поле dwMode , равное 0, а dwValue — число меньше или равно GET_MAX(dwValue) — GET_MIN(dwValue) и таким образом, что GET_MAX(dwValue) — GET_MIN(dwValue) равномерно делится на это значение. dwValue может не быть нулевым (0).
GET_MAX запрос должен определять поле dwMode с установленными битами D[0-2], чтобы выявить возможности этого элемента управления. dwMode должен иметь установленный бит D0, указывающий, что OFF поддерживается, и должен иметь по крайней мере еще один установленный бит, поддерживающий активное состояние. DwValue должен иметь значение, указывающее обычную мощность.
GET_DEF запрос должен сообщать поле dwMode установленное в режим по умолчанию, в котором система должна быть перед началом потоковой передачи. DwMode должен иметь значение 2 (ON) или 4 (ALTERNATING). Значение dwValue должно быть установлено на уровень питания, который обычно используется для элемента управления FaceAuth. dwValue определяется производителем.
GET_CUR запрос должен сообщать, что поле dwMode установлено в текущий рабочий режим, а dwValue - на текущее освещение.
При получении запроса SET_CUR инфракрасный факел устанавливает освещение на рассчитанную интенсивность, используя запрашиваемый режим работы.
Факел IR должен выдавать атрибут MF_CAPTURE_METADATA_FRAME_ILLUMINATION для каждого кадра. Это можно сделать с помощью MFT устройства или путем включения атрибута MetadataId_FrameIllumination в полезную нагрузку метаданных из камеры. См. раздел 2.2.3.4.4.
Единственное назначение этих метаданных заключается в том, чтобы указать, освещается ли кадр или нет. Это те же метаданные, необходимые KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE DDI и MSXU_FACE_AUTHENTICATION_CONTROL , определенные в разделе 2.2.2.6.
2.2.2.11 Цифровое управление окнами
Цифровое окно определяет поле зрения и масштабирование камеры, когда она ведет потоковую трансляцию. Этот элемент управления является потенциальной заменой панорамирования, наклона и увеличения. Этот элемент управления применяется только во время активной потоковой передачи камеры.
Этот элемент управления доступен для всех типов камер и не зависит от типа медиа, который передается в потоковом режиме.
Этот элемент управления позволяет хост-программному обеспечению запрашивать и управлять цифровым окном, связанным с камерой.
Это глобальный элемент управления, который влияет на все конечные точки во всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео. Он настраивает источник данных пикселей, используемых ISP. В это входят "Method 2" и "Method 3", которые включают фиксацию штифтов.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW драйвером камеры папки "Входящие".
Действует следующее:
GET_LEN запрос должен сообщать значение 16.
GET_INFO запрос должен сообщать значение 3. Это значение указывает синхронный элемент управления, поддерживающий GET_CUR и SET_CUR.
GET_MIN запрос должен сообщать поле dwMode с значением 0, OriginX и OriginY , равным 0,0 и WindowSize , равным 1.0. Этот запрос в настоящее время не используется.
GET_RES запрос должен сообщать поле dwMode с значением 0, OriginX и OriginY , равным 0,0 и WindowSize , равным 1.0. Этот запрос в настоящее время не используется.
GET_MAX запрос должен сообщать поле dwMode с установленным битом D0, чтобы определить возможности этого элемента управления. Значение 0 указывает, что поддерживается только ручной режим. Значение «1» указывает, что режим автоматического обрамления лиц поддерживается. Остальные поля не используются, однако рекомендуется задать для OriginX и OriginY значение 0.0, а WindowSize — 1.0.
GET_DEF запрос должен сообщать поле dwMode с значением 0, OriginX и OriginY , равным 0,0 и WindowSize , равным 1.0. Это всегда окно по умолчанию.
GET_CUR запрос должен сообщать поле dwMode , установленное в текущем режиме работы, и OriginX, OriginY и WindowSize описывают текущее цифровое окно.
При получении запроса SET_CUR камера настраивает его поле зрения в соответствии с выбранным режимом работы и цифровым окном.
Если выбран режим автоматического обрамления лиц, камера выбирает окно, которое полностью охватывает доминирующее лицо в сцене, и OriginX, OriginY, и WindowSize игнорируются. Если лицо не найдено, используется окно по умолчанию.
Любые изменения в цифровом окне должны находить отражение в метаданных каждого образца.
Изменения в цифровом окне могут не быть немедленно эффективными, но элемент управления должен немедленно реагировать. Изменения в цифровом окне должны быть зафиксированы в полезных данных метаданных фрейма, как только они вводятся в силу.
2.2.2.12 Управление конфигурацией цифрового окна
Элемент управления ограничениями конфигурации цифрового окна указывает на пределы масштабирования камеры с учетом всех доступных разрешений. Разрешения не зависят от типа мультимедиа, поэтому два типа мультимедиа, рекламирующих один и тот же разрешение дисплея, объединяются в одну возможность.
Из-за ограничений размера конечной точки элемента управления этот элемент управления может описывать не более 1820 уникальных разрешений.
Этот элемент управления должен всегда быть доступен, чтобы сообщить о функциональных возможностях элемента управления Digital Window, если этот элемент управления также присутствует.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW_CONFIGCAPS драйвером камеры в папке "Входящие".
Действует следующее:
GET_LEN запрос должен сообщать общий размер полезных данных. Размер полезных данных должен быть кратным 36, так как каждое определение разрешения составляет 36 байтов в длину.
Запрос GET_INFO должен сообщать значение 1. Это значение указывает синхронный элемент управления, поддерживающий только GET_CUR.
GET_CUR запрос должен сообщать массив возможностей. Поля структуры возможностей определены выше.
GET_MIN, GET_MAX, GET_RES и GET_DEF запросы не используются, но должны возвращать те же значения, что и GET_CUR.
SET_CUR запросы не поддерживаются.
2.2.2.13 Элемент управления HDR для видео
Этот элемент управления позволяет программному обеспечению узла указать, поддерживает ли камера видео HDR. Поддержка этого элемента управления подразумевает, что камера способна выполнять видео HDR с максимально возможным качеством. Если камера не поддерживает Видео HDR, она не должна реализовать этот элемент управления.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR драйвером камеры.
Действует следующее:
GET_LEN запрос должен сообщать весь размер полезных данных (например, 4 байта).
GET_INFO запрос должен сообщать значение 3. Это значение указывает синхронный элемент управления, поддерживающий GET_CUR, SET_CUR.
GET_CUR запрос должен сообщать поле dwMode , установленное в текущем режиме работы.
GET_DEF должен иметь dwMode, установленный в OFF (0).
GET_MAX запрос должен объявлять поддержку доступных режимов операций: [1 (ON/OFF), 3 (ON/OFF/Auto)]. Поддержка ON (1) является обязательной для этого элемента управления.
GET_MIN и GET_RES запросы должны сообщать 0.
Запрос SET_CUR должен установить режим в OFF (0), ON (1) или AUTO (2).
2.2.2.14 Контроль Частоты Кадров
Этот элемент управления позволяет хост-программному обеспечению указать, поддерживает ли камера регулирование частоты кадров.
Этот элемент управления применяется только во время активной потоковой передачи камеры. Для активной потоковой передачи необходимо, чтобы пины предварительного просмотра или записи находились в состоянии KSSTATE_RUN, будучи готовыми и способными передавать кадры. Если поток не активен, этот элемент управления должен возвращать STATUS_INVALID_DEVICE_STATE.
Даже если это управляющий элемент фильтра, управление частотой кадров не должно влиять на фиксацию фотографий или потоки без RGB, такие как инфракрасные или глубинные. Кроме того, если ограничение частоты кадров действует, продолжительность выборки также должна быть скорректирована соответствующим образом.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_FRAMERATE_THROTTLE драйвером камеры.
| Селектор элементов управления | MSXU_CONTROL_FRAMERATE_THROTTLE (контрольное ограничение кадровой частоты) |
|---|---|
| Обязательные запросы | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR |
| Необязательные запросы | |
| wLength | 20 |
| Offset | Поле | Размер | Ценность | Описание |
|---|---|---|---|---|
| 0 | dwMode | 4 | Флаги | D0: 0 (OFF) или 1 (ON) D1-D31: зарезервировано и установлено значение 0 |
| 4 | scaleFactorPercentage | 4 | Номер | Это значение должно находиться в диапазоне Мин и Макс, и оно должно быть кратно значению Шаг. Например, если min = 5, Max = 100 и Step = 5, и если приложение решило уменьшить частоту кадров до 80% исходного значения, то для этого элемента должно быть задано значение 80. Установив это значение соответствующим образом, приложение может убедиться, что новая частота кадров никогда не превышает исходное значение, а также не переходит к нулю, но исходная частота кадров возможна. |
| 8 | мин | 4 | Номер | Минимальное значение должно быть равно по крайней мере одному размеру шага или должно быть кратным размеру шага (например, шаг1, шаг2 и т. д.). Минимальное значение не может иметь значение 0. |
| 12 | макс | 4 | Номер | Максимальное значение должно иметь значение 100, что означает отсутствие изменений в частоте кадров. |
| 16 | шаг | 4 | Номер | Шаг должен быть строгим фактором Max, например {Max % Step == 0}. Пример: 1, 2, 4, 5 и т. д. |
Действует следующее:
GET_LEN запрос должен сообщать весь размер полезных данных (например, 20 байтов).
GET_INFO запрос должен сообщать значение 3. Это значение указывает синхронный элемент управления, поддерживающий GET_CUR, SET_CUR.
Запрос GET_CUR должен сообщать поле dwMode, установленное в текущем режиме работы, и масштабирования scaleFactorPercentage, установленное в текущем значении scaleFactor. Минимальное, максимальное и шаг должны сообщать о значениях, как описано в приведенной выше таблице.
GET_DEF должен иметь значение dwMode, равное OFF(0), scaleFactorPercentage=100, Min установлен на значение по умолчанию, max установлен на 100, а step установлен на шаг по умолчанию. Значения min и step должны быть определены производителем, но должны соответствовать рекомендациям, упомянутым в приведенной выше таблице.
GET_ MAX запрос должен объявлять поддержку доступных режимов работы и будет сообщать значение 1 [ ВКЛ | ВЫКЛ ]. Поддержка как ON, так и OFF является обязательной для этого элемента управления. Значения min, max, step и scaleFactorPercentage можно установить на значения по умолчанию.
GET_MIN и GET_RES запросы должны сообщать 0.
SET_CUR запрос должен установить режим в OFF(0) или ON(1). Если для dwMode задано значение ON, то scaleFactorPercentage вступит в силу. В обоих случаях OFF и ON параметр scaleFactorPercentage должен быть допустимым, как указано в приведенной выше таблице.
2.2.2.15 Поле зрения 2 для управления конфигурацией
Элемент управления "Настройка поля зрения 2" указывает поддерживаемые значения углов обзора в градусах в виде массива значений. Все поддерживаемые значения должны находиться в диапазоне теоретического минимума и максимума, от 1 до 360 градусов.
Если устройство хочет поддерживать непрерывные значения поля представления, необходимо сообщить обо всех поддерживаемых значениях. Например, если устройство хочет поддерживать диагональное поле представления от 85 градусов – 60 градусов с размером шага 1, этот элемент управления должен сообщать массив значений [85, 84, 83, 82, ..., 62, 61, 60].
Этот элемент управления должен быть доступен для отчета о функциях при наличии элемента управления "Поле представления 2".
Это синхронное управление уровнем фильтра.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2_CONFIGCAPS драйвером камеры.
| Селектор элементов управления | MSXU_CONTROL_FIELDOFVIEW2_CONFIG |
|---|---|
| Обязательные запросы | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR |
| Необязательные запросы | |
| wLength | 4 байта + Count раз по 4 байта, где Count — количество уникальных значений угла обзора. |
| Offset | Поле | Размер | Ценность | Описание |
|---|---|---|---|---|
| 0 | dwDefaultFieldOfView | 4 | Номер | По умолчанию диагональное поле представления должно быть одним из значений, сообщаемых в массиве FieldOfViewValues. |
| 4 | FieldOfViewValues[0] | 4 | Номер | Первое значение угла обзора, это должно быть самым широким значением FoV (угла обзора). |
| … | … | … | … | … |
| 4 + 4*(Count-1) | FieldOfViewValues [Count -1] | 4 | Номер | Последнее значение поля представления должно быть самым узким значением FoV. |
Действует следующее:
Запрос GET_LEN должен указывать полный размер полезных данных.
GET_INFO запрос должен сообщать о 1. Это значение указывает синхронный элемент управления, поддерживающий только GET_CUR.
GET_CUR запрос должен сообщать данные, содержащие значения FoV по умолчанию и массив поддерживаемых значений FoV в порядке убывания. Поля структуры определены выше.
GET_DEF запрос должен сообщать то же самое, что и GET_CUR.
GET_MIN, GET_MAX и GET_RES запросы не используются, но должны возвращать те же значения, что и GET_CUR.
SET_CUR запросы не поддерживаются.
Значения углов обзора должны располагаться в порядке убывания, например, самый широкий угол обзора идет первым, а самый узкий — последним.
2.2.2.16 Контроль поля зрения 2
Этот элемент управления указывает базовое поле представления, которое камера использует при потоковой передаче. Этот элемент управления можно применить до или во время потоковой передачи.
Этот элемент управления доступен для всех типов камер и не зависит от типа медиа, который передается в потоковом режиме.
Этот элемент управления позволяет хост-программному обеспечению запрашивать и контролировать поле просмотра, связанное с камерой.
Это глобальный элемент управления, который влияет на все конечные точки во всех интерфейсах потоковой передачи видео, связанных с интерфейсом управления видео. Он корректирует источник данных пикселя (или датчика), используемых поставщиком услуг интернета вещей (обработчик сигналов изображений). В это входят "Method 2" и "Method 3", которые включают фиксацию штифтов.
Это синхронное управление уровнем фильтра.
Этот элемент управления сопоставляется с KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 драйвером камеры.
| Селектор элементов управления | MSXU_CONTROL_FIELDOFVIEW2 |
|---|---|
| Обязательные запросы | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR |
| Необязательные запросы | |
| wLength | 4 |
| Offset | Поле | Размер | Ценность | Описание |
|---|---|---|---|---|
| 0 | dwValue | 4 | Номер | Диагональный угол обзора в градусах. |
Действует следующее:
GET_LEN запрос должен сообщать значение 4.
Запрос GET_INFO должен сообщить о 3. Это значение указывает синхронный элемент управления, поддерживающий GET_CUR и SET_CUR.
GET_MIN запрос должен сообщать значение dwValue минимального поддерживаемого угла обзора.
Запрос GET_RES должен сообщать, когда значение поля dwValue установлено в 0. Этот запрос в настоящее время не используется.
GET_MAX запрос должен сообщать, что значение поля dwValue установлено на максимально поддерживаемый угол обзора.
GET_DEF запрос должен сообщать значение dwValue по умолчанию для угла обзора.
Запрос GET_CUR должен сообщать поле dwValue, установленное на текущее значение поля обзора.
При получении запроса SET_CUR камера устанавливает поле зрения в соответствии с заданным dwValue.
Если камера реализует CT_ZOOM_RELATIVE_CONTROL и (или) CT_ZOOM_ABSOLUTE_CONTROL, эти элементы управления сбрасываются до значений по умолчанию при вызове MSXU_CONTROL_FIELDOFVIEW2 SET_CUR.
Если камера реализует MSXU_CONTROL_DIGITALWINDOW, она должна отражать изменение окна при установке нового значения поля представления. И наоборот, поле представления должно отражать изменения, внесенные через цифровое окно. См. KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 для получения дополнительных сведений.
Метаданные 2.2.3
Дизайн кадров метаданных стандартного формата основывается на кастомном дизайне метаданных UVC в Windows 10. В Windows 10 поддерживаются пользовательские метаданные для UVC с использованием пользовательского INF-файла драйвера камеры (примечание: драйвер камеры может быть основан на Windows USBVIDEO.SYS, но для получения метаданных для данного оборудования требуется пользовательский INF-файл). Если MetadataBufferSizeInKB<PinIndex> запись реестра присутствует и ненулева́я, то для этого пина поддерживаются пользовательские метаданные, а значение указывает размер буфера, используемый для метаданных. Поле <PinIndex> указывает на индекс видео контакта (пина), начиная с 0.
В Windows 10 версии 1703 драйвер камеры может сигнализировать о поддержке метаданных стандартного формата Майкрософт, включая следующую запись AddReg:
StandardFormatMetadata<PinIndex>: REG_DWORD: 0x0 (Не поддерживается) до 0x1 (Поддерживается)
Этот раздел реестра будет считываться DevProxy, который сообщает драйверу UVC, что метаданные имеют стандартный формат, устанавливая флаг KSSTREAM_METADATA_INFO_FLAG_STANDARDFORMAT в поле Flags структуры KSSTREAM_METADATA_INFO.
2.2.3.1 Метаданные формата Microsoft Standard
Метаданные стандартного формата Майкрософт — это один или несколько экземпляров следующей структуры:
typedef struct tagKSCAMERA_METADATA_ITEMHEADER {
ULONG MetadataId;
ULONG Size; // Size of this header + metadata payload following
} KSCAMERA_METADATA_ITEMHEADER, *PKSCAMERA_METADATA_ITEMHEADER;
Поле MetadataId заполняется идентификатором из следующего определения перечисления, содержащего хорошо определенные идентификаторы и пользовательские идентификаторы (идентификаторы >= MetadataId_Custom_Start).
typedef enum {
MetadataId_Standard_Start = 1,
MetadataId_PhotoConfirmation = MetadataId_Standard_Start,
MetadataId_UsbVideoHeader,
MetadataId_CaptureStats,
MetadataId_CameraExtrinsics,
MetadataId_CameraIntrinsics,
MetadataId_FrameIllumination,
MetadataId_Standard_End = MetadataId_FrameIllumination,
MetadataId_Custom_Start = 0x80000000,
} KSCAMERA_MetadataId;
Поле "Размер" имеет значение sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(Полезные данные метаданных).
Метаданные стандартного формата, созданные прошивкой из пакетов USB видеокадров
Во время передачи через UVC для видео на основе кадров, видеокадр разбивается на серию пакетов, каждому из которых предшествует заголовок UVC. Каждый заголовок полезной нагрузки UVC определяется спецификацией полезной нагрузки на основе фрейма драйвера USB Video Class.
Заголовок пейлоада
Ниже приведено описание формата заголовка полезных данных для форматов на основе кадров.
Поле HLE (длина заголовка)
Поле длины заголовка указывает длину заголовка в байтах.
Заголовок битового поля
FID: идентификатор кадра
- Этот бит переключается на каждую границу начала кадра и остается константой для остальной части кадра.
EOF: конец кадра
- Этот бит указывает конец кадра видео и задается в последнем примере видео, относящемся к кадру. Использование этого бита является оптимизацией для уменьшения задержки в завершении передачи кадров и является необязательным.
PTS: отметка времени презентации
- Этот бит, если задан, указывает на наличие поля PTS.
SCR: опорная частота источника
- Этот бит, если задан, указывает наличие поля SCR.
RES: зарезервировано.
- Установите значение 0.
STI: неподвижное изображение
- Этот бит, когда установлен, определяет видеосэмпл как принадлежащий неподвижному изображению.
ERR: бит ошибки
- Этот бит, когда установлен, указывает на ошибку при потоковой передаче данных устройства.
EOH: конец заголовка
- Этот бит, если задан, указывает конец полей BFH.
PTS: метка времени презентации, размер: 4 байта, значение: число
- Поле PTS присутствует при установке бита PTS в поле BFH[0]. См. раздел 2.4.3.3 "Заголовки видео и статических изображений в полезной нагрузке" в спецификации класса USB-устройств для видеоустройств.
SCR: опорный источник тактовых сигналов, размер: 6 байт, значение: число
- Поле SCR присутствует при установке бита SCR в поле BFH[0]. См. раздел 2.4.3.3 Заголовки полезной нагрузки для видео и неподвижных изображений в спецификации определения класса устройств USB для видеоустройств.
Поле HLE в существующем драйвере UVC фиксировано до 2 байтов (нет PTS/SCR) или до 12 байт (PTS/SCR присутствует). Однако поле HLE, являясь полем размера байтов, может указывать до 255 байт данных заголовка. Если присутствуют оба PTS/SCR, а HLE — более 12 байт, любые дополнительные данные после первых 12 байт заголовка полезной нагрузки интерпретируются как стандартные метаданные, относящиеся к кадру видео, в случае установки записи StandardFormatMetadata<PinIndex> как INF.
Метаданные стандартного формата (созданные встроенным ПО) для фрейма получаются путем объединения частичных BLOB-объектов, найденных в пакетах видеофрейма, представляющих данный фрейм.
Буфер метаданных 2.2.3.3, предоставленный компоненту пользовательского режима
Буфер метаданных, предоставленный компоненту пользовательского режима, будет иметь элемент метаданных для меток времени UVC (созданных драйвером UVC), а затем элементы метаданных, созданные встроенным ПО, и они приведены следующим образом:
Формат метаданных 2.2.3.4 для стандартных идентификаторов метаданных
Встроенное ПО может выбрать, следует ли создавать метаданные, соответствующие идентификатору. Если встроенное ПО выбирает создание метаданных, соответствующих идентификатору, то метаданные этого идентификатора должны присутствовать во всех кадрах, создаваемых встроенного ПО.
2.2.3.4.1 MetadataId_CaptureStats
Формат метаданных для этого идентификатора определяется следующей структурой:
typedef struct tagKSCAMERA_METADATA_CAPTURESTATS {
KSCAMERA_METADATA_ITEMHEADER Header;
ULONG Flags;
ULONG Reserved;
ULONGLONG ExposureTime;
ULONGLONG ExposureCompensationFlags;
LONG ExposureCompensationValue;
ULONG IsoSpeed;
ULONG FocusState;
ULONG LensPosition; // a.k.a Focus
ULONG WhiteBalance;
ULONG Flash;
ULONG FlashPower;
ULONG ZoomFactor;
ULONGLONG SceneMode;
ULONGLONG SensorFramerate;
} KSCAMERA_METADATA_CAPTURESTATS, *PKSCAMERA_METADATA_CAPTURESTATS;
Поле "Флаги" указывает, какие из последующих полей в структуре заполняются и имеют допустимые данные. Поле "Флаги" не должно отличаться от фрейма к кадру. В настоящее время определены следующие флаги:
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURETIME 0x00000001
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURECOMPENSATION 0x00000002
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ISOSPEED 0x00000004
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FOCUSSTATE 0x00000008
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_LENSPOSITION 0x00000010
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_WHITEBALANCE 0x00000020
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASH 0x00000040
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASHPOWER 0x00000080
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ZOOMFACTOR 0x00000100
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SCENEMODE 0x00000200
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SENSORFRAMERATE 0x00000400
Зарезервированное поле зарезервировано для будущего и должно иметь значение 0.
Поле ExposureTime содержит время экспозиции в 100 ns, примененное к датчику при захвате кадра. Это отображается как атрибут MF_CAPTURE_METADATA_EXPOSURE_TIME в соответствующем примере MF.
Поле ExposureCompensationFlags содержит шаг компенсации EV (должен быть задан ровно один из флагов шага KSCAMERA_EXTENDEDPROP_EVCOMP_XXX) для передачи значения компенсации EV. Поле ExposureCompensationValue содержит значение компенсации EV в единицах шага, который был применён к датчику во время захвата кадра. Они отображаются как атрибуты MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION в соответствующем примере MF.
Поле IsoSpeed содержит значение скорости ISO, примененное к датчику при захвате кадра. Это без единиц измерения. Это отображается как атрибут MF_CAPTURE_METADATA_ISO_SPEED в соответствующем примере MF.
Поле FocusState содержит текущее состояние фокуса, которое может принимать одно из значений, определенных в перечислении KSCAMERA_EXTENDEDPROP_FOCUSSTATE. Это отображается как атрибут MF_CAPTURE_METADATA_FOCUSSTATE в соответствующем примере MF.
Поле LensPosition содержит логическую позицию объектива при захвате кадра, которая является безразмерной. Это то же значение, которое можно запрашивать из KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS в вызове GET. Это отображается как атрибут MF_CAPTURE_METADATA_LENS_POSITION в соответствующем примере MF.
Поле WhiteBalance содержит белый баланс, примененный к датчику при захвате кадра, который является значением в Келвине. Это отображается как атрибут MF_CAPTURE_METADATA_WHITEBALANCE в соответствующем примере MF.
Поле Flash содержит логическое значение, где 1 означает, что вспышка включена, а 0 — что вспышка выключена, в момент захвата кадра. Это отображается как атрибут MF_CAPTURE_METADATA_FLASH в соответствующем примере MF.
Поле FlashPower содержит мощность вспышки, примененную к захваченному кадру, значение которой находится в диапазоне от 0 до 100. Это поле должно быть опущено, если драйвер не поддерживает настраиваемую мощность для флэш-памяти. Это отображается как атрибут MF_CAPTURE_METADATA_FLASH_POWER в соответствующем примере MF.
Поле ZoomFactor содержит значение масштабирования в формате Q16, примененное к захваченным кадрам. Это отображается как атрибут MF_CAPTURE_METADATA_ZOOMFACTOR в соответствующем примере MF.
Поле SceneMode содержит режим сцены, примененный к кадру, который является 64-разрядным флагом KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX. Это отображается как атрибут MF_CAPTURE_METADATA_SCENE_MODE в соответствующем примере MF.
Поле SensorFramerate содержит измеренное значение частоты чтения датчика в герцах при захвате кадра, представленное в виде числителя в верхних 32 битах и знаменателя в нижних 32 битах. Это отображается как атрибут MF_CAPTURE_METADATA_SENSORFRAMERATE в соответствующем примере MF.
2.2.3.4.2 MetadataId_CameraExtrinsics
Формат метаданных для этого идентификатора включает стандартный KSCAMERA_METADATA_ITEMHEADER, за которым следует полезная нагрузка в виде массива байтов. Полезные данные должны соответствовать структуре MFCameraExtrinsics , за которой следует нулевая или более MFCameraExtrinsic_CalibratedTransform структур. Полезная нагрузка должна быть выровнена по границе 8 байт, и все неиспользуемые байты должны находиться в конце полезной нагрузки и быть установлены в 0.
2.2.3.4.3 MetadataId_CameraIntrinsics
Формат метаданных для этого идентификатора включает стандартный KSCAMERA_METADATA_ITEMHEADER, затем полезную нагрузку в виде массива байтов. Нагрузка должна соответствовать структуре MFPinholeCameraIntrinsics. Полезные данные должны быть выровнены по 8 байтам, и все неиспользуемые байты должны находиться в конце полезных данных и иметь значение 0.
2.2.3.4.4 ИдентификаторМетаданных_ОсвещениеКадра
Формат метаданных для этого идентификатора определяется следующей структурой:
typedef struct tagKSCAMERA_METADATA_FRAMEILLUMINATION {
KSCAMERA_METADATA_ITEMHEADER Header;
ULONG Flags;
ULONG Reserved;
} KSCAMERA_METADATA_FRAMEILLUMINATION, *PKSCAMERA_METADATA_FRAMEILLUMINATION;
Поле "Флаги" указывает сведения о захваченном кадре. В настоящее время определены следующие флаги:
#define KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON 0x00000001
Если кадр был захвачен при освещении, флаг KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON должен быть установлен. В противном случае этот флаг не должен выставляться.
Зарезервированное поле зарезервировано для дальнейшего использования и должно иметь значение 0.
Пример:
Например, структура KSCAMERA_METADATA_FRAMEILLUMINATION, указывающая, что освещение включено, выглядит следующим образом:
KSCAMERA_METADATA_FRAMEILLUMINATION.Header.MetadataId = MetadataId_FrameIllumination;
KSCAMERA_METADATA_FRAMEILLUMINATION.Header.Size = 16; // 4 ULONG variables in total inside the structure
KSCAMERA_METADATA_FRAMEILLUMINATION.Flags = KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON;
KSCAMERA_METADATA_FRAMEILLUMINATION.Reserved = 0;
2.2.3.4.5 MetadataId_USBVideoHeader
Формат метаданных для этого идентификатора определяется общим KSCAMERA_METADATA_ITEMHEADER и структурой KSSTREAM_UVC_METADATA:
typedef struct
{
ULONG PresentationTimeStamp;
ULONG SourceClockReference;
union
{
struct
{
USHORT Counter : 11;
USHORT Reserved : 5;
};
USHORT SCRToken;
};
USHORT Reserved0;
ULONG Reserved1;
} KSSTREAM_UVC_METADATATYPE_TIMESTAMP, *PKSSTREAM_UVC_METADATATYPE_TIMESTAMP;
typedef struct {
KSSTREAM_UVC_METADATATYPE_TIMESTAMP StartOfFrameTimestamp;
KSSTREAM_UVC_METADATATYPE_TIMESTAMP EndOfFrameTimestamp;
} KSSTREAM_UVC_METADATA, *PKSSTREAM_UVC_METADATA;
Поля StartOfFrameTimestamp и EndOfFrameTimestamp представляют собой метки времени, содержащиеся в заголовках UVC в первых и последних пакетах данных UVC, переданных камерой для формирования этого кадра.
Полезные данные не должны отправляться устройством.
Эти данные метаданных уникальны, поскольку они являются единственными, созданными непосредственно драйвером класса USB Video на основе сведений, извлеченных из заголовков полезных данных, совместимых с UVC.
Эта полезные данные предварительно добавляются в буфер метаданных каждого кадра.
Если устройство поддерживает стандартизированные метаданные, оно должно включать пространство, необходимое для хранения полезных данных в требованиях к буферу, как сообщает элемент управления метаданными, определенный в разделе 2.2.2.9.