Modos 3A y transición de estado

Si bien los algoritmos 3A reales dependen de la implementación de HAL, la interfaz HAL define una descripción de la máquina de estado de alto nivel para permitir que el dispositivo HAL y el marco se comuniquen sobre el estado actual de 3A y activen eventos de 3A.

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

Activar una acción 3A implica simplemente configurar la entrada de activador relevante en la configuración para la siguiente solicitud para indicar el inicio del activador. Por ejemplo, el desencadenante para iniciar un escaneo de enfoque automático es configurar la entrada ANDROID_CONTROL_AF_TRIGGER en ANDROID_CONTROL_AF_TRIGGER_START para una solicitud; y la cancelación de un escaneo de enfoque automático se activa configurando 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 activación establecida en un valor que no sea IDLE se tratará como un evento de activación independiente.

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

  • En el modo APAGADO, cada uno de los modos individuales de enfoque automático (AF), exposición automática (AE) y balance de blancos automático (AWB) está efectivamente APAGADO y ninguno de los controles de captura puede ser anulado por las rutinas 3A.
  • En el modo AUTO, los modos AF, AE y AWB ejecutan sus propios algoritmos independientes y tienen sus propias entradas de modo, estado y metadatos de activación, como se enumera en la siguiente sección.
  • En USE_SCENE_MODE, se debe utilizar el valor de la entrada ANDROID_CONTROL_SCENE_MODE para determinar el comportamiento de las rutinas 3A. En SCENE_MODE distintos de FACE_PRIORITY, HAL debe anular los valores de ANDROID_CONTROL_AE/AWB/AF_MODE para que sea el modo que prefiere para el SCENE_MODE seleccionado. Por ejemplo, HAL puede preferir que SCENE_MODE_NIGHT utilice el modo AF CONTINUOUS_FOCUS. Cualquier selección del usuario de AE/AWB/AF_MODE cuando la escena debe ignorarse para estos modos de escena.
  • Para SCENE_MODE_FACE_PRIORITY, los controles AE/AWB/AFMODE funcionan como en ANDROID_CONTROL_MODE_AUTO, pero las rutinas 3A deben centrarse en medir y enfocar cualquier rostro detectado en la escena.

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

Entradas principales de metadatos
ANDROID_CONTROL_AF_MODE Control para seleccionar el modo de enfoque automático actual. Establecido por el marco en la configuración de la solicitud.
AF_MODE_OFF AF está desactivado; el marco/aplicación controla directamente la posición de la lente.
AF_MODE_AUTO Enfoque automático de un solo barrido. No hay movimiento de la lente a menos que se active el AF.
AF_MODE_MACRO Enfoque automático de primer plano con un solo barrido. No hay movimiento de la lente a menos que se active el AF
AF_MODE_CONTINUOUS_VIDEO Enfoque continuo suave, para grabar vídeo. El disparo bloquea inmediatamente el enfoque en la posición actual. La cancelación reanuda el enfoque continuo.
AF_MODE_CONTINUOUS_PICTURE Enfoque continuo rápido, para capturar imágenes fijas sin retraso de obturación. La activación de bloqueos se enfoca una vez que concluye el barrido actualmente activo. La cancelación reanuda el enfoque continuo.
AF_MODE_EDOF Enfoque avanzado de profundidad de campo extendida. No hay escaneo de enfoque automático, por lo que activarlo o cancelarlo no tiene ningún efecto. Las imágenes son enfocadas automáticamente por el HAL.
ANDROID_CONTROL_AF_STATE Metadatos dinámicos que describen el estado actual del algoritmo AF, informado por HAL en los metadatos de resultados.
AF_STATE_INACTIVE No se realizó ningún enfoque o se restableció el algoritmo. La lente no se mueve. Siempre el estado de MODE_OFF o MODE_EDOF. Cuando se abre el dispositivo, debe iniciarse en este estado.
AF_STATE_PASSIVE_SCAN Actualmente, un algoritmo de enfoque continuo está buscando un buen enfoque. La lente se está moviendo.
AF_STATE_PASSIVE_FOCUSED Un algoritmo de enfoque continuo cree que está bien enfocado. La lente no se mueve. El HAL puede abandonar espontáneamente este estado.
AF_STATE_PASSIVE_UNFOCUSED Un algoritmo de enfoque continuo cree que no está bien enfocado. La lente no se mueve. El HAL puede abandonar espontáneamente este estado.
AF_STATE_ACTIVE_SCAN Se está realizando un escaneo activado por el usuario.
AF_STATE_FOCUSED_LOCKED El algoritmo AF cree que está enfocado. La lente no se mueve.
AF_STATE_NOT_FOCUSED_LOCKED El algoritmo AF no ha podido enfocar. La lente no se mueve.
ANDROID_CONTROL_AF_TRIGGER Control para iniciar un escaneo de enfoque automático, cuyo significado depende del modo y estado. Establecido por el marco en la configuración de la solicitud.
AF_TRIGGER_IDLE Sin disparador actual.
AF_TRIGGER_START Activa el inicio del escaneo AF. El efecto depende del modo y del estado.
AF_TRIGGER_CANCEL Cancele el escaneo AF actual, si corresponde, y restablezca el algoritmo a los valores predeterminados.
Entradas de metadatos adicionales
ANDROID_CONTROL_AF_REGIONS Control para seleccionar las regiones del campo de visión (FOV) que se deben utilizar para determinar un buen enfoque. Esto se aplica a todos los modos AF que buscan enfoque. Establecido por el marco en la configuración de la solicitud.

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

