3A Modos y transición de estado

Si bien los algoritmos 3A reales están a la altura de la implementación de HAL, la interfaz HAL define una descripción de 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 3A.

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

Activar una acción 3A implica simplemente configurar la entrada de activación relevante en la configuración para que la siguiente solicitud indique el inicio de la activación. Por ejemplo, el activador para iniciar un escaneo de enfoque automático es establecer 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 usar 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án efectivamente APAGADOS, 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 metadatos de modo, estado y activación, como se indica en la siguiente sección.
  • En USE_SCENE_MODE, el valor de la entrada ANDROID_CONTROL_SCENE_MODE debe usarse para determinar el comportamiento de las rutinas 3A. En SCENE_MODE que no sean FACE_PRIORITY, HAL debe anular los valores de ANDROID_CONTROL_AE/AWB/AF_MODE para que sea el modo que prefiera para SCENE_MODE seleccionado. Por ejemplo, HAL puede preferir SCENE_MODE_NIGHT para usar el modo AF CONTINUOUS_FOCUS. Cualquier selección de 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 orientarse hacia la medición y el enfoque en cualquier rostro detectado en la escena.

Ajustes de enfoque automático y entradas de resultados

Entradas de metadatos principales
ANDROID_CONTROL_AF_MODO 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á deshabilitado; el marco/aplicación controla directamente la posición de la lente.
AF_MODE_AUTO Enfoque automático de un solo barrido. Sin movimiento de la lente a menos que se active el AF.
AF_MODE_MACRO Enfoque automático de primer plano de un solo barrido. Sin movimiento de la lente a menos que se active AF
AF_MODE_CONTINUOUS_VIDEO Enfoque continuo suave, para grabar video. La activación bloquea inmediatamente el enfoque en la posición actual. Cancelar reanuda el enfoque continuo.
AF_MODE_CONTINUOUS_PICTURE Enfoque continuo rápido, para capturar imágenes fijas sin retardo de obturación. La activación bloquea el enfoque una vez que concluye el barrido actualmente activo. Cancelar reanuda el enfoque continuo.
AF_MODE_EDOF Enfoque avanzado de profundidad de campo extendida. No hay escaneo de enfoque automático, por lo que activar o cancelar uno no tiene ningún efecto. Las imágenes son enfocadas automáticamente por el HAL.
ANDROID_CONTROL_AF_ESTADO Metadatos dinámicos que describen el estado actual del algoritmo AF, informado por HAL en los metadatos de resultados.
AF_ESTADO_INACTIVO No se ha realizado el enfoque o se ha restablecido el algoritmo. La lente no se mueve. Siempre el estado para 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. La lente se está moviendo.
AF_ESTADO_PASIVO_ENFOCADO Un algoritmo de enfoque continuo cree que está bien enfocado. La lente no se mueve. El HAL puede salir espontáneamente de este estado.
AF_ESTADO_PASIVO_DESENFOCADO Un algoritmo de enfoque continuo cree que no está bien enfocado. La lente no se mueve. El HAL puede salir espontáneamente de este estado.
AF_STATE_ACTIVE_SCAN Se está realizando un análisis activado por el usuario.
AF_ESTADO_ENFOCADO_BLOQUEADO El algoritmo AF cree que está enfocado. La lente no se mueve.
AF_ESTADO_NO_ENFOCADO_BLOQUEADO 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 el estado. Establecido por el marco en la configuración de la solicitud.
AF_TRIGGER_IDLE Sin disparador actual.
AF_TRIGGER_START Activa el inicio de la exploración AF. El efecto depende del modo y el estado.
AF_TRIGGER_CANCEL Cancele el escaneo AF actual, si lo hay, 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 deben usarse para determinar un buen enfoque. Esto se aplica a todos los modos AF que escanean para enfocar. Establecido por el marco en la configuración de la solicitud.

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

