Modes 3A et transition d'état

Cette page décrit les modes 3A et les machines d'état d'un appareil Android. L'interface HAL de la caméra, qui définit les machines à états à un niveau élevé, permet à l'implémentation HAL et au framework Android de communiquer les états 3A actuels et de déclencher des événements 3A. L'implémentation HAL est responsable des algorithmes 3A qui contrôlent les paramètres du mode 3A et les transitions d'état.

Lorsque l'appareil est ouvert, tous les états 3A individuels doivent être STATE_INACTIVE. La configuration du flux ne réinitialise pas 3A. Par exemple, le focus verrouillé doit être maintenu pendant l'appel configure().

Pour déclencher une action 3A, il vous suffit de définir l'entrée de déclencheur appropriée dans les paramètres de la requête suivante pour indiquer le début du déclencheur. Par exemple, le déclencheur du démarrage d'une analyse de mise au point automatique consiste à définir l'entrée ANDROID_CONTROL_AF_TRIGGER sur ANDROID_CONTROL_AF_TRIGGER_START pour une requête. L'annulation d'une analyse de mise au point automatique est déclenchée en définissant ANDROID_CONTROL_AF_TRIGGER sur ANDROID_CONTRL_AF_TRIGGER_CANCEL. Sinon, l'entrée n'existera pas ou sera définie sur ANDROID_CONTROL_AF_TRIGGER_IDLE. Chaque requête avec une entrée de déclencheur définie sur une valeur autre qu'IDLE sera traitée comme un événement de déclenchement indépendant.

Au niveau supérieur, 3A est contrôlé par le paramètre ANDROID_CONTROL_MODE. Il sélectionne entre l'absence de 3A (ANDROID_CONTROL_MODE_OFF), le mode AUTO normal (ANDROID_CONTROL_MODE_AUTO) et l'utilisation du paramètre de mode scène (ANDROID_CONTROL_USE_SCENE_MODE):

  • En mode "OFF", chacun des modes de mise au point automatique (AF), d'exposition automatique (AE) et de balance des blancs automatique (AWB) est effectivement désactivé, et aucune des commandes de capture ne peut être remplacée par les routines 3A.
  • En mode AUTO, les modes AF, AE et AWB exécutent tous leurs propres algorithmes indépendants et disposent de leurs propres entrées de métadonnées de mode, d'état et de déclencheur, comme indiqué dans la section suivante.
  • Dans USE_SCENE_MODE, la valeur de l'entrée ANDROID_CONTROL_SCENE_MODE doit être utilisée pour déterminer le comportement des routines 3A. Dans les SCENE_MODE autres que FACE_PRIORITY, le HAL doit remplacer les valeurs d'ANDROID_CONTROL_AE/AWB/AF_MODE par le mode qu'il préfère pour le SCENE_MODE sélectionné. Par exemple, le HAL peut préférer SCENE_MODE_NIGHT au mode AF CONTINUOUS_FOCUS. Toute sélection utilisateur d'AE/AWB/AF_MODE lorsque la scène doit être ignorée pour ces modes de scène.
  • Pour SCENE_MODE_FACE_PRIORITY, les commandes AE/AWB/AFMODE fonctionnent comme dans ANDROID_CONTROL_MODE_AUTO, mais les routines 3A doivent privilégier la mesure et la mise au point sur les visages détectés dans la scène.

Paramètres de mise au point automatique et entrées de résultats

