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. |