Paramètres de session

La fonctionnalité de paramètres de session réduit les délais en permettant aux clients de l'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 du client lors de la phase de configuration du flux au lieu de la première requête de capture. Elles peuvent ainsi préparer et créer le pipeline interne plus efficacement, en fonction de leurs valeurs.

Dans Android 10, vous pouvez améliorer les performances en utilisant la fonctionnalité facultative de requête de reconfiguration de session pour mieux contrôler la logique interne de reconfiguration des paramètres de session. Pour en savoir plus, consultez Requête de reconfiguration de session.

Exemples et source

Une implémentation du paramètre de session de référence fait déjà partie de CameraHal. Cette HAL utilise l'ancienne API HAL. Le CameraHal binderisé qui implémente l'API HIDL de l'appareil photo doit utiliser l'entrée sessionParams HIDL respective 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 définir leurs valeurs initiales via setSessionParameters().

Implémentation

Votre implémentation CameraHal doit remplir ANDROID_REQUEST_AVAILABLE_SESSION_KEYS dans les métadonnées statiques de la caméra correspondantes 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 ou une modification du pipeline de caméras internes, ce qui prend du temps. Il est toujours possible de contrôler les paramètres de session 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 la caméra en interne. La nouvelle configuration du flux transmise à CameraHal inclut ensuite les valeurs de paramètres de session mises à jour, qui sont utilisées pour configurer le pipeline de caméras de manière plus efficace.

Personnalisation

Vous pouvez définir des tags 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 :

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, comme l'intention de capture, ne sont pas adaptés. Les ajouter à la liste des paramètres de session pourrait entraîner des échecs CTS en raison d'une reconfiguration interne excessive.

Requête de reconfiguration de 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, HIDL ICameraDeviceSession version 3.5 et ultérieure est compatible avec la méthode isReconfigurationRequired, qui permet de contrôler précisément la logique de reconfiguration des paramètres de session internes. Cette méthode permet de reconfigurer le flux précisément au moment où cela est nécessaire.

Les arguments de isReconfigurationRequired fournissent les informations requises sur chaque modification de paramètre 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 caméras et la HAL de caméras. Il n'existe aucune API publique. Si cette fonctionnalité est implémentée, les clients de la caméra devraient constater une amélioration des performances lorsqu'ils travaillent avec des 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 d'un paramètre de session annoncé, le framework de l'appareil photo appelle la méthode isReconfigurationRequired. En fonction des valeurs spécifiques, la HAL décide si une reconfiguration complète du flux est nécessaire. Si la HAL renvoie false, le framework de l'appareil photo ignore la reconfiguration interne. Si la HAL renvoie true, le framework reconfigure les flux et transmet les nouvelles valeurs des paramètres de session en conséquence.

Le framework peut appeler la méthode isReconfigurationRequired quelque temps avant qu'une requête avec de nouveaux paramètres ne soit envoyée au HAL. La requête peut être annulée avant d'être envoyée. Par conséquent, la 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.
  • Les performances des demandes de caméras en attente ne doivent pas être affectées. En particulier, il ne doit y avoir aucun problème ni aucun retard lors de la diffusion normale de la caméra.

L'appareil et l'implémentation HAL doivent 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 la caméra ne doivent pas être affectées de manière visible pour 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.

Voici les codes d'état de retour attendus :

  • OK : requête de reconfiguration réussie.
  • 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 traitée en raison d'une erreur interne.

Les valeurs renvoyées sont les suivantes :

  • 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, le HAL renvoie METHOD_NOT_SUPPORTED ou false. Cela entraîne le comportement par défaut du service de caméras, où la reconfiguration du flux est déclenchée à chaque modification du 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.