Modos 3A y transición de estado

En esta página, se describen los modos de 3A y las máquinas de estados de un dispositivo Android. La interfaz de la HAL de la cámara, que define las máquinas de estados a un nivel alto, permite que la implementación de la HAL y el framework de Android comuniquen los estados actuales de 3A y activen eventos de 3A. La implementación de HAL es responsable de los algoritmos de 3A que controlan la configuración del modo 3A y las transiciones de estado.

Cuando se abre el dispositivo, todos los estados individuales de 3A deben ser STATE_INACTIVE. La configuración de transmisión no restablece 3A. Por ejemplo, el enfoque bloqueado se debe mantener durante la llamada a configure().

Activar una acción de 3A implica simplemente configurar la entrada de activador relevante en la configuración de la siguiente solicitud para indicar el inicio del activador. Por ejemplo, el activador para iniciar un análisis de enfoque automático es configurar la entrada ANDROID_CONTROL_AF_TRIGGER en ANDROID_CONTROL_AF_TRIGGER_START para una solicitud. Para cancelar un análisis de enfoque automático, se configura ANDROID_CONTROL_AF_TRIGGER en ANDROID_CONTRL_AF_TRIGGER_CANCEL. De lo contrario, la entrada no existirá o se establecerá en ANDROID_CONTROL_AF_TRIGGER_IDLE. Cada solicitud con una entrada de activador establecida en un valor que no sea IDLE se tratará como un evento de activación independiente.

En el nivel superior, el parámetro de configuración ANDROID_CONTROL_MODE controla la 3A. Selecciona entre no 3A (ANDROID_CONTROL_MODE_OFF), el modo AUTO normal (ANDROID_CONTROL_MODE_AUTO) y el uso de la configuración del modo de escena (ANDROID_CONTROL_USE_SCENE_MODE):

  • En el modo DESACTIVADO, cada uno de los modos de enfoque automático (AF), de exposición automática (AE) y de balance de blancos automático (AWB) están desactivados, y las rutinas de 3A no pueden anular ninguno de los controles de captura.
  • En el modo AUTO, los modos AF, AE y AWB ejecutan sus propios algoritmos independientes y tienen sus propias entradas de metadatos de modo, estado y activación, como se indica en la siguiente sección.
  • En USE_SCENE_MODE, se debe usar el valor de la entrada ANDROID_CONTROL_SCENE_MODE para determinar el comportamiento de las rutinas de 3A. En SCENE_MODEs que no sean FACE_PRIORITY, el sistema HAL debe anular los valores de ANDROID_CONTROL_AE/AWB/AF_MODE para que sea el modo que prefiera para el SCENE_MODE seleccionado. Por ejemplo, es posible que el HAL prefiera SCENE_MODE_NIGHT para usar el modo de enfoque automático CONTINUOUS_FOCUS. Se debe ignorar cualquier selección del usuario de AE/AWB/AF_MODE cuando se debe ignorar la escena para estos modos de escena.
  • En SCENE_MODE_FACE_PRIORITY, los controles de AE/AWB/AFMODE funcionan como en ANDROID_CONTROL_MODE_AUTO, pero las rutinas de 3A deben sesgarse hacia la medición y el enfoque en cualquier rostro detectado en la escena.

Configuración del enfoque automático y entradas de resultados

