Modes 3A et transition d'état

Bien que les algorithmes 3A réels dépendent de l'implémentation de HAL, une description de machine à états de haut niveau est définie par l'interface HAL pour permettre au périphérique HAL et au framework de communiquer sur l'état actuel de 3A et de déclencher des événements 3A.

Lors de l'ouverture de l'appareil, 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 lors de l'appel configure() .

Le déclenchement d'une action 3A implique simplement de définir l'entrée de déclenchement appropriée dans les paramètres de la prochaine requête pour indiquer le début du déclenchement. Par exemple, le déclencheur pour démarrer 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 ; et 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 demande avec une entrée de déclencheur définie sur une valeur non IDLE sera traitée comme un événement déclencheur indépendant.

Au niveau supérieur, 3A est contrôlé par le paramètre ANDROID_CONTROL_MODE. Il sélectionne entre le mode non 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 individuels 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 annulée par les routines 3A.
  • En mode AUTO, les modes AF, AE et AWB exécutent tous leurs propres algorithmes indépendants et possèdent leurs propres entrées de métadonnées de mode, d'état et de déclenchement, 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 de ANDROID_CONTROL_AE/AWB/AF_MODE pour être le mode qu'il préfère pour le SCENE_MODE sélectionné. Par exemple, le HAL peut préférer SCENE_MODE_NIGHT pour utiliser le mode CONTINUOUS_FOCUS AF. Toute sélection utilisateur de AE/AWB/AF_MODE lorsque scène doit être ignorée pour ces modes 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 tous 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 pour sélectionner le mode de mise au point automatique actuel. Défini par le framework dans les paramètres de la demande.
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 à un seul balayage. Aucun mouvement de l'objectif sauf si l'AF est déclenché.
AF_MODE_MACRO Mise au point automatique de près à un seul balayage. Aucun mouvement de l'objectif sauf si l'AF est déclenché
AF_MODE_CONTINUOUS_VIDEO Mise au point continue et fluide, pour l'enregistrement vidéo. Le déclenchement verrouille immédiatement la mise au point dans la position actuelle. L'annulation reprend la mise au point continue.
AF_MODE_CONTINUOUS_PICTURE Mise au point continue rapide, pour une capture d'images fixes sans décalage d'obturation. Le déclenchement verrouille le focus une fois le balayage actuellement actif terminé. L'annulation reprend la mise au point continue.
AF_MODE_EDOF Mise au point avancée en profondeur de champ étendue. Il n’y a pas de balayage de mise au point automatique, donc en déclencher un ou l’annuler n’a aucun effet. Les images sont automatiquement mises au point par le HAL.
ANDROID_CONTROL_AF_STATE Métadonnées dynamiques décrivant l'état actuel de l'algorithme AF, signalées par le HAL dans les métadonnées des résultats.
AF_STATE_INACTIVE Aucune mise au point n'a été effectuée ou l'algorithme a été réinitialisé. L'objectif ne bouge pas. Toujours l'état pour MODE_OFF ou MODE_EDOF. A l'ouverture de l'appareil, il doit démarrer dans cet état.
AF_STATE_PASSIVE_SCAN Un algorithme de mise au point continue recherche actuellement une bonne mise au point. L'objectif bouge.
AF_STATE_PASSIVE_FOCUSED Un algorithme de mise au point continue estime que la mise au point est bonne. L'objectif ne bouge pas. Le HAL peut spontanément quitter cet état.
AF_STATE_PASSIVE_UNFOCUSED Un algorithme de mise au point continue estime que la mise au point n'est pas bonne. L'objectif ne bouge pas. Le HAL peut spontanément quitter cet état.
AF_STATE_ACTIVE_SCAN Un scan déclenché par l'utilisateur est en cours.
AF_STATE_FOCUSED_LOCKED L'algorithme AF pense qu'il est concentré. L'objectif ne bouge pas.
AF_STATE_NOT_FOCUSED_LOCKED L'algorithme AF n'a pas réussi à faire la mise au point. L'objectif ne bouge pas.
ANDROID_CONTROL_AF_TRIGGER Commande de démarrage d'un scan autofocus dont la signification dépend du mode et de l'état. Défini par le framework dans les paramètres de la demande.
AF_TRIGGER_IDLE Aucun déclencheur actuel.
AF_TRIGGER_START Déclenchez le démarrage du balayage AF. L'effet dépend du mode et de l'état.
AF_TRIGGER_CANCEL Annulez la numérisation AF en cours, le cas échéant, et réinitialisez l'algorithme par défaut.
Entrées de métadonnées supplémentaires
ANDROID_CONTROL_AF_REGIONS Contrôle pour sélectionner les régions du champ de vision (FOV) qui doivent être utilisées pour déterminer une bonne mise au point. Cela s'applique à tous les modes AF qui recherchent la mise au point. Défini par le framework dans les paramètres de la demande.

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