Entradas principales de metadatos
ANDROID_CONTROL_AE_MODE Control para seleccionar el modo de exposición automática actual. Establecido por el marco en la configuración de la solicitud.
AE_MODE_OFF La exposición automática está desactivada; el usuario controla la exposición, la ganancia, la duración del cuadro y el flash.
AE_MODE_ON Exposición automática estándar, con control de flash desactivado. El usuario puede configurar el flash para que se dispare o para que funcione en modo antorcha.
AE_MODE_ON_AUTO_FLASH Exposición automática estándar, con flash activado a discreción de HAL para captura previa y captura fija. Control de usuario del flash deshabilitado.
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 precaptura. Control de usuario del flash deshabilitado.
AE_MODE_ON_AUTO_FLASH_REDEYE Exposición automática estándar, con flash activado a discreción de HAL para captura previa y captura fija. Utilice una ráfaga de flash al final de la secuencia de precaptura para reducir los ojos rojos en la imagen final. Control de usuario del flash deshabilitado.
ANDROID_CONTROL_AE_STATE Metadatos dinámicos que describen el estado actual del algoritmo AE, informado por HAL en los metadatos de resultados.
AE_STATE_INACTIVE Estado inicial de AE ​​después del cambio de modo. Cuando se abre el dispositivo, debe iniciarse en este estado.
AE_STATE_SEARCHING AE no converge a un buen valor y está ajustando los parámetros de exposición.
AE_STATE_CONVERGED AE ha encontrado buenos valores de exposición para la escena actual y los parámetros de exposición no cambian. HAL puede abandonar espontáneamente este estado para buscar una solución mejor.
AE_STATE_LOCKED AE se ha bloqueado con el control AE_LOCK. Los valores de exposición no cambian.
AE_STATE_FLASH_REQUIRED HAL ha convergido la exposición pero cree que se requiere flash para obtener una imagen suficientemente brillante. Se utiliza para determinar si se puede utilizar un fotograma sin retraso de obturación.
AE_STATE_PRECAPTURE El HAL está en medio de una secuencia previa a la captura. Dependiendo del modo AE, este modo puede implicar disparar el flash para medir 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 marco en la configuración de la solicitud.
PRECAPTURE_TRIGGER_IDLE Sin disparador actual.
PRECAPTURE_TRIGGER_START Inicie una secuencia de precaptura. HAL debería utilizar las solicitudes posteriores para medir una buena exposición/equilibrio de blancos para una próxima captura de alta resolución.
Entradas de metadatos adicionales
ANDROID_CONTROL_AE_LOCK Control para bloquear los controles AE en sus valores actuales.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Control para ajustar el punto de brillo objetivo del algoritmo AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Control para seleccionar el rango de velocidad de fotogramas objetivo para el algoritmo AE. La rutina AE no puede cambiar la velocidad de cuadros para que esté fuera de estos límites.
ANDROID_CONTROL_AE_REGIONS Control para seleccionar las regiones del FOV que se deben utilizar para determinar buenos niveles de exposición. Esto se aplica a todos los modos AE además de APAGADO.

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