Entradas de metadatos principales
ANDROID_CONTROL_AF_MODE Control para seleccionar el modo de enfoque automático actual. Establecido por el framework en la configuración de la solicitud.
AF_MODE_OFF El enfoque automático está inhabilitado; el framework o la app controlan directamente la posición del lente.
AF_MODE_AUTO Enfoque automático con barrido único No hay movimiento del lente, a menos que se active el enfoque automático.
AF_MODE_MACRO Enfoque automático cercano con barrido único No hay movimiento del lente, a menos que se active el enfoque automático.
AF_MODE_CONTINUOUS_VIDEO Enfoque continuo y suave para grabar videos El disparo inmediato bloquea el enfoque en la posición actual. Si cancelas la acción, se reanuda el enfoque continuo.
AF_MODE_CONTINUOUS_PICTURE Enfoque continuo rápido para capturar imágenes estáticas sin retraso del obturador El activador bloquea el enfoque una vez que finaliza el barrido activo actual. Cancelar reanuda el enfoque continuo.
AF_MODE_EDOF Enfoque avanzado de profundidad de campo extendida No hay un análisis de enfoque automático, por lo que activar o cancelar uno no tiene ningún efecto. El sistema HAL enfoca las imágenes automáticamente.
ANDROID_CONTROL_AF_STATE Son metadatos dinámicos que describen el estado actual del algoritmo de AF, que informa el HAL en los metadatos del resultado.
AF_STATE_INACTIVE No se realizó ningún enfoque o se restableció el algoritmo. El lente no se mueve. Siempre es el estado de MODE_OFF o MODE_EDOF. Cuando se abre el dispositivo, debe comenzar en este estado.
AF_STATE_PASSIVE_SCAN Actualmente, un algoritmo de enfoque continuo está buscando un buen enfoque. El lente se está moviendo.
AF_STATE_PASSIVE_FOCUSED Un algoritmo de enfoque continuo cree que está bien enfocado. El lente no se mueve. Es posible que el sistema HAL salga de este estado de forma espontánea.
AF_STATE_PASSIVE_UNFOCUSED Un algoritmo de enfoque continuo cree que no está bien enfocado. El lente no se mueve. Es posible que el sistema HAL salga de este estado de forma espontánea.
AF_STATE_ACTIVE_SCAN Se está realizando un análisis activado por el usuario.
AF_STATE_FOCUSED_LOCKED El algoritmo de AF cree que está enfocado. El lente no se mueve.
AF_STATE_NOT_FOCUSED_LOCKED El algoritmo de enfoque automático no pudo enfocar. El lente no se mueve.
ANDROID_CONTROL_AF_TRIGGER Control para iniciar un análisis de enfoque automático, cuyo significado depende del modo y el estado. Establecido por el framework en la configuración de la solicitud.
AF_TRIGGER_IDLE No hay ningún activador actual.
AF_TRIGGER_START Activa el inicio del escaneo del AF. El efecto depende del modo y el estado.
AF_TRIGGER_CANCEL Cancela el escaneo de AF actual, si corresponde, y restablece el algoritmo a la configuración predeterminada.
Entradas de metadatos adicionales
ANDROID_CONTROL_AF_REGIONS Control para seleccionar las regiones del campo de visión (FOV) que se deben usar para determinar un buen enfoque. Esto se aplica a todos los modos de enfoque automático que buscan el enfoque. Establecido por el framework en la configuración de la solicitud.

Configuración de la exposición automática y entradas de resultados