Principales entrées de métadonnées
ANDROID_CONTROL_AF_MODE Commande permettant de sélectionner le mode de mise au point automatique actuel. Défini par le framework dans les paramètres de la requête.
AF_MODE_OFF La mise au point automatique est désactivée. Le framework/l'application contrôle directement la position de l'objectif.
AF_MODE_AUTO Mise au point automatique en un seul balayage. Aucun mouvement de l'objectif, sauf si la mise au point automatique est déclenchée.
AF_MODE_MACRO Mise au point automatique en un seul balayage à courte distance. Aucun mouvement de l'objectif, sauf si la mise au point automatique est déclenchée
AF_MODE_CONTINUOUS_VIDEO Mise au point fluide et continue pour l'enregistrement vidéo Le déclenchement verrouille immédiatement le focus sur la position actuelle. L'annulation reprend la mise au point continue.
AF_MODE_CONTINUOUS_PICTURE Mise au point continue rapide pour une capture d'image sans délai de déclenchement. Le déclenchement verrouille la sélection une fois que le balayage actuellement actif est terminé. L'annulation reprend la mise au point continue.
AF_MODE_EDOF Mise au point avancée avec une profondeur de champ étendue. Il n'y a pas de balayage de mise au point automatique. Le déclenchement ou l'annulation d'un balayage n'a donc aucun effet. Le HAL met automatiquement au point les images.
ANDROID_CONTROL_AF_STATE Métadonnées dynamiques décrivant l'état actuel de l'algorithme AF, signalé par le HAL dans les métadonnées de résultat.
AF_STATE_INACTIVE Aucune focalisation n'a été effectuée ou l'algorithme a été réinitialisé. Lens ne se déplace pas. Toujours l'état pour MODE_OFF ou MODE_EDOF. Lorsque l'appareil est ouvert, il doit démarrer dans cet état.
AF_STATE_PASSIVE_SCAN Un algorithme de mise au point continue recherche actuellement une mise au point correcte. L'objectif est en mouvement.
AF_STATE_PASSIVE_FOCUSED Un algorithme de mise au point continue pense qu'il est bien mis au point. L'objectif ne bouge pas. Le HAL peut quitter cet état de manière spontanée.
AF_STATE_PASSIVE_UNFOCUSED Un algorithme de mise au point continue pense qu'il n'est pas bien mis au point. L'objectif ne bouge pas. Le HAL peut quitter cet état de manière spontanée.
AF_STATE_ACTIVE_SCAN Une analyse déclenchée par l'utilisateur est en cours.
AF_STATE_FOCUSED_LOCKED L'algorithme de ciblage par affinité pense qu'il est ciblé. L'objectif ne bouge pas.
AF_STATE_NOT_FOCUSED_LOCKED L'algorithme de mise au point automatique n'a pas pu effectuer la mise au point. L'objectif ne bouge pas.
ANDROID_CONTROL_AF_TRIGGER Commande permettant de démarrer une analyse de mise au point automatique, dont la signification dépend du mode et de l'état. Défini par le framework dans les paramètres de la requête.
AF_TRIGGER_IDLE Aucun déclencheur actuel.
AF_TRIGGER_START Déclencher le début de l'analyse AF. L'effet dépend du mode et de l'état.
AF_TRIGGER_CANCEL Annulez l'analyse AF en cours, le cas échéant, et rétablissez l'algorithme par défaut.
Entrées de métadonnées supplémentaires
ANDROID_CONTROL_AF_REGIONS Commande permettant de sélectionner les régions du champ de vision (champ de vision) à utiliser pour déterminer une bonne mise au point. Cela s'applique à tous les modes AF qui effectuent une analyse de mise au point. Défini par le framework dans les paramètres de la requête.

Paramètres d'exposition automatique et entrées de résultats