Entradas de metadatos principales
ANDROID_CONTROL_AE_MODO 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á deshabilitada; 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 deshabilitado. El usuario puede configurar el flash en modo fuego o antorcha.
AE_MODE_ON_AUTO_FLASH Exposición automática estándar, con flash encendido a discreción de HAL para precaptura y captura fija. Control de usuario de flash deshabilitado.
AE_MODE_ON_ALWAYS_FLASH Exposición automática estándar, con flash siempre disparado para captura y, a discreción de HAL, para precaptura. Control de usuario de flash deshabilitado.
AE_MODE_ON_AUTO_FLASH_OJO ROJO Exposición automática estándar, con flash encendido a discreción de HAL para precaptura 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 de flash deshabilitado.
ANDROID_CONTROL_AE_ESTADO Metadatos dinámicos que describen el estado actual del algoritmo AE, informado por HAL en los metadatos de resultados.
AE_ESTADO_INACTIVO Estado inicial de AE ​​después del cambio de modo. Cuando se abre el dispositivo, debe comenzar en este estado.
AE_ESTADO_BÚSQUEDA AE no converge a un buen valor y está ajustando los parámetros de exposición.
AE_ESTADO_CONVERGIDO 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 mejor solución.
AE_ESTADO_BLOQUEADO AE se ha bloqueado con el control AE_LOCK. Los valores de exposición no cambian.
AE_STATE_FLASH_REQUIRED El HAL tiene una exposición convergente, pero cree que se requiere flash para obtener una imagen suficientemente brillante. Se utiliza para determinar si se puede utilizar un fotograma con retardo de obturación cero.
AE_STATE_PRECAPTURE El HAL está en medio de una secuencia previa a la captura. Según el 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. El HAL debe usar las solicitudes posteriores para medir una buena exposición/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 AE a sus valores actuales.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSACIÓN 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 de destino para el algoritmo AE. La rutina 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 deben usarse para determinar buenos niveles de exposición. Esto se aplica a todos los modos AE además de APAGADO.

Ajustes de balance de blancos automático y entradas de resultados

Entradas de metadatos principales
ANDROID_CONTROL_AWB_MODE Control para seleccionar el modo actual de balance de blancos.
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_INCANDESCENTE Ajustes de balance de blancos fijos buenos para iluminación interior incandescente (tungsteno), aproximadamente 2700K.
AWB_MODE_FLUORESCENTE Ajustes de balance de blancos fijos buenos para iluminación fluorescente, aproximadamente 5000K.
AWB_MODE_WARM_FLUORESCENTE Ajustes de balance de blancos fijos buenos para iluminación fluorescente, aproximadamente 3000K.
AWB_MODE_LUZ DEL DÍA Ajustes de balance de blancos fijos buenos para la luz del día, aproximadamente 5500K.
AWB_MODE_CLOUDY_DAYLIGHT Los ajustes de balance de blancos fijos son buenos para la luz del día nublada, aproximadamente 6500K.
AWB_MODE_CREPÚSCULO Ajustes de balance de blancos fijos buenos para el atardecer/amanecer, aproximadamente 15000K.
AWB_MODE_SHADE Ajustes de balance de blancos fijos buenos para áreas iluminadas indirectamente por el sol, aproximadamente 7500K.
ANDROID_CONTROL_AWB_ESTADO Metadatos dinámicos que describen el estado actual del algoritmo AWB, informado por HAL en los metadatos de resultados.
AWB_ESTADO_INACTIVO Estado inicial de AWB después del cambio de modo. Cuando se abre el dispositivo, debe comenzar en este estado.
AWB_ESTADO_BÚSQUEDA AWB no converge a un buen valor y está cambiando los parámetros de ajuste de color.
AWB_ESTADO_CONVERGIDO 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 mejor solución.
AWB_ESTADO_BLOQUEADO 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 AWB a sus valores actuales.
ANDROID_CONTROL_AWB_REGIONS Control para seleccionar las regiones del FOV que deben usarse para determinar un buen balance de color. Esto se aplica solo al modo de balance de blancos automático.

