La fonctionnalité de paramètres de session réduit les délais en permettant aux clients d'appareil photo de configurer activement le sous-ensemble de paramètres de requête coûteux, c'est-à-dire les paramètres de session, lors de la phase d'initialisation de la session de capture. Grâce à cette fonctionnalité, vos implémentations HAL reçoivent les paramètres client pendant la phase de configuration du flux au lieu de la première requête de capture et peuvent, en fonction de leurs valeurs, préparer et créer le pipeline interne plus efficacement.
Dans Android 10, vous pouvez améliorer les performances en utilisant la fonctionnalité de requête de reconfiguration de session facultative pour mieux contrôler la logique de reconfiguration des paramètres de session internes. Pour en savoir plus, consultez la section Requête de reconfiguration de session.
Exemples et source
Une implémentation de paramètre de session de référence fait déjà partie de CameraHal. Ce HAL utilise l'ancienne API Hal. Le CameraHal liaisonné qui implémente l'API HIDL de l'appareil photo doit utiliser l'entrée sessionParams HIDL correspondante pour accéder à tous les nouveaux paramètres de session entrants lors de la configuration du flux.
Les clients d'appareil photo peuvent interroger les clés de tous les paramètres de session compatibles en appelant getAvailableSessionKeys()
et éventuellement définir leurs valeurs initiales via setSessionParameters()
.
Implémentation
Votre implémentation de CameraHal doit renseigner ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
dans les métadonnées statiques de la caméra respective et fournir un sous-ensemble de ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
, qui contient une liste de clés difficiles à appliquer par frame et pouvant entraîner des retards inattendus lorsqu'elles sont modifiées pendant la durée de vie de la session de capture.
Il peut s'agir, par exemple, de paramètres qui nécessitent une reconfiguration matérielle fastidieuse ou un changement de pipeline de caméra interne. Le contrôle des paramètres de session peut toujours être exercé dans les requêtes de capture, mais les clients doivent être conscients des retards dans leur application et s'y attendre.
Le framework surveille toutes les requêtes entrantes et, s'il détecte une modification de la valeur d'un paramètre de session, il reconfigure l'appareil photo en interne. La nouvelle configuration de flux transmise à CameraHal inclut ensuite les valeurs mises à jour des paramètres de session, qui permettent de configurer le pipeline de caméra plus efficacement.
Personnalisation
Vous pouvez définir des balises dans la liste des paramètres de session disponibles qui est renseignée côté CameraHal. Cette fonctionnalité n'est pas active si CameraHal laisse la liste des paramètres de session disponibles vide.
Validation
CTS inclut les nouveaux cas suivants pour tester les paramètres de session:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
En général, une fois qu'un paramètre fait partie de la liste des clés de session, sa valeur actuelle est incluse dans les paramètres de session transmis lors de la configuration du flux au niveau de la couche HAL.
Les paramètres de session doivent être sélectionnés avec soin. Les valeurs ne doivent pas changer fréquemment, voire pas du tout, entre les configurations de flux. Les paramètres qui changent fréquemment, tels que l'intent de capture, ne sont pas adaptés. Les ajouter à la liste des paramètres de session peut entraîner des échecs CTS en raison d'une reconfiguration interne excessive.
Requête de reconfiguration de la session
Android 10 introduit une fonctionnalité de requête de reconfiguration de session facultative pour améliorer les performances, car les reconfigurations de flux internes résultant de modifications de la valeur des paramètres de session peuvent réduire les performances. Pour résoudre ce problème, la version 3.5 et ultérieure de HIDL ICameraDeviceSession
est compatible avec la méthode isReconfigurationRequired
, qui offre un contrôle précis sur la logique de reconfiguration des paramètres de session internes. Avec cette méthode, la reconfiguration des flux peut se produire précisément lorsque cela est nécessaire.
Les arguments de isReconfigurationRequired
fournissent les informations requises sur chaque modification des paramètres de session en attente, ce qui permet différents types de personnalisations spécifiques à l'appareil.
Cette fonctionnalité n'est implémentée que dans le service de la caméra et le HAL de la caméra. Il n'existe aucune API publique. Si cette fonctionnalité est implémentée, les clients de caméra devraient constater une amélioration des performances lorsqu'ils travaillent avec les paramètres de session.
Implémentation
Pour prendre en charge les requêtes de reconfiguration de session, vous devez implémenter la méthode isReconfigurationRequired
pour vérifier si une reconfiguration complète du flux est requise pour les nouvelles valeurs de paramètre de session.
Si le client modifie la valeur de l'un des paramètres de session annoncés, le framework de la caméra appelle la méthode isReconfigurationRequired
. En fonction des valeurs spécifiques, le HAL décide si une reconfiguration complète du flux est requise. Si le HAL renvoie false
, le framework de la caméra ignore la reconfiguration interne. Si le HAL renvoie true
, le framework reconfigure les flux et transmet les nouvelles valeurs de paramètre de session en conséquence.
La méthode isReconfigurationRequired
peut être appelée par le framework un certain temps avant qu'une requête avec de nouveaux paramètres ne soit envoyée au HAL, et la requête peut être annulée avant d'être envoyée. Par conséquent, le HAL ne doit pas utiliser cet appel de méthode pour modifier son comportement de quelque manière que ce soit.
L'implémentation du HAL doit répondre aux exigences suivantes:
- Le framework doit pouvoir appeler la méthode
isReconfigurationRequired
à tout moment après la configuration de la session active. - Les performances des requêtes d'appareil photo en attente ne doivent pas être affectées. En particulier, il ne doit pas y avoir de glitchs ni de retards lors du streaming normal de la caméra.
L'implémentation de l'appareil et de l'HAL doit répondre aux exigences de performances suivantes:
- Les paramètres matériels et logiciels de la caméra ne doivent pas être modifiés.
- Les performances de l'appareil photo ne doivent pas être affectées de manière visible par l'utilisateur.
La méthode isReconfigurationRequired
utilise les arguments suivants:
oldSessionParams
: paramètres de session de la session précédente. Il s'agit généralement des paramètres de session existants.newSessionParams
: nouveaux paramètres de session définis par le client.
Les codes d'état de retour attendus sont les suivants:
OK
: requête reconfiguration requise.METHOD_NOT_SUPPORTED
: l'appareil photo n'est pas compatible avec la requête de reconfiguration.INTERNAL_ERROR
: la requête de reconfiguration ne peut pas être effectuée en raison d'une erreur interne.
Les valeurs renvoyées sont les suivantes:
true
: vous devez reconfigurer le flux.false
: la reconfiguration du flux n'est pas nécessaire.
Pour ignorer une requête de reconfiguration de session, le HAL renvoie METHOD_NOT_SUPPORTED
ou false
. Le comportement par défaut du service de caméra est alors obtenu, la reconfiguration du flux étant déclenchée à chaque modification de paramètre de session.
Validation
La fonctionnalité de requête de reconfiguration de session peut être validée à l'aide du cas de test VTS dans CameraHidlTest#configureStreamsWithSessionParameters
.