Paramètres de session

La fonctionnalité des paramètres de session réduit les retards en permettant aux caméras clientes de configurer activement le sous-ensemble de paramètres de demande coûteux, c'est-à-dire les paramètres de session, dans le cadre de la phase d'initialisation de la session de capture. Grâce à cette fonctionnalité, vos implémentations HAL reçoivent les paramètres du client lors de 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 construire le pipeline interne plus efficacement.

Dans Android 10, vous pouvez améliorer les performances en utilisant la fonctionnalité facultative de requête de reconfiguration de session pour plus de contrôle sur la logique de reconfiguration des paramètres de session interne. Pour plus d'informations, consultez 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 lié qui implémente l'API HIDL de la caméra doit utiliser l'entrée HIDL sessionParams respective pour accéder à tous les nouveaux paramètres de session entrants lors de la configuration du flux.

Les clients de caméra peuvent interroger les clés de tous les paramètres de session pris en charge en appelant getAvailableSessionKeys() et éventuellement définir leurs valeurs initiales via setSessionParameters() .

Mise en œuvre

Votre implémentation CameraHal doit remplir ANDROID_REQUEST_AVAILABLE_SESSION_KEYS dans les métadonnées statiques respectives de la caméra et fournir un sous-ensemble de ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS , qui contient une liste de clés difficiles à appliquer par image et pouvant entraîner des retards inattendus lorsqu'elles sont modifiées pendant la durée de vie de la session de capture.

Les exemples typiques incluent les 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 demandes de capture, mais les clients doivent être conscients et s'attendre à des retards dans leur application.

Le framework surveille toutes les requêtes entrantes et s'il détecte un changement dans la valeur d'un paramètre de session, il reconfigure la caméra en interne. La nouvelle configuration de flux transmise à CameraHal inclut ensuite les valeurs de paramètre de session mises à jour, qui sont utilisées pour configurer plus efficacement le pipeline de la caméra.

Personnalisation

Vous pouvez définir des balises dans la liste des paramètres de session disponibles qui est remplie du côté CameraHal. Cette fonctionnalité n'est pas active si CameraHal laisse vide la liste des paramètres de session disponibles.

Validation

CTS inclut les nouveaux cas suivants pour tester les paramètres de session :

En général, après qu'un certain 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 soigneusement sélectionnés. 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'intention de capture, sont mal adaptés et leur ajout à 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 session

Android 10 introduit une fonctionnalité facultative de requête de reconfiguration de session 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, HIDL ICameraDeviceSession version 3.5 et supérieure prend en charge la méthode isReconfigurationRequired , qui fournit un contrôle précis sur la logique de reconfiguration des paramètres de session interne. En utilisant cette méthode, la reconfiguration du flux peut se produire précisément lorsque cela est nécessaire.

Les arguments de isReconfigurationRequired fournissent les informations requises sur chaque modification de paramètre de session en attente, permettant différents types de personnalisations spécifiques à l'appareil.

Cette fonctionnalité est implémentée uniquement dans le service de caméra et la caméra HAL. Il n'y a pas d'API publiques. Si cette fonctionnalité est implémentée, les clients de la caméra devraient voir des améliorations de performances lors de l'utilisation des paramètres de session.

Mise en œuvre

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 d'un paramètre de session annoncé, la structure de la caméra appelle la méthode isReconfigurationRequired . En fonction des valeurs spécifiques, la couche HAL décide si une reconfiguration complète du flux est nécessaire. Si HAL renvoie false , la structure de la caméra ignore la reconfiguration interne. Si HAL renvoie true , le framework reconfigure les flux et transmet les nouvelles valeurs des paramètres de session en conséquence.

La méthode isReconfigurationRequired peut être appelée par le framework quelque temps avant qu'une demande avec de nouveaux paramètres ne soit soumise à HAL, et la demande peut être annulée avant d'être soumise. Par conséquent, HAL ne doit pas utiliser cet appel de méthode pour modifier son comportement de quelque manière que ce soit.

L'implémentation 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.
  • Il ne doit y avoir aucun impact sur les performances des demandes de caméra en attente. En particulier, il ne doit pas y avoir de problèmes ou de retards lors de la diffusion normale de la caméra.

L'implémentation de l'appareil et de 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.
  • Il ne doit y avoir aucun impact visible par l'utilisateur sur les performances de la caméra.

La méthode isReconfigurationRequired prend les arguments suivants :

  • oldSessionParams : paramètres de session de la session précédente. Généralement, les paramètres de session existants.
  • newSessionParams : nouveaux paramètres de session définis par le client.

Les codes d'état de retour attendus sont :

  • OK : Requête requise pour la reconfiguration réussie.
  • METHOD_NOT_SUPPORTED : l'appareil photo ne prend pas en charge la requête de reconfiguration.
  • INTERNAL_ERROR : la requête de reconfiguration ne peut pas se terminer en raison d'une erreur interne.

Les valeurs de retour sont :

  • true : la reconfiguration du flux est requise.
  • false : la reconfiguration du flux n'est pas requise.

Pour ignorer une requête de reconfiguration de session, HAL renvoie METHOD_NOT_SUPPORTED ou false . Cela se traduit par le comportement par défaut du service de caméra où la reconfiguration du flux est déclenchée à chaque changement de paramètre de session.

Validation

La fonctionnalité de requête de reconfiguration de session peut être validée à l'aide du scénario de test VTS dans CameraHidlTest#configureStreamsWithSessionParameters .