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


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

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

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

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

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

  4. Камера может выполнять потоковую передачу видео 4K 16x9 с разрешением 60 кадров/с. Камера также может 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.

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

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

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

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

[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 кадров/с или выше.

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

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

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