Notas de transición de la máquina de estado general

Cambiar entre los modos AF, AE o AWB siempre 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 siguientes tablas son por modo.

Máquinas de estado AF

modo = AF_MODE_OFF o AF_MODE_EDOF
Estado Causa de transformación nuevo estado notas
INACTIVO AF está deshabilitado
modo = AF_MODE_AUTO o AF_MODE_MACRO
Estado Causa de transformación nuevo estado notas
INACTIVO AF_TRIGGER ESCANEO_ACTIVO

Iniciar barrido AF

Lente ahora en movimiento

ESCANEO_ACTIVO Barrido AF hecho ENFOCADO_BLOQUEADO

Si AF tiene éxito

Lente ahora bloqueada

ESCANEO_ACTIVO Barrido AF hecho NO_ENFOCADO_BLOQUEADO

Si AF tiene éxito

Lente ahora bloqueada

ESCANEO_ACTIVO AF_CANCELAR INACTIVO

Cancelar/restablecer AF

Lente ahora bloqueada

ENFOCADO_BLOQUEADO AF_CANCELAR INACTIVO Cancelar/restablecer AF
ENFOCADO_BLOQUEADO AF_TRIGGER ESCANEO_ACTIVO

Iniciar nuevo barrido

Lente ahora en movimiento

NO_ENFOCADO_BLOQUEADO AF_CANCELAR INACTIVO Cancelar/restablecer AF
NO_ENFOCADO_BLOQUEADO AF_TRIGGER ESCANEO_ACTIVO

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 PASIVO_ESCANEAR

Iniciar barrido AF

Lente ahora en movimiento

INACTIVO AF_TRIGGER NO_ENFOCADO_BLOQUEADO

Consulta de estado AF

Lente ahora bloqueada

PASIVO_ESCANEAR HAL completa el escaneo actual PASIVO_ENFOCADO

Fin de escaneo AF

Lente ahora bloqueada

PASIVO_ESCANEAR AF_TRIGGER ENFOCADO_BLOQUEADO

Transformación inmediata si el enfoque es bueno

Lente ahora bloqueada

PASIVO_ESCANEAR AF_TRIGGER NO_ENFOCADO_BLOQUEADO

Transformación inmediata si el enfoque es malo

Lente ahora bloqueada

PASIVO_ESCANEAR AF_CANCELAR INACTIVO

Restablecer la posición de la lente

Lente ahora bloqueada

PASIVO_ENFOCADO HAL inicia un nuevo escaneo PASIVO_ESCANEAR

Iniciar escaneo AF

Lente ahora en movimiento

PASIVO_ENFOCADO AF_TRIGGER ENFOCADO_BLOQUEADO

Transformación inmediata si el enfoque es bueno

Lente ahora bloqueada

PASIVO_ENFOCADO AF_TRIGGER NO_ENFOCADO_BLOQUEADO Transformación inmediata si el enfoque es malo

Lente ahora bloqueada

ENFOCADO_BLOQUEADO AF_TRIGGER ENFOCADO_BLOQUEADO Sin efecto
ENFOCADO_BLOQUEADO AF_CANCELAR INACTIVO Reiniciar escaneo AF
NO_ENFOCADO_BLOQUEADO AF_TRIGGER NO_ENFOCADO_BLOQUEADO Sin efecto
NO_ENFOCADO_BLOQUEADO 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 PASIVO_ESCANEAR

Iniciar escaneo AF

Lente ahora en movimiento

INACTIVO AF_TRIGGER NO_ENFOCADO_BLOQUEADO

Consulta de estado AF

Lente ahora bloqueada

PASIVO_ESCANEAR HAL completa el escaneo actual PASIVO_ENFOCADO Fin de escaneo AF

Lente ahora bloqueada

PASIVO_ESCANEAR AF_TRIGGER ENFOCADO_BLOQUEADO