Entradas de metadatos principales
ANDROID_CONTROL_AE_MODE Control para seleccionar el modo de exposición automática actual. Establecido por el framework en la configuración de la solicitud.
AE_MODE_OFF La exposición automática está inhabilitada. El usuario controla la exposición, la ganancia, la duración del fotograma y el flash.
AE_MODE_ON Exposición automática estándar, con el control de flash inhabilitado. El usuario puede configurar el flash para que se active o para que funcione como linterna.
AE_MODE_ON_AUTO_FLASH Exposición automática estándar, con flash activado a discreción de HAL para la captura previa y la captura fija. Se inhabilitó el control de usuario del flash.
AE_MODE_ON_ALWAYS_FLASH Exposición automática estándar, con el flash siempre activado para la captura y a discreción de HAL para la captura previa. Se inhabilitó el control de usuario del flash.
AE_MODE_ON_AUTO_FLASH_REDEYE Exposición automática estándar, con el flash activado a discreción de HAL para la captura previa y la captura fija. Usa una ráfaga de flash al final de la secuencia de captura previa para reducir el efecto de ojos rojos en la foto final. Se inhabilitó el control de usuario del flash.
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY El aumento de la función con poca luz ajusta automáticamente el brillo de la transmisión de vista previa en condiciones de poca luz. Esto puede aumentar el desenfoque de movimiento y el ruido en condiciones de poca luz. Los fabricantes de dispositivos deben asegurarse de que la velocidad de fotogramas no sea inferior a 10 fps.
ANDROID_CONTROL_AE_STATE Son metadatos dinámicos que describen el estado actual del algoritmo de AE, que informa la HAL en los metadatos del resultado.
AE_STATE_INACTIVE Estado inicial de la AE después del cambio de modo. Cuando se abre el dispositivo, debe comenzar en este estado.
AE_STATE_SEARCHING La AE no convergió en un valor bueno y está ajustando los parámetros de exposición.
AE_STATE_CONVERGED La AE encontró buenos valores de exposición para la escena actual y los parámetros de exposición no cambian. HAL puede salir de este estado de forma espontánea para buscar una mejor solución.
AE_STATE_LOCKED La AE se bloqueó con el control AE_LOCK. Los valores de exposición no cambian.
AE_STATE_FLASH_REQUIRED El HAL convergió la exposición, pero cree que se requiere el flash para obtener una imagen lo suficientemente brillante. Se usa para determinar si se puede usar un fotograma con retraso del obturador cero.
AE_STATE_PRECAPTURE El sistema HAL está en medio de una secuencia de captura previa. Según el modo de AE, este modo puede implicar activar el flash para la medición o una ráfaga de pulsos de flash para reducir los ojos rojos.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER Control para iniciar una secuencia de medición antes de capturar una imagen de alta calidad. Establecido por el framework en la configuración de la solicitud.
PRECAPTURE_TRIGGER_IDLE No hay ningún activador actual.
PRECAPTURE_TRIGGER_START Inicia una secuencia de captura previa. El HAL debe usar las solicitudes posteriores para medir una buena exposición o un balance de blancos para una próxima captura de alta resolución.
Entradas de metadatos adicionales
ANDROID_CONTROL_AE_LOCK Control para bloquear los controles de AE en sus valores actuales.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Control para ajustar el punto de brillo objetivo del algoritmo de AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Control para seleccionar el rango de velocidad de fotogramas objetivo del algoritmo de AE. La rutina de AE no puede cambiar la velocidad de fotogramas para que esté fuera de estos límites.
ANDROID_CONTROL_AE_REGIONS Control para seleccionar las regiones del FOV que se deben usar para determinar buenos niveles de exposición. Esto se aplica a todos los modos de AE, excepto a la opción DESACTIVADO.

Configuración del balance de blancos automático y entradas de resultados

Entradas de metadatos principales
ANDROID_CONTROL_AWB_MODE Control para seleccionar el modo de balance de blancos actual.
AWB_MODE_OFF El balance de blancos automático está inhabilitado. El usuario controla la matriz de colores.
AWB_MODE_AUTO El balance de blancos automático está habilitado. 3A controla la transformación de color, posiblemente con transformaciones más complejas que una matriz simple.
AWB_MODE_INCANDESCENT Configuración de balance de blancos fija, adecuada para iluminación incandescente (tungsteno) interior, de alrededor de 2700 K.
AWB_MODE_FLUORESCENT Configuración fija del balance de blancos adecuada para la iluminación fluorescente, alrededor de 5,000 K
AWB_MODE_WARM_FLUORESCENT Configuración fija del balance de blancos adecuada para la iluminación fluorescente, alrededor de 3,000 K
AWB_MODE_DAYLIGHT Configuración fija del balance de blancos adecuada para la luz del día, alrededor de 5500 K.
AWB_MODE_CLOUDY_DAYLIGHT Configuración fija del balance de blancos adecuada para la luz del día nublada, alrededor de 6500 K.
AWB_MODE_TWILIGHT Configuración fija del balance de blancos adecuada para el atardecer o el amanecer, alrededor de 15,000 K.
AWB_MODE_SHADE Configuración fija del balance de blancos adecuada para áreas iluminadas indirectamente por el sol, aproximadamente 7500 K.
ANDROID_CONTROL_AWB_STATE Son metadatos dinámicos que describen el estado actual del algoritmo de AWB, que informa el HAL en los metadatos del resultado.
AWB_STATE_INACTIVE Estado inicial del AWB después del cambio de modo. Cuando se abre el dispositivo, debe comenzar en este estado.
AWB_STATE_SEARCHING El balance de blancos automático no converge a un valor bueno y cambia los parámetros de ajuste de color.
AWB_STATE_CONVERGED El balance de blancos encontró buenos valores de ajuste de color para la escena actual y los parámetros no cambian. HAL puede salir de este estado de forma espontánea para buscar una mejor solución.
AWB_STATE_LOCKED El AWB se bloqueó con el control AWB_LOCK. Los valores de ajuste de color no cambian.
Entradas de metadatos adicionales
ANDROID_CONTROL_AWB_LOCK Control para bloquear los ajustes de color del balance de blancos automático en sus valores actuales.
ANDROID_CONTROL_AWB_REGIONS Control para seleccionar las regiones del FOV que se deben usar para determinar un buen equilibrio de colores. Esto solo se aplica al modo de balance de blancos automático.

