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