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


Пример объявления профиля (профиль камеры версии 2)

Мы берем гипотетическую камеру, которая поддерживает новый профиль высокой частоты кадров. Определим некоторые ограничения для нашего устройства.

  1. Значок предварительного просмотра — 0. В KSFILTER_DESCRIPTOR, объявленном драйвером камеры, когда определен массив KSPIN_DESCRIPTOR_EX, первый KSPIN_DESCRIPTOR_EX является дескриптором пин-кода предварительного просмотра. Аналогичным образом, закрепление 1 — закрепление захвата и закрепление 2 — это закрепление фотографии.

  2. Из-за ограничений оборудования устройство, на которое идет речь, не может обрабатывать масштабирование на скорости кадров 60 кадров или больше. Таким образом, потоки предварительной версии и записи должны иметь одинаковое разрешение.

  3. Аналогичным образом устройство также не может обрабатывать преобразование цветового пространства для 60 fps или выше.

  4. Камера поддерживает потоковую потоковую передачу видео 4K 16x9 на 60 fps. Камера также может 3840x2880@60fps (4:3 видео на 60 кадров в с).

  5. Камера не может предоставлять какие-либо операции с фотографиями при выполнении в 60 кадров в с.

  6. Мы также объявим профиль записи видео, ограниченный 30 кадров в секунду, но может разрешить любое сочетание разрешений и подтипы.

  7. Для последовательности фотографий профиля записи видео не поддерживается (например, работа с одними операциями с фотографиями).

Для объявления на основе INF каждый фильтр типа пин-кода должен быть назначен именем записи реестра. Это имя должно быть MTF#, где # представляет целочисленное значение.

Учитывая эти ограничения, можно объявить следующий профиль:

[SampleDriver.CameraInterface.AddReg]
; Declare our schema version.
HKR,,"OEMCameraProfileVersion",0x00010001,2
;
; Declare our HighFrameRate profile with a lock resolution/subtype constraint.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"
;
; Declare our VideoRecording profile.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Установив для записи реестра OEMCameraProfileVersion значение 2, мы указываем конвейер захвата, который мы поддерживаем новую схему профиля на основе ограничений.

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2

После объявления все профили должны храниться в разделе реестра профилей в узле интерфейса устройства.

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

Каждый профиль должен быть настроен в виде подраздела в разделе "Профили" с помощью идентификатора профиля. Идентификатор профиля состоит из типа профиля, индекса профиля.

Тип профиля может быть одним из следующих известных типов профилей или строки {GUID}:

  • KSCAMERAPROFILE_HighQualityPhoto

  • KSCAMERAPROFILE_BalancedVideoAndPhoto

  • KSCAMERAPROFILE_VideoConferencing

  • KSCAMERAPROFILE_PhotoSequence

  • KSCAMERAPROFILE_FaceAuth_Mode

  • KSCAMERAPROFILE_HighFrameRate

  • KSCAMERAPROFILE_HDRWithWCGVideo

  • KSCAMERAPROFILE_HDRWithWCGPhoto

  • KSCAMERAPROFILE_VariablePhotoSequence

  • KSCAMERAPROFILE_VideoHDR8

Индекс профиля может быть любым 32-разрядным целым числом без знака, за исключением 0xFFFFFFFF. Значение индекса 0xFFFFFFFF зарезервировано и не должно использоваться любым объявлением IHV/OEM.

Объявление записи "Ограничение" в подразделе профиля указывает, что у нас есть ограничение уровня профиля:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

Для профиля высокой частоты кадров LRS;LST указывает, что разрешение для всех закреплений должно быть одинаковым, а подтип также должен быть одинаковым (преобразование цветового пространства не допускается из конвейера захвата).

Для пин-кода предварительного просмотра профиля высокой частоты кадров мы разрешаем любое разрешение или частоту кадров, доступную на закреплении предварительного просмотра. Для нашего гипотетического устройства предварительный просмотр пин-кода никогда не будет предоставлять более 30 fps.

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Для закрепления записи мы разрешаем любое разрешение и любую частоту кадров 60 fps или более поздней.

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Хотя закрепление фотографии недоступно:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

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

HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Еще раз у нас нет ограничений на пин-код предварительного просмотра, так как наша гипотетическая камера предоставляет только 30 fps предварительный просмотр только с типами мультимедиа, которые гарантированно будут одновременными в обоих сценариях записи видео или высокой частоты кадров.

HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Но для закрепления записи необходимо ограничить это до 30 типов мультимедиа fps, так как мы не можем поддерживать более высокие частоты кадров для различных разрешений между предварительным просмотром и записью или операциями фото.

HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Для закрепления фотографий мы объявляем, что не поддерживается последовательность фотографий, объявляя элемент управления "Последовательность фотографий" как заблокированный для этого профиля.

HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

спецификация разработчика профиля камеры версии 2