Transformación eventual una vez que se enfoca bien

Lente ahora bloqueada

PASIVO_ESCANEAR AF_TRIGGER NO_ENFOCADO_BLOQUEADO

Transformación eventual si no puede concentrarse

Lente ahora bloqueada

PASIVO_ESCANEAR AF_CANCELAR INACTIVO

Restablecer la posición de la lente

Lente ahora bloqueada

PASIVO_ENFOCADO HAL inicia un nuevo escaneo PASIVO_ESCANEAR

Iniciar escaneo AF

Lente ahora en movimiento

PASIVO_ENFOCADO AF_TRIGGER ENFOCADO_BLOQUEADO

Transformación inmediata si el enfoque es bueno

Lente ahora bloqueada

PASIVO_ENFOCADO AF_TRIGGER NO_ENFOCADO_BLOQUEADO

Transformación inmediata si el enfoque es malo

Lente ahora bloqueada

ENFOCADO_BLOQUEADO AF_TRIGGER ENFOCADO_BLOQUEADO Sin efecto
ENFOCADO_BLOQUEADO AF_CANCELAR INACTIVO Reiniciar escaneo AF
NO_ENFOCADO_BLOQUEADO AF_TRIGGER NO_ENFOCADO_BLOQUEADO Sin efecto
NO_ENFOCADO_BLOQUEADO AF_CANCELAR INACTIVO Reiniciar escaneo AF

Máquinas de estado 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 a continuación que se refieren a esos dos estados deben ignorarse para la máquina de estado 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 en BLOQUEADO Valores bloqueados
BUSCANDO HAL finaliza el escaneo AE/AWB CONVERGIDO Buenos valores, sin cambiar
BUSCANDO HAL finaliza el escaneo AE FLASH_REQUERIDO Convergido pero demasiado oscuro sin flash
BUSCANDO AE/AWB_LOCK en BLOQUEADO Valores bloqueados
CONVERGIDO HAL inicia el escaneo AE/AWB BUSCANDO Valores bloqueados
CONVERGIDO AE/AWB_LOCK en BLOQUEADO Valores bloqueados
FLASH_REQUERIDO HAL inicia el escaneo AE/AWB BUSCANDO Valores bloqueados
FLASH_REQUERIDO AE/AWB_LOCK en BLOQUEADO Valores bloqueados
BLOQUEADO AE/AWB_LOCK desactivado BUSCANDO Los valores no son buenos después de desbloquear
BLOQUEADO AE/AWB_LOCK desactivado CONVERGIDO Valores buenos después de desbloquear
BLOQUEADO AE_LOCK desactivado FLASH_REQUERIDO Exposición buena, pero demasiado oscura.
Todos los estados AE PRECAPTURE_START PRECAPTURA Iniciar secuencia de precaptura
PRECAPTURA Secuencia completada, AE_LOCK desactivado CONVERGIDO Listo para la captura de alta calidad
PRECAPTURA Secuencia completada, AE_LOCK activado BLOQUEADO Listo para la captura de alta calidad

Habilitación del control manual

Varios controles también están involucrados 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, el HAL inspecciona el estado de los campos de control 3A. Si cualquier rutina 3A está habilitada, esa rutina anula las variables de control que se relacionan con esa rutina, y estos valores anulados 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, la 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 de control Unidad notas
android.control.modo enumeración: APAGADO, AUTOMÁTICO, USE_SCENE_MODE Control 3A de alto nivel. Cuando se establece en APAGADO, todo el control 3A por parte de HAL está deshabilitado. La aplicación debe establecer los campos para los parámetros de captura por sí misma. Cuando se establece en AUTO, los controles de algoritmo individuales en android.control.* están en vigor, 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 DE SOL o FIESTA) como desee.
android.control.afMode enumeración APAGADO significa control manual del enfoque de la lente a través de android.lens.focusDistance.
android.control.aeMode enumeración APAGADO significa control manual de la 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.