Notas generales sobre las transiciones de la máquina de estados

Cambiar entre los modos AF, AE o AWB siempre restablece el estado del algoritmo a INACTIVE. Del mismo modo, cambiar entre CONTROL_MODE o CONTROL_SCENE_MODE si CONTROL_MODE == USE_SCENE_MODE restablece todos los estados del algoritmo a INACTIVE.

Las siguientes tablas son por modo.

Máquinas de estado de AF

mode = AF_MODE_OFF o AF_MODE_EDOF
State Causa de la transformación Estado nuevo Notas
INACTIVA El enfoque automático está inhabilitado
mode = AF_MODE_AUTO o AF_MODE_MACRO
State Causa de la transformación Estado nuevo Notas
INACTIVA AF_TRIGGER ACTIVE_SCAN

Cómo iniciar el barrido del enfoque automático

El lente ahora se está moviendo

ACTIVE_SCAN Se completó el barrido de AF FOCUSED_LOCKED

Si la AF se realiza correctamente

Se bloqueó el lente

ACTIVE_SCAN Se completó el barrido de AF NOT_FOCUSED_LOCKED

Si la AF se realiza correctamente

Se bloqueó el lente

ACTIVE_SCAN AF_CANCEL INACTIVA

Cancela o restablece el AF

Se bloqueó el lente

FOCUSED_LOCKED AF_CANCEL INACTIVA Cancela o restablece el AF
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nueva limpieza

El lente ahora se está moviendo

NOT_FOCUSED_LOCKED AF_CANCEL INACTIVA Cancela o restablece el AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nueva limpieza

El lente ahora se está moviendo

Todos los estados Cambio de modo INACTIVA
mode = AF_MODE_CONTINUOUS_VIDEO
State Causa de la transformación Estado nuevo Notas
INACTIVA HAL inicia un nuevo análisis PASSIVE_SCAN

Cómo iniciar el barrido del enfoque automático

El lente ahora se está moviendo

INACTIVA AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta del estado de AF

Se bloqueó el lente

PASSIVE_SCAN HAL completa el análisis actual PASSIVE_FOCUSED

Finaliza el análisis de enfoque automático

Se bloqueó el lente

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformación inmediata si el enfoque es bueno

Se bloqueó el lente

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformación inmediata si el enfoque es malo

Se bloqueó el lente

PASSIVE_SCAN AF_CANCEL INACTIVA

Restablece la posición del lente

Se bloqueó el lente

PASSIVE_FOCUSED HAL inicia un nuevo análisis PASSIVE_SCAN

Cómo iniciar el análisis del enfoque automático

El lente ahora se está moviendo

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformación inmediata si el enfoque es bueno

Se bloqueó el lente

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED Transformación inmediata si el enfoque es malo

Se bloqueó el lente

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Sin efectos
FOCUSED_LOCKED AF_CANCEL INACTIVA Reinicia el escaneo de AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Sin efectos
NOT_FOCUSED_LOCKED AF_CANCEL INACTIVA Reinicia el escaneo de AF
mode = AF_MODE_CONTINUOUS_PICTURE
State Causa de la transformación Estado nuevo Notas
INACTIVA HAL inicia un nuevo análisis PASSIVE_SCAN

Cómo iniciar el análisis del enfoque automático

El lente ahora se está moviendo

INACTIVA AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta del estado de AF

Se bloqueó el lente

PASSIVE_SCAN HAL completa el análisis actual PASSIVE_FOCUSED Finaliza el análisis de enfoque automático

Se bloqueó el lente

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformación final una vez que el enfoque es bueno

Se bloqueó el lente

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformación eventual si no se puede enfocar

Se bloqueó el lente

PASSIVE_SCAN AF_CANCEL INACTIVA

Restablece la posición del lente

Se bloqueó el lente

PASSIVE_FOCUSED HAL inicia un nuevo análisis PASSIVE_SCAN

Cómo iniciar el análisis del enfoque automático