Entradas principales de metadatos
ANDROID_CONTROL_AWB_MODE Control para seleccionar el modo de balance de blancos actual.
AWB_MODE_OFF El balance de blancos automático está desactivado. 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 utilizando transformaciones más complejas que una matriz simple.
AWB_MODE_INCANDESCENT Los ajustes de balance de blancos fijos son buenos para iluminación incandescente (tungsteno) de interiores, aproximadamente 2700K.
AWB_MODE_FLUORESCENT Se corrigió la configuración del balance de blancos, buena para iluminación fluorescente, aproximadamente 5000 K.
AWB_MODE_WARM_FLUORESCENT Se corrigió la configuración del balance de blancos, buena para iluminación fluorescente, aproximadamente 3000K.
AWB_MODE_DAYLIGHT Se corrigió la configuración del balance de blancos, buena para la luz del día, aproximadamente 5500K.
AWB_MODE_CLOUDY_DAYLIGHT Se corrigió la configuración del balance de blancos, buena para luz diurna nublada, aproximadamente 6500K.
AWB_MODE_TWILIGHT Se corrigió la configuración del balance de blancos, buena para el amanecer o el atardecer, aproximadamente 15000K.
AWB_MODE_SHADE Se corrigió la configuración del balance de blancos, buena para áreas iluminadas indirectamente por el sol, aproximadamente 7500K.
ANDROID_CONTROL_AWB_STATE Metadatos dinámicos que describen el estado actual del algoritmo AWB, informado por HAL en los metadatos del resultado.
AWB_STATE_INACTIVE Estado inicial de AWB después del cambio de modo. Cuando se abre el dispositivo, debe iniciarse en este estado.
AWB_STATE_SEARCHING AWB no converge a un buen valor y está cambiando los parámetros de ajuste de color.
AWB_STATE_CONVERGED AWB ha encontrado buenos valores de ajuste de color para la escena actual y los parámetros no cambian. HAL puede abandonar espontáneamente este estado para buscar una solución mejor.
AWB_STATE_LOCKED AWB se ha bloqueado 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 de AWB a sus valores actuales.
ANDROID_CONTROL_AWB_REGIONS Control para seleccionar las regiones del FOV que se deben utilizar para determinar un buen equilibrio de color. Esto se aplica sólo al modo de balance de blancos automático.

Notas generales de transición de la máquina de estados

Al cambiar entre los modos AF, AE o AWB siempre se restablece el estado del algoritmo a INACTIVO. De manera similar, cambiar entre CONTROL_MODE o CONTROL_SCENE_MODE si CONTROL_MODE == USE_SCENE_MODE restablece todos los estados del algoritmo a INACTIVO.

Las tablas siguientes son por modo.

Máquinas de estados AF

modo = AF_MODE_OFF o AF_MODE_EDOF
Estado Causa de transformación Nuevo estado Notas
INACTIVO AF está desactivado
modo = AF_MODE_AUTO o AF_MODE_MACRO
Estado Causa de transformación Nuevo estado Notas
INACTIVO AF_TRIGGER ACTIVE_SCAN

Iniciar barrido AF

Lente ahora en movimiento

ACTIVE_SCAN Barrido AF realizado FOCALED_LOCKED

Si la FA tiene éxito

Lente ahora bloqueada

ACTIVE_SCAN Barrido AF realizado NOT_FOCUSED_LOCKED

Si la FA tiene éxito

Lente ahora bloqueada

ACTIVE_SCAN AF_CANCELAR INACTIVO

Cancelar/restablecer AF

Lente ahora bloqueada

FOCALED_LOCKED AF_CANCELAR INACTIVO Cancelar/restablecer AF
FOCALED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nuevo barrido

Lente ahora en movimiento

NOT_FOCUSED_LOCKED AF_CANCELAR INACTIVO Cancelar/restablecer AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nuevo barrido

Lente ahora en movimiento

Todos los Estados Cambio de modalidad INACTIVO
modo = AF_MODE_CONTINUOUS_VIDEO
Estado Causa de transformación Nuevo estado Notas
INACTIVO HAL inicia un nuevo escaneo PASSIVE_SCAN

Iniciar barrido AF

Lente ahora en movimiento

INACTIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta de estado de AF

Lente ahora bloqueada

PASSIVE_SCAN HAL completa el escaneo actual PASIVO_ENFOCADO

Finalizar escaneo AF

Lente ahora bloqueada

PASSIVE_SCAN AF_TRIGGER FOCALED_LOCKED

Transformación inmediata si el enfoque es bueno

Lente ahora bloqueada

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformación inmediata si el enfoque es malo.

Lente ahora bloqueada

PASSIVE_SCAN AF_CANCELAR INACTIVO

Restablecer la posición de la lente

Lente ahora bloqueada

PASIVO_ENFOCADO HAL inicia un nuevo escaneo PASSIVE_SCAN

Iniciar escaneo AF

Lente ahora en movimiento

PASIVO_ENFOCADO AF_TRIGGER FOCALED_LOCKED

Transformación inmediata si el enfoque es bueno

Lente ahora bloqueada

PASIVO_ENFOCADO AF_TRIGGER NOT_FOCUSED_LOCKED Transformación inmediata si el enfoque es malo.

Lente ahora bloqueada

FOCALED_LOCKED AF_TRIGGER FOCALED_LOCKED Sin efecto
FOCALED_LOCKED AF_CANCELAR INACTIVO Reiniciar escaneo AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Sin efecto
NOT_FOCUSED_LOCKED AF_CANCELAR INACTIVO Reiniciar escaneo AF
modo = AF_MODE_CONTINUOUS_PICTURE
Estado Causa de transformación Nuevo estado Notas
INACTIVO HAL inicia un nuevo escaneo PASSIVE_SCAN

