Paramètres de session

La fonctionnalité de paramètres de session réduit les délais en permettant aux clients de la caméra 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. Avec cette fonctionnalité, vos implémentations HAL reçoivent les paramètres 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 internes. Pour plus d’informations, consultez Requête de reconfiguration de session .

Exemples et source

Une implémentation des paramètres de session de référence fait déjà partie de CameraHal . Ce HAL utilise l'ancienne API Hal. Le CameraHal binderisé qui implémente l’API HIDL de la caméra doit utiliser l’entrée HIDL sessionParams respective pour accéder à tout nouveau paramètre de session entrant lors de la configuration du flux.

Les clients de la 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 de caméra statique respectives et fournir un sous-ensemble de ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS , qui contient une liste de clés difficiles à appliquer par image et peuvent 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 demande.

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 en interne la caméra. La nouvelle configuration de flux transmise à CameraHal inclut ensuite les valeurs des paramètres de session mises à jour, qui sont utilisées pour configurer plus efficacement le pipeline de caméra.

Personnalisation

Vous pouvez définir des balises dans la liste des paramètres de session disponibles qui est renseignée du côté de 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 certain paramètre fait partie de la liste de 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, ne sont pas adaptés et leur ajout à la liste des paramètres de session pourrait provoquer des échecs du 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 versions ultérieures prend en charge la méthode isReconfigurationRequired , qui fournit un contrôle précis sur la logique de reconfiguration des paramètres de session internes. Grâce à cette méthode, la reconfiguration du flux peut avoir lieu 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 ainsi divers types de personnalisations spécifiques au périphérique.

Cette fonctionnalité est implémentée uniquement dans le service de caméra et dans le HAL de la caméra. Il n’existe pas d’API publiques. Si cette fonctionnalité est implémentée, les clients de la caméra devraient constater des améliorations de performances lorsqu'ils travaillent avec les 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ètres de session.

Si le client modifie la valeur d'un paramètre de session annoncé, l'infrastructure de caméra appelle la méthode isReconfigurationRequired . En fonction des valeurs spécifiques, la HAL décide si une reconfiguration complète du flux est requise. Si le HAL renvoie false , le cadre de la caméra ignore la reconfiguration interne. Si le 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 requête avec de nouveaux paramètres ne soit soumise à HAL, et la requête peut être annulée avant d'être soumise. Par conséquent, la HAL ne doit en aucun cas utiliser cet appel de méthode pour modifier son comportement.

La mise en œuvre de 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 y avoir aucun problème ou retard lors du streaming normal de la caméra.

L’appareil et la mise en œuvre de 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.
  • 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 de reconfiguration réussie requise.
  • METHOD_NOT_SUPPORTED : la caméra 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, le HAL renvoie METHOD_NOT_SUPPORTED ou false . Cela entraîne le comportement par défaut du service de caméra dans lequel 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 .