El lente ahora se está moviendo

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformación inmediata si el enfoque es bueno

Se bloqueó el lente

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

Transformación inmediata si el enfoque es malo

Se bloqueó el lente

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Sin efectos
FOCUSED_LOCKED AF_CANCEL INACTIVA Reinicia el escaneo de AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Sin efectos
NOT_FOCUSED_LOCKED AF_CANCEL INACTIVA Reinicia el escaneo de AF

Máquinas de estado de AE y AWB

Las máquinas de estados de AE y AWB son casi idénticas. AE tiene estados adicionales de FLASH_REQUIRED y PRECAPTURE. Por lo tanto, las filas que se refieren a esos dos estados deben ignorarse para la máquina de estados de AWB.

mode = AE_MODE_OFF / AWB mode not AUTO
State Causa de la transformación Estado nuevo Notas
INACTIVA AE/AWB inhabilitado
mode = AE_MODE_ON_* / AWB_MODE_AUTO
State Causa de la transformación Estado nuevo Notas
INACTIVA HAL inicia el análisis de AE/AWB BUSCANDO
INACTIVA AE/AWB_LOCK activado BLOQUEADO Valores bloqueados
BUSCANDO HAL finaliza el escaneo de AE/AWB CONVERGED Valores buenos, no cambian
BUSCANDO HAL finaliza el análisis de AE FLASH_REQUIRED Convergencia, pero demasiado oscura sin flash
BUSCANDO AE/AWB_LOCK activado BLOQUEADO Valores bloqueados
CONVERGED HAL inicia el análisis de AE/AWB BUSCANDO Valores bloqueados
CONVERGED AE/AWB_LOCK activado BLOQUEADO Valores bloqueados
FLASH_REQUIRED HAL inicia el análisis de AE/AWB BUSCANDO Valores bloqueados
FLASH_REQUIRED AE/AWB_LOCK activado BLOQUEADO Valores bloqueados
BLOQUEADO AE/AWB_LOCK desactivado BUSCANDO Los valores no son buenos después del desbloqueo
BLOQUEADO AE/AWB_LOCK desactivado CONVERGED Valores buenos después del desbloqueo
BLOQUEADO AE_LOCK desactivado FLASH_REQUIRED Exposición buena, pero demasiado oscura
Todos los estados de AE PRECAPTURE_START PRECAPTURA Cómo iniciar la secuencia de captura previa
PRECAPTURA Se completó la secuencia, AE_LOCK desactivado CONVERGED Listo para capturar imágenes de alta calidad
PRECAPTURA Se completó la secuencia, AE_LOCK activado BLOQUEADO Listo para capturar imágenes de alta calidad

Habilita el control manual

Varios controles también participan en la configuración de los bloques 3A del dispositivo para permitir el control directo de la app.

El modelo de HAL para el control de 3A es que, para cada solicitud, el HAL inspecciona el estado de los campos de control de 3A. Si se habilita alguna rutina de 3A, esa rutina anula las variables de control que se relacionan con ella, y estos valores de anulación estarán disponibles en los metadatos del resultado de esa captura. Por ejemplo, si la exposición automática está habilitada en una solicitud, el HAL debe reemplazar los campos de exposición, ganancia y duración de fotogramas (y, posiblemente, los campos de flash, según el modo de EA) de la solicitud. La lista de controles relevantes es la siguiente:

Nombre del control Unidad Notas
android.control.mode enum: OFF, AUTO, USE_SCENE_MODE Control 3A de alto nivel Cuando se establece en APAGADO, se inhabilita todo el control de 3A por parte del HAL. La app debe configurar los campos para los parámetros de captura. Cuando se establece en AUTO, los controles de algoritmo individuales en android.control.* están vigentes, como android.control.afMode. Cuando se establece en USE_SCENE_MODE, los controles individuales de android.control.* están inhabilitados en su mayoría, y el HAL implementa una de las configuraciones del modo de escena (como ACTION, SUNSET o PARTY) como desee.
android.control.afMode enum OFF significa control manual del enfoque del lente a través de android.lens.focusDistance.
android.control.aeMode enum APAGADO significa control manual de la exposición, la ganancia o la duración de la trama a través de android.sensor.exposureTime / .sensitivity / .frameDuration.
android.control.awbMode enum APAGADO significa control manual del balance de blancos.