Principales entrées de métadonnées
ANDROID_CONTROL_AE_MODE Commande permettant de sélectionner le mode d'exposition automatique actuel. Défini par le framework dans les paramètres de la requête.
AE_MODE_OFF L'exposition automatique est désactivée. L'utilisateur contrôle l'exposition, le gain, la durée des images et le flash.
AE_MODE_ON Exposition automatique standard, avec le contrôle du flash désactivé. L'utilisateur peut définir le flash sur "Fire" (Déclencher) ou sur "Torch" (Lumière de poche).
AE_MODE_ON_AUTO_FLASH Exposition automatique standard, avec le flash activé à la discrétion du HAL pour la précapture et la capture d'image. Commande utilisateur du flash désactivée.
AE_MODE_ON_ALWAYS_FLASH Exposition automatique standard, avec le flash toujours déclenché pour la capture et à la discrétion du HAL pour la précapture. Commande utilisateur du flash désactivée.
AE_MODE_ON_AUTO_FLASH_REDEYE Exposition automatique standard, avec le flash activé à la discrétion du HAL pour la précapture et la capture d'image. Utilisez un éclair à la fin de la séquence de précapture pour réduire l'effet d'œil rouge sur la photo finale. Commande utilisateur du flash désactivée.
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY L'amplification de la luminosité ajuste automatiquement la luminosité du flux d'aperçu en cas de faible luminosité. Cela peut entraîner un flou de mouvement et un bruit accrus dans des conditions d'éclairage faibles. Les fabricants d'appareils doivent s'assurer que la fréquence d'images ne descend pas en dessous de 10 images par seconde.
ANDROID_CONTROL_AE_STATE Métadonnées dynamiques décrivant l'état actuel de l'algorithme AE, signalé par le HAL dans les métadonnées de résultat.
AE_STATE_INACTIVE État initial de l'AE après le changement de mode. Lorsque l'appareil est ouvert, il doit démarrer dans cet état.
AE_STATE_SEARCHING La convergence de l'AE vers une bonne valeur n'est pas atteinte et les paramètres d'exposition sont ajustés.
AE_STATE_CONVERGED AE a trouvé de bonnes valeurs d'exposition pour la scène actuelle, et les paramètres d'exposition ne changent pas. HAL peut quitter spontanément cet état pour rechercher une meilleure solution.
AE_STATE_LOCKED L'exposition automatique a été verrouillée à l'aide du contrôle AE_LOCK. Les valeurs d'exposition ne changent pas.
AE_STATE_FLASH_REQUIRED Le HAL a convergé l'exposition, mais estime que le flash est nécessaire pour obtenir une image suffisamment lumineuse. Permet de déterminer si un frame à retard de l'obturateur nul peut être utilisé.
AE_STATE_PRECAPTURE Le HAL est au milieu d'une séquence de précapture. Selon le mode AE, ce mode peut impliquer de déclencher le flash pour la mesure ou une rafale de flashs pour réduire les yeux rouges.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER Commande permettant de démarrer une séquence de mesure avant de capturer une image de haute qualité. Défini par le framework dans les paramètres de la requête.
PRECAPTURE_TRIGGER_IDLE Aucun déclencheur actuel.
PRECAPTURE_TRIGGER_START Démarrez une séquence de précapture. Le HAL doit utiliser les requêtes suivantes pour mesurer une bonne exposition/balance des blancs pour une capture haute résolution à venir.
Entrées de métadonnées supplémentaires
ANDROID_CONTROL_AE_LOCK Contrôle pour verrouiller les commandes AE sur leurs valeurs actuelles.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Commande permettant d'ajuster le point de luminosité cible de l'algorithme AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Commande permettant de sélectionner la plage de fréquence d'images cible pour l'algorithme AE. La routine AE ne peut pas modifier la fréquence d'images pour qu'elle dépasse ces limites.
ANDROID_CONTROL_AE_REGIONS Commande permettant de sélectionner les régions du champ de vision à utiliser pour déterminer les bons niveaux d'exposition. Cela s'applique à tous les modes AE, à l'exception de "OFF".

Paramètres de balance des blancs automatique et entrées de résultats

Principales entrées de métadonnées
ANDROID_CONTROL_AWB_MODE Commande permettant de sélectionner le mode de balance des blancs actuel.
AWB_MODE_OFF Le balance des blancs automatique est désactivé. L'utilisateur contrôle la matrice de couleurs.
AWB_MODE_AUTO La balance des blancs automatique est activée. 3A contrôle la transformation des couleurs, éventuellement à l'aide de transformations plus complexes qu'une simple matrice.
AWB_MODE_INCANDESCENT Paramètres de balance des blancs fixes adaptés à l'éclairage incandescent (tungstène) intérieur, environ 2 700 K.
AWB_MODE_FLUORESCENT Paramètres de balance des blancs fixes adaptés à l'éclairage fluorescent, environ 5 000 K.
AWB_MODE_WARM_FLUORESCENT Paramètres de balance des blancs fixes adaptés à l'éclairage fluorescent, environ 3 000 K.
AWB_MODE_DAYLIGHT Paramètres de balance des blancs fixes adaptés à la lumière du jour, environ 5 500 K.
AWB_MODE_CLOUDY_DAYLIGHT Paramètres de balance des blancs fixes adaptés à la lumière du jour nuageuse, d'environ 6 500 K.
AWB_MODE_TWILIGHT Paramètres de balance des blancs fixes adaptés aux levers et couchers de soleil, environ 15 000 K.
AWB_MODE_SHADE Paramètres de balance des blancs fixes adaptés aux zones éclairées indirectement par le soleil, environ 7 500 K.
ANDROID_CONTROL_AWB_STATE Métadonnées dynamiques décrivant l'état actuel de l'algorithme AWB, signalé par le HAL dans les métadonnées de résultat.
AWB_STATE_INACTIVE État initial de l'AWB après le changement de mode. Lorsque l'appareil est ouvert, il doit démarrer dans cet état.
AWB_STATE_SEARCHING L'AWB n'a pas convergé vers une bonne valeur et modifie les paramètres d'ajustement des couleurs.
AWB_STATE_CONVERGED L'AWB a trouvé de bonnes valeurs d'ajustement des couleurs pour la scène actuelle, et les paramètres ne changent pas. HAL peut quitter spontanément cet état pour rechercher une meilleure solution.
AWB_STATE_LOCKED L'AWB a été verrouillé avec le contrôle AWB_LOCK. Les valeurs d'ajustement des couleurs ne changent pas.
Entrées de métadonnées supplémentaires
ANDROID_CONTROL_AWB_LOCK Contrôle permettant de verrouiller les ajustements de couleur de l'AWB sur leurs valeurs actuelles.
ANDROID_CONTROL_AWB_REGIONS Commande permettant de sélectionner les régions du champ de vision à utiliser pour déterminer une bonne balance des couleurs. Cela ne s'applique qu'au mode Balance des blancs automatique.

