La fonctionnalité des 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 requête coûteux, c'est-à-dire les paramètres lors de la phase d'initialisation de la session de capture. Grâce à cette , vos implémentations HAL reçoivent les paramètres client pendant le de configuration de flux au lieu de la première requête de capture. en fonction de leurs valeurs, préparer et construire le pipeline interne efficacement.
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 de reconfiguration des paramètres de session interne. Pour en savoir plus, consultez Requête de reconfiguration de la session.
Exemples et source
L'implémentation d'un paramètre de session de référence fait déjà partie CameraHal Cette HAL utilise l'ancienne API Hal. La fonction liée CameraHal qui implémente l'API HIDL de l'appareil photo doit utiliser le HIDL correspondant Paramètres de session pour accéder aux nouveaux paramètres de session entrante lors de la configuration du flux.
Les clients de l'appareil photo peuvent interroger les clés de tous les paramètres de session compatibles en appelant
getAvailableSessionKeys()
avant de définir leurs valeurs initiales
setSessionParameters()
Implémentation
Votre implémentation de CameraHal doit renseigner le champ
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
dans les métadonnées statiques respectives de la caméra et fournissent un sous-ensemble des
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
,
qui contient une liste de clés difficiles à appliquer par frame et qui peuvent
entraîner des retards inattendus en cas de modification
pendant la durée de vie de la session de capture.
Il peut s'agir, par exemple, de paramètres nécessitant un processus matériel une reconfiguration ou un changement du pipeline de caméra interne. Contrôle de la session peuvent toujours être utilisés dans les demandes de capture, mais les clients doivent savoir et s'attendent à des retards dans leur application.
Le framework surveille toutes les requêtes entrantes et s'il détecte une modification au niveau du d'un paramètre de session, il reconfigure en interne la caméra. Les nouvelles la configuration de flux transmise à CameraHal, puis inclut la session mise à jour qui servent à configurer davantage le pipeline de la caméra efficacement.
Personnalisation
Vous pouvez définir des balises dans la liste des paramètres de session disponibles qui est renseignée du côté CameraHal. Cette fonctionnalité n'est pas active si CameraHal quitte le la liste des paramètres de session disponible est vide.
Validation
CTS inclut les nouveaux cas suivants pour les paramètres de session de test:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
En général, lorsqu'un paramètre figure dans la liste des clés de session, la valeur actuelle est incluse dans les paramètres de session transmis lors 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, le cas échéant, entre les configurations de flux. Paramètres qui changent ne conviennent pas, comme l'intention de capture, et les ajoutent la liste des paramètres de session peut entraîner des échecs CTS en raison d'un nombre excessif d'instances internes reconfiguration.
Requête de reconfiguration de session
Android 10 introduit une session facultative
de reconfiguration de requêtes
améliorer les performances à mesure que les reconfigurations des flux internes
les modifications de la valeur des paramètres peuvent réduire les performances. Pour résoudre ce problème,
HIDL
ICameraDeviceSession
version 3.5 ou ultérieure est compatible avec
isReconfigurationRequired
, qui permet de contrôler précisément le paramètre de session interne
logique de reconfiguration. Cette méthode permet de reconfigurer le flux
avec précision quand cela est nécessaire.
Les arguments de isReconfigurationRequired
fournir les informations requises sur chaque paramètre de session en attente
ce qui permet d'effectuer divers types de personnalisations spécifiques à chaque appareil.
Cette fonctionnalité n'est implémentée que dans le service de la caméra et dans le HAL de la caméra. Il y ne sont pas des API publiques. Si cette fonctionnalité est implémentée, les clients de l'appareil photo doivent vous pouvez constater une amélioration des performances lorsque vous utilisez des paramètres de session.
Implémentation
Pour accepter les requêtes de reconfiguration de session, vous devez implémenter la
isReconfigurationRequired
pour vérifier si une reconfiguration complète des flux est requise
les valeurs des paramètres de session.
Si le client modifie la valeur d'un paramètre de session annoncée, l'appareil photo
framework appelle isReconfigurationRequired
. En fonction des valeurs spécifiques, le HAL détermine si une configuration
reconfiguration du flux est requise. Si le HAL renvoie false
, la caméra
ignore la reconfiguration interne. Si le HAL renvoie true
, le
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 comportant de nouveaux paramètres ne soit envoyée au HAL, et que la requête
peut être annulé avant son envoi. Le HAL ne doit donc pas utiliser
pour modifier son comportement de quelque façon que ce soit.
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. - Cela ne doit pas avoir d'impact sur les performances des demandes d'appareil photo en attente. Dans En particulier, aucun problème ni retard ne doit se produire lorsque la caméra est en mode normal le flux de données.
L'implémentation de l'appareil et de l'HAL doit respecter les performances suivantes configuration requise:
- Les paramètres du matériel et des caméras ne doivent pas être modifiés.
- L'utilisateur ne doit pas voir d'impact sur les performances de la caméra.
isReconfigurationRequired
utilise les arguments suivants:
oldSessionParams
: paramètres 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 reconfiguration requise.METHOD_NOT_SUPPORTED
: l'appareil photo n'est pas compatible avec le de reconfiguration.INTERNAL_ERROR
: la requête de reconfiguration ne peut pas être terminé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 service d'appareil photo par défaut est alors rétabli
comportement où la reconfiguration du flux est déclenchée pour chaque paramètre de session
le changement.
Validation
La fonctionnalité de requête de reconfiguration de session peut être validée à l'aide du test VTS
cas dans
CameraHidlTest#configureStreamsWithSessionParameters