Principales entrées de métadonnées
ANDROID_CONTROL_AE_MODE Commande pour sélectionner le mode d’exposition automatique actuel. Défini par le framework dans les paramètres de la demande.
AE_MODE_OFF L'exposition automatique est désactivée ; l'utilisateur contrôle l'exposition, le gain, la durée de l'image et le flash.
AE_MODE_ON Exposition automatique standard, avec contrôle du flash désactivé. L'utilisateur peut régler le flash pour qu'il se déclenche ou en mode torche.
AE_MODE_ON_AUTO_FLASH Exposition automatique standard, avec flash activé à la discrétion de HAL pour la pré-capture et la capture fixe. Contrôle utilisateur du flash désactivé.
AE_MODE_ON_ALWAYS_FLASH Exposition automatique standard, avec flash toujours déclenché pour la capture et à la discrétion de HAL pour la précapture. Contrôle utilisateur du flash désactivé.
AE_MODE_ON_AUTO_FLASH_REDEYE Exposition automatique standard, avec flash activé à la discrétion de HAL pour la pré-capture et la capture fixe. Utilisez un flash en rafale à la fin de la séquence de précapture pour réduire les yeux rouges sur la photo finale. Contrôle utilisateur du flash désactivé.
ANDROID_CONTROL_AE_STATE Métadonnées dynamiques décrivant l'état actuel de l'algorithme AE, signalées par le HAL dans les métadonnées des résultats.
AE_STATE_INACTIVE État AE initial après le changement de mode. A l'ouverture de l'appareil, il doit démarrer dans cet état.
AE_STATE_SEARCHING L'AE ne converge pas vers une bonne valeur et ajuste les paramètres d'exposition.
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 spontanément quitter cet état pour rechercher une meilleure solution.
AE_STATE_LOCKED AE a été verrouillé avec la commande AE_LOCK. Les valeurs d'exposition ne changent pas.
AE_STATE_FLASH_REQUIRED Le HAL a une exposition convergée mais estime que le flash est nécessaire pour une image suffisamment lumineuse. Utilisé pour déterminer si un cadre sans décalage d'obturation 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 le déclenchement du flash pour la mesure ou une rafale d'impulsions de flash 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 demande.
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 ultérieures pour mesurer une bonne exposition/balance des blancs pour une prochaine capture haute résolution.
Entrées de métadonnées supplémentaires
ANDROID_CONTROL_AE_LOCK Contrôle pour verrouiller les contrôles AE sur leurs valeurs actuelles.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Contrôle pour ajuster le point de luminosité cible de l’algorithme AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Contrôle pour 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 soit en dehors de ces limites.
ANDROID_CONTROL_AE_REGIONS Contrôle pour sélectionner les régions du champ de vision qui doivent être utilisées pour déterminer de bons niveaux d'exposition. Ceci s'applique à tous les modes AE sauf 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 pour sélectionner le mode de balance des blancs actuel.
AWB_MODE_OFF La balance des blancs automatique est désactivée. 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, en utilisant éventuellement des transformations plus complexes qu'une simple matrice.
AWB_MODE_INCANDESCENT Paramètres de balance des blancs fixes, adaptés à l'éclairage intérieur à incandescence (tungstène), 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 500K.
AWB_MODE_CLOUDY_DAYLIGHT Paramètres de balance des blancs fixes, adaptés à la lumière du jour nuageuse, environ 6 500K.
AWB_MODE_TWILIGHT Paramètres de balance des blancs fixes, adaptés à l'approche du coucher/lever du soleil, environ 15 000K.
AWB_MODE_SHADE Paramètres de balance des blancs fixes, adaptés aux zones indirectement éclairées 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ées par le HAL dans les métadonnées de résultat.
AWB_STATE_INACTIVE État AWB initial après le changement de mode. A l'ouverture de l'appareil, il doit démarrer dans cet état.
AWB_STATE_SEARCHING AWB ne converge pas vers une bonne valeur et modifie les paramètres de réglage des couleurs.
AWB_STATE_CONVERGED AWB a trouvé de bonnes valeurs de réglage des couleurs pour la scène actuelle et les paramètres ne changent pas. HAL peut spontanément quitter cet état pour rechercher une meilleure solution.
AWB_STATE_LOCKED AWB a été verrouillé avec le contrôle AWB_LOCK. Les valeurs de réglage des couleurs ne changent pas.
Entrées de métadonnées supplémentaires
ANDROID_CONTROL_AWB_LOCK Contrôle pour verrouiller les réglages de couleur AWB sur leurs valeurs actuelles.
ANDROID_CONTROL_AWB_REGIONS Contrôle permettant de sélectionner les régions du FOV qui doivent être utilisées pour déterminer une bonne balance des couleurs. Cela s'applique uniquement au mode de balance des blancs automatique.