Remarques générales sur les transitions de machine à états

Le passage d'un mode AF, AE ou AWB à un autre réinitialise toujours l'état de l'algorithme sur INACTIVE. De même, le passage de CONTROL_MODE à CONTROL_SCENE_MODE si CONTROL_MODE == USE_SCENE_MODE réinitialise tous les états de l'algorithme sur INACTIVE.

Les tableaux ci-dessous sont par mode.

Machines à états AF

mode = AF_MODE_OFF ou AF_MODE_EDOF
État Cause de la transformation Nouvel état Notes
INACTIF AF est désactivé
mode = AF_MODE_AUTO ou AF_MODE_MACRO
État Cause de la transformation Nouvel état Notes
INACTIF AF_TRIGGER ACTIVE_SCAN

Démarrer le balayage AF

L'objectif est en mouvement

ACTIVE_SCAN Balayage AF terminé FOCUSED_LOCKED

Si l'AF réussit

Lens est désormais verrouillé

ACTIVE_SCAN Balayage AF terminé NOT_FOCUSED_LOCKED

Si l'AF réussit

Lens est désormais verrouillé

ACTIVE_SCAN AF_CANCEL INACTIF

Annuler/Réinitialiser la mise au point automatique

Lens est désormais verrouillé

FOCUSED_LOCKED AF_CANCEL INACTIF Annuler/Réinitialiser la mise au point automatique
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Lancer une nouvelle analyse

L'objectif est en mouvement

NOT_FOCUSED_LOCKED AF_CANCEL INACTIF Annuler/Réinitialiser la mise au point automatique
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Lancer une nouvelle analyse

L'objectif est en mouvement

Tous les États Changement de mode INACTIF
mode = AF_MODE_CONTINUOUS_VIDEO
État Cause de la transformation Nouvel état Notes
INACTIF HAL lance une nouvelle analyse PASSIVE_SCAN

Démarrer le balayage AF

L'objectif est en mouvement

INACTIF AF_TRIGGER NOT_FOCUSED_LOCKED

Requête d'état de l'AF

Lens est désormais verrouillé

PASSIVE_SCAN HAL termine l'analyse en cours PASSIVE_FOCUSED

Arrêter la recherche AF

Lens est désormais verrouillé

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformation immédiate si la mise au point est correcte

Lens est désormais verrouillé

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformation immédiate si le focus est incorrect

Lens est désormais verrouillé

PASSIVE_SCAN AF_CANCEL INACTIF

Réinitialiser la position de l'objectif

Lens est désormais verrouillé

PASSIVE_FOCUSED HAL lance une nouvelle analyse PASSIVE_SCAN

Démarrer l'analyse de mise au point automatique

L'objectif est en mouvement

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformation immédiate si la mise au point est correcte

Lens est désormais verrouillé

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED Transformation immédiate si le focus est incorrect

Lens est désormais verrouillé

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Aucun effet
FOCUSED_LOCKED AF_CANCEL INACTIF Redémarrer l'analyse AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Aucun effet
NOT_FOCUSED_LOCKED AF_CANCEL INACTIF Redémarrer l'analyse AF
mode = AF_MODE_CONTINUOUS_PICTURE
État Cause de la transformation Nouvel état Notes
INACTIF HAL lance une nouvelle analyse PASSIVE_SCAN

Démarrer l'analyse de mise au point automatique

L'objectif est en mouvement

INACTIF AF_TRIGGER NOT_FOCUSED_LOCKED

Requête d'état de l'AF

Lens est désormais verrouillé

PASSIVE_SCAN HAL termine l'analyse en cours PASSIVE_FOCUSED Arrêter la recherche AF

Lens est désormais verrouillé

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformation éventuelle une fois la concentration optimale

Lens est désormais verrouillé

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformation éventuelle si le focus ne peut pas être défini

Lens est désormais verrouillé

PASSIVE_SCAN AF_CANCEL INACTIF

Réinitialiser la position de l'objectif

Lens est désormais verrouillé

PASSIVE_FOCUSED HAL lance une nouvelle analyse PASSIVE_SCAN

