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