Notes générales sur la transition de la machine à états

La commutation entre les modes AF, AE ou AWB réinitialise toujours l'état de l'algorithme sur INACTIF. De même, basculer entre CONTROL_MODE ou 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 transformation Nouvel état Remarques
INACTIF L'AF est désactivé
mode = AF_MODE_AUTO ou AF_MODE_MACRO
État Cause de transformation Nouvel état Remarques
INACTIF AF_TRIGGER ACTIVE_SCAN

Démarrer le balayage AF

L'objectif bouge maintenant

ACTIVE_SCAN Balayage AF terminé FOCUSED_LOCKED

Si AF réussit

Objectif désormais verrouillé

ACTIVE_SCAN Balayage AF terminé NOT_FOCUSED_LOCKED

Si AF réussit

Objectif désormais verrouillé

ACTIVE_SCAN AF_CANCEL INACTIF

Annuler/réinitialiser l'AF

Objectif désormais verrouillé

FOCUSED_LOCKED AF_CANCEL INACTIF Annuler/réinitialiser l'AF
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Commencer un nouveau balayage

L'objectif bouge maintenant

NOT_FOCUSED_LOCKED AF_CANCEL INACTIF Annuler/réinitialiser l'AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Commencer un nouveau balayage

L'objectif bouge maintenant

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

Démarrer le balayage AF

L'objectif bouge maintenant

INACTIF AF_TRIGGER NOT_FOCUSED_LOCKED

Requête d'état AF

Objectif désormais verrouillé

PASSIVE_SCAN HAL termine l'analyse en cours PASSIVE_FOCUSED

Fin de la numérisation AF

Objectif désormais verrouillé

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformation immédiate si la concentration est bonne

Objectif désormais verrouillé

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformation immédiate si la concentration est mauvaise

Objectif désormais verrouillé

PASSIVE_SCAN AF_CANCEL INACTIF

Réinitialiser la position de l'objectif

Objectif désormais verrouillé

PASSIVE_FOCUSED HAL lance une nouvelle analyse PASSIVE_SCAN

Démarrer la numérisation AF

L'objectif bouge maintenant

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformation immédiate si la concentration est bonne

Objectif désormais verrouillé

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED Transformation immédiate si la concentration est mauvaise

Objectif désormais verrouillé

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

Démarrer la numérisation AF

L'objectif bouge maintenant

INACTIF AF_TRIGGER NOT_FOCUSED_LOCKED

Requête d'état AF

Objectif désormais verrouillé

PASSIVE_SCAN HAL termine l'analyse en cours PASSIVE_FOCUSED Fin de la numérisation AF

Objectif désormais verrouillé

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformation éventuelle une fois la bonne concentration

Objectif désormais verrouillé

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformation éventuelle si vous ne pouvez pas vous concentrer

Objectif désormais verrouillé

PASSIVE_SCAN AF_CANCEL INACTIF

Réinitialiser la position de l'objectif

Objectif désormais verrouillé

PASSIVE_FOCUSED HAL lance une nouvelle analyse PASSIVE_SCAN

Démarrer la numérisation AF

L'objectif bouge maintenant

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformation immédiate si la concentration est bonne