Démarrer l'analyse de mise au point automatique

L'objectif est en mouvement

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformation immédiate si la mise au point est correcte

Lens est désormais verrouillé

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

Transformation immédiate si le focus est incorrect

Lens est désormais verrouillé

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Aucun effet
FOCUSED_LOCKED AF_CANCEL INACTIF Redémarrer l'analyse AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Aucun effet
NOT_FOCUSED_LOCKED AF_CANCEL INACTIF Redémarrer l'analyse AF

Machines d'état AE et AWB

Les machines d'état AE et AWB sont presque identiques. L'AE dispose d'états FLASH_REQUIRED et PRECAPTURE supplémentaires. Par conséquent, les lignes ci-dessous qui font référence à ces deux états doivent être ignorées pour la machine à états AWB.

mode = AE_MODE_OFF / Mode AWB non AUTO
État Cause de la transformation Nouvel état Notes
INACTIF AE/AWB désactivé
mode = AE_MODE_ON_* / AWB_MODE_AUTO
État Cause de la transformation Nouvel état Notes
INACTIF HAL lance l'analyse AE/AWB RECHERCHE EN COURS…
INACTIF AE/AWB_LOCK activé VERROUILLÉ Valeurs verrouillées
RECHERCHE EN COURS… HAL termine l'analyse AE/AWB CONVERGED Bonnes valeurs, ne changeant pas
RECHERCHE EN COURS… HAL termine l'analyse des erreurs d'exécution FLASH_REQUIRED Convergent, mais trop sombre sans flash
RECHERCHE EN COURS… AE/AWB_LOCK activé VERROUILLÉ Valeurs verrouillées
CONVERGED HAL lance l'analyse AE/AWB RECHERCHE EN COURS… Valeurs verrouillées
CONVERGED AE/AWB_LOCK activé VERROUILLÉ Valeurs verrouillées
FLASH_REQUIRED HAL lance l'analyse AE/AWB RECHERCHE EN COURS… Valeurs verrouillées
FLASH_REQUIRED AE/AWB_LOCK activé VERROUILLÉ Valeurs verrouillées
VERROUILLÉ AE/AWB_LOCK désactivé RECHERCHE EN COURS… Valeurs incorrectes après déverrouillage
VERROUILLÉ AE/AWB_LOCK désactivé CONVERGED Valeurs correctes après déverrouillage
VERROUILLÉ AE_LOCK désactivé FLASH_REQUIRED Exposition correcte, mais trop sombre
Tous les États de l'AE PRECAPTURE_START PRÉCAPTURE Démarrer la séquence de précapture
PRÉCAPTURE Séquence terminée, AE_LOCK désactivé CONVERGED Prêt pour la capture haute qualité
PRÉCAPTURE Séquence terminée, AE_LOCK activé VERROUILLÉ Prêt pour la capture haute qualité

Activer le contrôle manuel

Plusieurs commandes sont également impliquées dans la configuration des blocs 3A de l'appareil pour permettre un contrôle direct des applications.

Le modèle HAL pour le contrôle 3A est le suivant : pour chaque requête, le HAL inspecte l'état des champs de contrôle 3A. Si une routine 3A est activée, elle remplace les variables de contrôle qui lui sont associées. Ces valeurs de remplacement sont ensuite disponibles dans les métadonnées de résultat de cette capture. Par exemple, si l'exposition automatique est activée dans une requête, le HAL doit remplacer les champs d'exposition, de gain et de durée de frame (et éventuellement les champs de flash, en fonction du mode AE) de la requête. Voici la liste des commandes pertinentes:

Nom du contrôle Unité Notes
android.control.mode enum: OFF, AUTO, USE_SCENE_MODE Contrôle 3A de haut niveau. Lorsque cette option est définie sur "OFF", toutes les commandes 3A du HAL sont désactivées. L'application doit définir elle-même les champs pour les paramètres de capture. Lorsque la valeur est AUTO, les commandes d'algorithme individuelles dans android.control.* sont en vigueur, comme android.control.afMode. Lorsque la valeur est USE_SCENE_MODE, les commandes individuelles dans android.control.* sont principalement désactivés, et le HAL implémente l'un des paramètres du mode scène (par exemple, ACTION, SUNSET ou PARTY) comme il le souhaite.
android.control.afMode enum "OFF" signifie que la mise au point de l'objectif est contrôlée manuellement via android.lens.focusDistance.
android.control.aeMode enum "OFF" signifie contrôle manuel de l'exposition/du gain/de la durée de la trame via android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enum "OFF" signifie que la balance des blancs est contrôlée manuellement.