Declaración de perfil de ejemplo (Perfil de cámara V2)
Tomamos una cámara hipotética que admite el nuevo perfil de alta velocidad de fotogramas. Vamos a definir algunas restricciones para nuestro dispositivo.
El pin de vista previa es el pin 0. En el KSFILTER_DESCRIPTOR declarado por el controlador de cámara, cuando se define la matriz de KSPIN_DESCRIPTOR_EX, el primer KSPIN_DESCRIPTOR_EX es el descriptor del pin de vista previa. Del mismo modo, el pin 1 es el pin capture y el pin 2 es Photo pin.
Debido a las limitaciones de hardware, el dispositivo en cuestión no puede controlar el escalado a velocidades de fotogramas de 60 fps o superior. Por lo tanto, las secuencias de vista previa y captura deben tener la misma resolución.
Del mismo modo, el dispositivo tampoco puede controlar la conversión de espacio de color para 60 fps o superior.
La cámara es capaz de transmitir vídeo de 4K 16x9 a 60 fps. La cámara también es capaz de 3840x2880@60fps (vídeo de 4:3 a 60 fps).
La cámara no puede proporcionar ninguna operación de foto cuando se ejecuta a 60 fps.
También declararemos un perfil de grabación de vídeo, limitado a 30 fps, pero puede permitir cualquier combinación o subtipo de resolución.
Para la secuencia de fotos de perfil de grabación de vídeo no se admite (por ejemplo, trabajo de operaciones de fotos únicas).
Para la declaración basada en INF, se debe asignar un nombre de entrada del Registro a cada filtro de tipo de medio pin. Este nombre debe ser MTF# donde # representa un valor entero.
Dadas estas restricciones, podemos declarar el perfil siguiente:
[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))"
Al establecer la entrada del Registro OEMCameraProfileVersion en 2, indicamos a la canalización de captura que se admite el nuevo esquema de perfil basado en restricciones.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
Una vez declarados, todos los perfiles se deben almacenar en la clave del Registro de perfiles en el nodo Interfaz de dispositivo.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Cada perfil debe configurarse como una subclave en la clave Perfiles, mediante el identificador de perfil. Un identificador de perfil consta de tipo de perfil, índice de perfil.
El tipo de perfil puede ser cualquiera de los siguientes tipos de perfil conocidos o una cadena {GUID}:
KSCAMERAPROFILE_HighQualityPhoto
KSCAMERAPROFILE_BalancedVideoAndPhoto
KSCAMERAPROFILE_VideoConferencing
KSCAMERAPROFILE_PhotoSequence
KSCAMERAPROFILE_FaceAuth_Mode
KSCAMERAPROFILE_HighFrameRate
KSCAMERAPROFILE_HDRWithWCGVideo
KSCAMERAPROFILE_HDRWithWCGPhoto
KSCAMERAPROFILE_VariablePhotoSequence
KSCAMERAPROFILE_VideoHDR8
El índice de perfil puede ser cualquier entero de 32 bits sin signo, excepto por 0xFFFFFFFF. El valor de índice de 0xFFFFFFFF está reservado y no debe usarse en ninguna declaración IHV/OEM.
La declaración de la entrada Constraint en la subclave del perfil indica que tenemos una restricción de nivel de perfil:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Para el perfil de velocidad de fotogramas alta, LRS;LST
indica que la resolución en todos los pines debe ser la misma y el subtipo también debe ser el mismo (no se permite ninguna conversión de espacio de color ni escala desde la canalización de captura).
Para la patilla Vista previa del perfil de alta velocidad de fotogramas, se permite cualquier resolución o velocidad de fotogramas disponible en el pin vista previa. Para nuestro dispositivo hipotético, el pin de vista previa nunca expondrá más de 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:(!)"
Para el pin Capture, se permite cualquier resolución y cualquier velocidad de fotogramas de 60 fps o superior.
[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:(!)"
Aunque el pin de foto no está disponible:
[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:(!)"
Además del perfil de alta velocidad de fotogramas, también proporcionamos un perfil estándar de grabación de vídeo.
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))"
Una vez más, no tenemos restricciones en el pin de vista previa, ya que nuestra cámara hipotética solo expone una vista previa de 30 fps con solo tipos de medios que están garantizados para ser simultáneos en escenarios de grabación de vídeo o alta velocidad de fotogramas.
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))"
Pero para el pin Capture, es necesario limitar esto a 30 fps de tipos multimedia porque no podemos admitir velocidades de fotogramas más altas para diferentes resoluciones entre las operaciones de vista previa y captura ni foto.
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))"
Para el pin Photo, no declaramos compatibilidad con Photo Sequence declarando el control Photo Sequence como bloqueado para este perfil.
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))"