Objectif désormais verrouillé

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

Transformation immédiate si la concentration est mauvaise

Objectif désormais verrouillé

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Aucun effet
FOCUSED_LOCKED AF_CANCEL INACTIF Redémarrer la numérisation AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Aucun effet
NOT_FOCUSED_LOCKED AF_CANCEL INACTIF Redémarrer la numérisation AF

Machines à états AE et AWB

Les machines à états AE et AWB sont pour la plupart identiques. AE a des états FLASH_REQUIRED et PRECAPTURE supplémentaires. Ainsi, 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 transformation Nouvel état Remarques
INACTIF AE/AWB désactivé
mode = AE_MODE_ON_* / AWB_MODE_AUTO
État Cause de transformation Nouvel état Remarques
INACTIF HAL lance l'analyse AE/AWB RECHERCHE
INACTIF AE/AWB_LOCK activé FERMÉ À CLÉ Valeurs verrouillées
RECHERCHE HAL termine le scan AE/AWB CONVERGÉ Bonnes valeurs, ne change pas
RECHERCHE HAL termine le scan AE FLASH_REQUIRED Convergé mais trop sombre sans flash
RECHERCHE AE/AWB_LOCK activé FERMÉ À CLÉ Valeurs verrouillées
CONVERGÉ HAL lance l'analyse AE/AWB RECHERCHE Valeurs verrouillées
CONVERGÉ AE/AWB_LOCK activé FERMÉ À CLÉ Valeurs verrouillées
FLASH_REQUIRED HAL lance l'analyse AE/AWB RECHERCHE Valeurs verrouillées
FLASH_REQUIRED AE/AWB_LOCK activé FERMÉ À CLÉ Valeurs verrouillées
FERMÉ À CLÉ AE/AWB_LOCK désactivé RECHERCHE Les valeurs ne sont pas bonnes après le déverrouillage
FERMÉ À CLÉ AE/AWB_LOCK désactivé CONVERGÉ Valeurs bonnes après déverrouillage
FERMÉ À CLÉ AE_LOCK désactivé FLASH_REQUIRED Bonne exposition mais trop sombre
Tous les états AE PRECAPTURE_START PRÉCAPTURE Démarrer la séquence de précapture
PRÉCAPTURE Séquence terminée, AE_LOCK désactivé CONVERGÉ Prêt pour une capture de haute qualité
PRÉCAPTURE Séquence terminée, AE_LOCK activé FERMÉ À CLÉ Prêt pour une capture de haute qualité

Activation du contrôle manuel

Plusieurs contrôles sont également impliqués dans la configuration des blocs 3A du périphérique pour permettre un contrôle direct des applications.

Le modèle HAL pour le contrôle 3A est que pour chaque requête, le HAL inspecte l'état des champs de contrôle 3A. Si une routine 3A est activée, cette routine remplace les variables de contrôle liées à cette routine, et ces valeurs de remplacement sont alors disponibles dans les métadonnées de résultat pour cette capture. Ainsi, par exemple, si l'exposition automatique est activée dans une requête, le HAL doit écraser les champs d'exposition, de gain et de durée d'image (et potentiellement les champs de flash, en fonction du mode AE) de la requête. La liste des contrôles pertinents est la suivante :

Nom du contrôle Unité Remarques
android.control.mode énumération : OFF, AUTO, USE_SCENE_MODE Contrôle 3A de haut niveau. Lorsqu'il est réglé sur OFF, tous les contrôles 3A par le HAL sont désactivés. L'application doit définir elle-même les champs des paramètres de capture. Lorsqu'il est défini sur AUTO, les contrôles d'algorithme individuels dans android.control.* sont en vigueur, tels que android.control.afMode. Lorsqu'ils sont définis sur USE_SCENE_MODE, les commandes individuelles dans android.control.* sont pour la plupart désactivées et le HAL implémente l'un des paramètres du mode scène (tels que ACTION, SUNSET ou PARTY) comme il le souhaite.
android.control.afMode énumération OFF signifie le contrôle manuel de la mise au point de l'objectif via android.lens.focusDistance.
android.control.aeMode énumération OFF signifie un contrôle manuel de l'exposition/du gain/de la durée de l'image via android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode énumération OFF signifie contrôle manuel de la balance des blancs.