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