Exemple de déclaration de profil (profil caméra V2)
Nous prenons une caméra hypothétique qui prend en charge le nouveau profil de fréquence d’images élevée. Définissons certaines contraintes pour notre appareil.
L’épingle d’aperçu est l’épingle 0. Dans le KSFILTER_DESCRIPTOR déclaré par le pilote de l’appareil photo, lorsque le tableau de KSPIN_DESCRIPTOR_EX est défini, le premier KSPIN_DESCRIPTOR_EX est le descripteur de l’épingle d’aperçu. De même, la broche 1 est Broche de capture et broche 2 est Broche photo.
En raison de limitations matérielles, l’appareil en question ne peut pas gérer la mise à l’échelle à des fréquences d’images de 60 ips ou plus. Par conséquent, les flux Aperçu et Capture doivent avoir la même résolution.
De même, l’appareil ne peut pas non plus gérer la conversion d’espace de couleur pour 60 images/s ou plus.
L’appareil photo est capable de diffuser en continu des vidéos 4K 16x9 à 60 ips. L’appareil photo est également capable de 3840x2880@60fps (vidéo 4 :3 à 60 fps).
L’appareil photo n’est pas en mesure de fournir des opérations de photo lors de l’exécution à 60 images/s.
Nous déclarerons également un profil d’enregistrement vidéo, limité à 30 images/s, mais qui peut autoriser toute combinaison/sous-type de résolution.
Pour l’enregistrement vidéo photo de profil séquence n’est pas prise en charge (par exemple, les opérations de photo uniques fonctionnent).
Pour la déclaration basée sur INF, un nom d’entrée de Registre doit être attribué à chaque filtre de type de média pin. Ce nom doit être MTF# où # représente une valeur entière.
Compte tenu de ces contraintes, nous pouvons déclarer le profil suivant :
[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))"
En définissant l’entrée de Registre OEMCameraProfileVersion sur 2, nous indiquons au pipeline de capture que nous prenons en charge le nouveau schéma de profil basé sur une contrainte.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
Une fois déclarés, tous les profils doivent être stockés sous la clé de Registre Profils sous le nœud Device Interface.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Chaque profil doit être configuré en tant que sous-clé sous la clé Profils, à l’aide de l’ID de profil. Un ID de profil se compose du type de profil et de l’index de profil.
Le type de profil peut être l’un des types de profil connus suivants ou une chaîne {GUID} :
KSCAMERAPROFILE_HighQualityPhoto
KSCAMERAPROFILE_BalancedVideoAndPhoto
KSCAMERAPROFILE_VideoConferencing
KSCAMERAPROFILE_PhotoSequence
KSCAMERAPROFILE_FaceAuth_Mode
KSCAMERAPROFILE_HighFrameRate
KSCAMERAPROFILE_HDRWithWCGVideo
KSCAMERAPROFILE_HDRWithWCGPhoto
KSCAMERAPROFILE_VariablePhotoSequence
KSCAMERAPROFILE_VideoHDR8
L’index de profil peut être n’importe quel entier non signé 32 bits à l’exception de 0xFFFFFFFF. La valeur d’index de 0xFFFFFFFF est réservée et ne doit pas être utilisée par une déclaration IHV/OEM.
La déclaration de l’entrée Contrainte au niveau de la sous-clé de profil indique que nous avons une contrainte au niveau du profil :
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Pour le profil Fréquence d’images élevée, indique que la LRS;LST
résolution sur toutes les broches doit être la même et que le sous-type doit également être identique (aucune mise à l’échelle ni conversion d’espace de couleurs n’est autorisée à partir du pipeline de capture).
Pour l’épingle d’aperçu du profil Fréquence d’images élevée, nous autoriseons toute résolution/fréquence d’images disponible sur l’épingle Aperçu. Pour notre appareil hypothétique, l’épingle d’aperçu n’expose jamais plus de 30 images par seconde.
[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:(!)"
Pour la broche capture, nous autorisons toute résolution et toute fréquence d’images de 60 images par seconde ou plus.
[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:(!)"
Bien que l’épingle photo ne soit pas 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:(!)"
En plus du profil de fréquence d’images élevée, nous fournissons également un profil d’enregistrement vidéo standard.
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))"
Une fois de plus, nous n’avons aucune contrainte sur l’épingle Aperçu, car notre caméra hypothétique expose uniquement la préversion de 30 images par seconde avec uniquement les types de médias qui sont garantis pour être simultanés dans les scénarios d’enregistrement vidéo ou de fréquence d’images élevée.
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))"
Toutefois, pour l’épingle capture, nous devons limiter ce nombre à 30 images/s, car nous ne pouvons pas prendre en charge des fréquences d’images plus élevées pour différentes résolutions entre les opérations Aperçu et Capture ou Photo.
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))"
Pour l’épingle photo, nous déclarons que la prise en charge de la séquence de photos n’est pas prise en charge en déclarant que le contrôle Séquence de photos est bloqué pour ce profil.
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))"