Iniciar escaneo AF

Lente ahora en movimiento

INACTIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta de estado de AF

Lente ahora bloqueada

PASSIVE_SCAN HAL completa el escaneo actual PASIVO_ENFOCADO Finalizar escaneo AF

Lente ahora bloqueada

PASSIVE_SCAN AF_TRIGGER FOCALED_LOCKED

Transformación eventual una vez que se enfoque bien

Lente ahora bloqueada

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformación eventual si no se puede concentrar

Lente ahora bloqueada

PASSIVE_SCAN AF_CANCELAR INACTIVO

Restablecer la posición de la lente

Lente ahora bloqueada

PASIVO_ENFOCADO HAL inicia un nuevo escaneo PASSIVE_SCAN

Iniciar escaneo AF

Lente ahora en movimiento

PASIVO_ENFOCADO AF_TRIGGER FOCALED_LOCKED

Transformación inmediata si el enfoque es bueno

Lente ahora bloqueada

PASIVO_ENFOCADO AF_TRIGGER NOT_FOCUSED_LOCKED

Transformación inmediata si el enfoque es malo.

Lente ahora bloqueada

FOCALED_LOCKED AF_TRIGGER FOCALED_LOCKED Sin efecto
FOCALED_LOCKED AF_CANCELAR INACTIVO Reiniciar escaneo AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Sin efecto
NOT_FOCUSED_LOCKED AF_CANCELAR INACTIVO Reiniciar escaneo AF

Máquinas de estados AE y AWB

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

modo = AE_MODE_OFF / modo AWB no AUTO
Estado Causa de transformación Nuevo estado Notas
INACTIVO AE/AWB desactivado
modo = AE_MODE_ON_* / AWB_MODE_AUTO
Estado Causa de transformación Nuevo estado Notas
INACTIVO HAL inicia el escaneo AE/AWB BUSCANDO
INACTIVO AE/AWB_LOCK activado BLOQUEADO Valores bloqueados
BUSCANDO HAL finaliza el escaneo AE/AWB CONVERGIDO Buenos valores, no cambian.
BUSCANDO HAL finaliza el escaneo AE FLASH_REQUIRED Convergido pero demasiado oscuro sin flash
BUSCANDO AE/AWB_LOCK activado BLOQUEADO Valores bloqueados
CONVERGIDO HAL inicia el escaneo AE/AWB BUSCANDO Valores bloqueados
CONVERGIDO AE/AWB_LOCK activado BLOQUEADO Valores bloqueados
FLASH_REQUIRED HAL inicia el escaneo 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 CONVERGIDO Valores buenos después del desbloqueo.
BLOQUEADO AE_LOCK desactivado FLASH_REQUIRED Buena exposición, pero demasiado oscura.
Todos los estados AE PRECAPTURE_START PRECAPTURA Iniciar secuencia de precaptura
PRECAPTURA Secuencia realizada, AE_LOCK desactivado CONVERGIDO Listo para captura de alta calidad
PRECAPTURA Secuencia realizada, AE_LOCK activado BLOQUEADO Listo para captura de alta calidad

Habilitar el control manual

También intervienen varios controles en la configuración de los bloques del dispositivo 3A para permitir el control directo de la aplicación.

El modelo HAL para el control 3A es que para cada solicitud, HAL inspecciona el estado de los campos de control 3A. Si alguna rutina 3A está habilitada, esa rutina anula las variables de control que se relacionan con esa rutina y estos valores de anulación están disponibles en los metadatos de resultados para esa captura. Entonces, por ejemplo, si la exposición automática está habilitada en una solicitud, HAL debe sobrescribir los campos de exposición, ganancia y duración del cuadro (y potencialmente los campos de flash, según el modo AE) de la solicitud. La lista de controles relevantes es:

Nombre del control Unidad Notas
android.control.modo enumeración: APAGADO, AUTO, USE_SCENE_MODE Control 3A de alto nivel. Cuando se configura en APAGADO, todo el control 3A por parte del HAL se desactiva. La aplicación 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 en android.control.* están en su mayoría deshabilitados y HAL implementa una de las configuraciones del modo de escena (como ACCIÓN, PUESTA DEL SOL o FIESTA) como desee.
android.control.afModo enumeración APAGADO significa control manual del enfoque de la lente a través de android.lens.focusDistance.
android.control.aeModo enumeración APAGADO significa control manual de exposición/ganancia/duración del cuadro a través de android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enumeración APAGADO significa control manual del balance de blancos.