Partager via


Exemple de déclaration de profil (Caméra Profile V2)

Nous prenons une caméra hypothétique qui prend en charge le nouveau profil high frame rate. Nous allons définir certaines contraintes pour notre appareil.

  1. L’épingle d’aperçu est l’épingle 0. Dans la KSFILTER_DESCRIPTOR déclarée par le pilote de caméra, lorsque le tableau de KSPIN_DESCRIPTOR_EX est défini, le premier KSPIN_DESCRIPTOR_EX est le descripteur de la broche d’aperçu. De même, la broche 1 est capture et la broche 2 est une broche photo.

  2. En raison des limitations matérielles, l’appareil en question ne peut pas gérer la mise à l’échelle au niveau des fréquences d’images 60 fps ou plus. Par conséquent, les flux d’aperçu et de capture doivent avoir la même résolution.

  3. De même, l’appareil ne peut pas gérer la conversion d’espace de couleur pour 60 fps ou version ultérieure.

  4. La caméra est capable de diffuser en continu une vidéo 4K 16x9 à 60 fps. La caméra est également capable de 3840x2880@60fps (vidéo 4:3 à 60 fps).

  5. L’appareil photo ne peut pas fournir d’opérations photo lors de l’exécution à 60 fps.

  6. Nous allons également déclarer un profil d’enregistrement vidéo, limité à 30 fps, mais peut autoriser n’importe quelle combinaison de résolution/sous-types.

  7. Pour la séquence de photos de profil Enregistrement vidéo n’est pas prise en charge (par exemple, les opérations de photo uniques fonctionnent).

Pour la déclaration basée sur INF, chaque filtre de type de média pin doit être affecté à un nom d’entrée de Registre. Ce nom doit être MTF# où # représente une valeur entière.

Étant donné 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 des contraintes.

[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 Interface d’appareil.

[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, 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 de contrainte à 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 taux d’images élevé, l'LRS;LST indique que la résolution sur toutes les broches doit être identique et que le sous-type doit également être le même (aucune mise à l’échelle ni conversion d’espace de couleur n’est autorisée à partir du pipeline de capture).

Pour l’épingle d’aperçu du profil taux d’images élevé, nous autorisez toute résolution/fréquence d’images disponible sur la broche d’aperçu. Pour notre appareil hypothétique, la broche d’aperçu n’expose jamais plus 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:(!)"

Pour la broche de capture, nous allons autoriser toute résolution et toute fréquence d’images 60 fps ou supérieure.

[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:(!)"

Alors que la broche photo n’est 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 taux d’images élevé, 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 la broche d’aperçu, car notre caméra hypothétique expose uniquement la préversion de 30 fps avec uniquement des types multimédias qui sont garantis d’ê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 la broche de capture, nous devons limiter cela à 30 fps de types multimédias, car nous ne pouvons pas prendre en charge des fréquences d’images plus élevées pour différentes résolutions entre l’aperçu et les opérations de capture et de 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 qu’aucune prise en charge de la séquence de photos n’est prise en charge en déclarant le contrôle Séquence de photos comme étant 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))"

spécification du développeur Camera Profile V2