Расширения Microsoft для спецификации USB Video Class 1.5

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

Управление компенсацией E V.

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_MAX аутентификация лица.

Выходные данные для запроса GET_DEF должны быть следующими:

GET_DEF аутентификации по лицу.

Запрос SET_CUR на изменение параметра интерфейса потоковой передачи 0x03 на D1 будет следующим образом:

SET_CUR проверки подлинности лиц.

Выходные данные для запроса GET_CUR после приведенного выше запроса SET_CUR должны быть следующими:

GET_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 должны быть следующими:

Внешние параметры камеры 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 должны быть следующими:

внутренние параметры камеры 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 драйвером камеры.

I R факел управления.

Действует следующее:

  • 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 драйвером камеры.

управление HDR видео.

Действует следующее:

  • 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.