Пример объявления профиля (профиль камеры версии 2)
Мы берем гипотетические камеры, поддерживающие новый профиль высокой частоты кадров. Давайте определим некоторые ограничения для нашего устройства.
Предварительный просмотр пин-кода — закрепление 0. В KSFILTER_DESCRIPTOR, объявленном драйвером камеры, при определении массива KSPIN_DESCRIPTOR_EX первым KSPIN_DESCRIPTOR_EX является дескриптор закрепления предварительного просмотра. Аналогично, закрепление 1 — закрепление захвата, а закрепление 2 — закрепление фотографии.
Из-за аппаратных ограничений рассматриваемое устройство не может обрабатывать масштабирование с частотой кадров 60 кадров/с или выше. Таким образом, потоки предварительного просмотра и записи должны иметь одинаковое разрешение.
Аналогичным образом устройство также не может обрабатывать преобразование цветового пространства в течение 60 кадров/с или более.
Камера может выполнять потоковую передачу видео 4K 16x9 с разрешением 60 кадров/с. Камера также может 3840x2880@60fps (4:3 видео с 60 кадрами в минуту).
Камера не может предоставить никаких операций с фотографией при выполнении со значением 60 кадров/с.
Мы также объявим профиль записи видео, который ограничен 30 кадрами в секунду, но может разрешить любое сочетание или подтипы разрешения.
Для фото профиля записи видео последовательность не поддерживается (например, одиночные операции с фотографиями).
Для объявления на основе 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))"