Modos 3A e transição de estado

Esta página descreve os modos 3A e as máquinas de estados para um dispositivo Android. A interface HAL da câmera, que define as máquinas de estado em um nível alto, permite que a implementação da HAL e o framework do Android comuniquem os estados atuais do 3A e ativem eventos do 3A. A implementação do HAL é responsável pelos algoritmos 3A que controlam as configurações do modo 3A e as transições de estado.

Quando o dispositivo é aberto, todos os estados 3A individuais precisam ser STATE_INACTIVE. A configuração de streaming não redefiniu o 3A. Por exemplo, o foco bloqueado precisa ser mantido em toda a chamada configure().

Para acionar uma ação de 3A, basta definir a entrada de gatilho relevante nas configurações da próxima solicitação para indicar o início do gatilho. Por exemplo, o acionador para iniciar uma verificação de autofoco é definir a entrada ANDROID_CONTROL_AF_TRIGGER como ANDROID_CONTROL_AF_TRIGGER_START para uma solicitação. O cancelamento de uma verificação de autofoco é acionado definindo ANDROID_CONTROL_AF_TRIGGER como ANDROID_CONTRL_AF_TRIGGER_CANCEL. Caso contrário, a entrada não vai existir ou será definida como ANDROID_CONTROL_AF_TRIGGER_IDLE. Cada solicitação com uma entrada de gatilho definida como um valor diferente de IDLE será tratada como um evento de acionamento independente.

No nível superior, o 3A é controlado pela configuração ANDROID_CONTROL_MODE. Ele seleciona entre nenhum 3A (ANDROID_CONTROL_MODE_OFF), modo AUTO normal (ANDROID_CONTROL_MODE_AUTO) e o uso da configuração do modo de cena (ANDROID_CONTROL_USE_SCENE_MODE):

  • No modo DESLIGADO, cada um dos modos de foco automático (AF), de exposição automática (AE) e de balanço de branco automático (AWB) são desativados, e nenhum dos controles de captura pode ser substituído pelas rotinas 3A.
  • No modo AUTO, os modos AF, AE e AWB executam algoritmos independentes e têm entradas de metadados de modo, estado e acionador, conforme listado na próxima seção.
  • Em USE_SCENE_MODE, o valor da entrada ANDROID_CONTROL_SCENE_MODE precisa ser usado para determinar o comportamento das rotinas 3A. Em SCENE_MODEs diferentes de FACE_PRIORITY, o HAL precisa substituir os valores de ANDROID_CONTROL_AE/AWB/AF_MODE para ser o modo preferido para o SCENE_MODE selecionado. Por exemplo, o HAL pode preferir SCENE_MODE_NIGHT para usar o modo AF CONTINUOUS_FOCUS. Qualquer seleção do usuário de AE/AWB/AF_MODE quando a cena precisa ser ignorada para esses modos de cena.
  • Para SCENE_MODE_FACE_PRIORITY, os controles AE/AWB/AFMODE funcionam como em ANDROID_CONTROL_MODE_AUTO, mas as rotinas 3A precisam se inclinar para a medição e o foco em todas as faces detectadas na cena.

Configurações de foco automático e entradas de resultados

Entradas de metadados principais
ANDROID_CONTROL_AF_MODE Controle para selecionar o modo de foco automático atual. Definido pelo framework nas configurações da solicitação.
AF_MODE_OFF O AF está desativado. O framework/app controla diretamente a posição da lente.
AF_MODE_AUTO Foco automático de varredura única. Nenhum movimento da lente, a menos que o AF seja acionado.
AF_MODE_MACRO Foco automático de aproximação com varredura única. Nenhum movimento da lente, a menos que o AF seja acionado
AF_MODE_CONTINUOUS_VIDEO Foco contínuo suave para gravação de vídeo. Acionar imediatamente trava o foco na posição atual. O cancelamento retoma o foco contínuo.
AF_MODE_CONTINUOUS_PICTURE Foco contínuo rápido, para captura de fotos estáticas sem atraso do obturador. O acionamento bloqueia o foco quando a varredura ativa é concluída. O cancelamento retoma o foco contínuo.
AF_MODE_EDOF Foco avançado com profundidade de campo estendida. Não há verificação de foco automático. Portanto, acionar ou cancelar uma não tem efeito. As imagens são focadas automaticamente pelo HAL.
ANDROID_CONTROL_AF_STATE Metadados dinâmicos que descrevem o estado atual do algoritmo de AF, informados pelo HAL nos metadados do resultado.
AF_STATE_INACTIVE Nenhuma segmentação foi feita ou o algoritmo foi redefinido. A lente não está se movendo. Sempre o estado de MODE_OFF ou MODE_EDOF. Quando o dispositivo é aberto, ele precisa começar nesse estado.
AF_STATE_PASSIVE_SCAN Um algoritmo de foco contínuo está procurando um bom foco. A lente está se movendo.
AF_STATE_PASSIVE_FOCUSED Um algoritmo de foco contínuo acredita que está bem focado. A lente não está se movendo. O HAL pode sair desse estado de forma espontânea.
AF_STATE_PASSIVE_UNFOCUSED Um algoritmo de foco contínuo acredita que não está bem focado. A lente não está se movendo. O HAL pode sair desse estado de forma espontânea.
AF_STATE_ACTIVE_SCAN Uma verificação acionada pelo usuário está em andamento.
AF_STATE_FOCUSED_LOCKED O algoritmo AF acredita que está focado. A lente não está se movendo.
AF_STATE_NOT_FOCUSED_LOCKED O algoritmo de AF não conseguiu focar. A lente não está se movendo.
ANDROID_CONTROL_AF_TRIGGER Controle para iniciar uma verificação de foco automático, cujo significado depende do modo e do estado. Definido pelo framework nas configurações da solicitação.
AF_TRIGGER_IDLE Nenhum acionador atual.
AF_TRIGGER_START Acionar o início da verificação de AF. O efeito depende do modo e do estado.
AF_TRIGGER_CANCEL Cancela a verificação de AF atual, se houver, e redefine o algoritmo para o padrão.
Outras entradas de metadados
ANDROID_CONTROL_AF_REGIONS Controle para selecionar as regiões do campo de visão (FOV, na sigla em inglês) que devem ser usadas para determinar um bom foco. Isso se aplica a todos os modos de AF que procuram o foco. Definido pelo framework nas configurações da solicitação.

Configurações de exposição automática e entradas de resultados

Entradas de metadados principais
ANDROID_CONTROL_AE_MODE Controle para selecionar o modo de exposição automática atual. Definido pelo framework nas configurações da solicitação.
AE_MODE_OFF A exposição automática está desativada. O usuário controla a exposição, o ganho, a duração do frame e o flash.
AE_MODE_ON Autoexposição padrão, com o controle de flash desativado. O usuário pode definir o flash para acionar ou para o modo lanterna.
AE_MODE_ON_AUTO_FLASH Exposição automática padrão, com flash ativado a critério do HAL para pré-captura e captura de fotos. Controle do usuário do flash desativado.
AE_MODE_ON_ALWAYS_FLASH Exposição automática padrão, com o flash sempre acionado para captura e a critério do HAL para pré-captura. Controle do usuário do flash desativado.
AE_MODE_ON_AUTO_FLASH_REDEYE Exposição automática padrão, com flash ativado a critério do HAL para pré-captura e captura de fotos. Use uma explosão de flash no final da sequência de pré-captura para reduzir o efeito de olhos vermelhos na foto final. O controle do usuário do flash está desativado.
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY O aumento do modo pouca luz ajusta automaticamente o brilho do fluxo de visualização em condições de pouca luz. Isso pode resultar em mais ruído e desfoque de movimento em condições de pouca luz. Os fabricantes de dispositivos precisam garantir que a taxa de frames não fique abaixo de 10 QPS.
ANDROID_CONTROL_AE_STATE Metadados dinâmicos que descrevem o estado atual do algoritmo de AE, informados pelo HAL nos metadados do resultado.
AE_STATE_INACTIVE Estado inicial da AE após a mudança de modo. Quando o dispositivo é aberto, ele precisa começar nesse estado.
AE_STATE_SEARCHING A AE não está convergindo para um valor bom e está ajustando os parâmetros de exposição.
AE_STATE_CONVERGED A AE encontrou bons valores de exposição para a cena atual, e os parâmetros de exposição não estão mudando. O HAL pode sair desse estado espontaneamente para buscar uma solução melhor.
AE_STATE_LOCKED A AE foi bloqueada com o controle AE_LOCK. Os valores de exposição não estão mudando.
AE_STATE_FLASH_REQUIRED O HAL convergiu a exposição, mas acredita que o flash é necessário para uma imagem suficientemente clara. Usado para determinar se um frame de zero-shutter-lag pode ser usado.
AE_STATE_PRECAPTURE O HAL está no meio de uma sequência de pré-captura. Dependendo do modo AE, esse modo pode envolver o disparo do flash para medição ou uma série de pulsos de flash para redução de olhos vermelhos.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER Controle para iniciar uma sequência de medição antes de capturar uma imagem de alta qualidade. Definido pelo framework nas configurações da solicitação.
PRECAPTURE_TRIGGER_IDLE Nenhum acionador atual.
PRECAPTURE_TRIGGER_START Iniciar uma sequência de pré-captura. O HAL precisa usar as solicitações subsequentes para medir uma boa exposição/equilíbrio de branco para uma próxima captura de alta resolução.
Outras entradas de metadados
ANDROID_CONTROL_AE_LOCK Controle para travar os controles de AE nos valores atuais.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Controle para ajustar o ponto de brilho de destino do algoritmo de AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Controle para selecionar o intervalo de frame rate desejado para o algoritmo de AE. A rotina de AE não pode mudar a taxa de frames para fora desses limites.
ANDROID_CONTROL_AE_REGIONS Controle para selecionar as regiões do FOV que devem ser usadas para determinar bons níveis de exposição. Isso se aplica a todos os modos de AE, exceto "OFF".

Configurações de balanço de branco automático e entradas de resultados

Entradas de metadados principais
ANDROID_CONTROL_AWB_MODE Controle para selecionar o modo de equilíbrio de branco atual.
AWB_MODE_OFF O balanço de branco automático está desativado. O usuário controla a matriz de cores.
AWB_MODE_AUTO O equilíbrio de branco automático está ativado. O 3A controla a transformação de cor, possivelmente usando transformações mais complexas do que uma matriz simples.
AWB_MODE_INCANDESCENT Configurações fixas de balanço de branco boas para iluminação incandescente (tungstênio) interna, aproximadamente 2700K.
AWB_MODE_FLUORESCENT Configurações fixas de balanço de branco boas para iluminação fluorescente, aproximadamente 5.000K.
AWB_MODE_WARM_FLUORESCENT Configurações fixas de balanço de branco boas para iluminação fluorescente, aproximadamente 3000K.
AWB_MODE_DAYLIGHT Configurações fixas de balanço de branco boas para luz do dia, aproximadamente 5500K.
AWB_MODE_CLOUDY_DAYLIGHT Configurações fixas de balanço de branco boas para luz do dia nublada, aproximadamente 6.500 K.
AWB_MODE_TWILIGHT Configurações fixas de balanço de branco boas para o pôr/nascer do sol, aproximadamente 15.000 K.
AWB_MODE_SHADE Correção de configurações de balanço de branco boas para áreas iluminadas indiretamente pelo sol, cerca de 7500K.
ANDROID_CONTROL_AWB_STATE Metadados dinâmicos que descrevem o estado atual do algoritmo AWB, informados pelo HAL nos metadados do resultado.
AWB_STATE_INACTIVE Estado inicial do AWB após a mudança de modo. Quando o dispositivo é aberto, ele precisa iniciar nesse estado.
AWB_STATE_SEARCHING O AWB não é convertido em um valor bom e está mudando os parâmetros de ajuste de cores.
AWB_STATE_CONVERGED O AWB encontrou bons valores de ajuste de cor para a cena atual e os parâmetros não estão mudando. O HAL pode sair desse estado de forma espontânea para buscar uma solução melhor.
AWB_STATE_LOCKED O AWB foi bloqueado com o controle AWB_LOCK. Os valores de ajuste de cor não estão mudando.
Outras entradas de metadados
ANDROID_CONTROL_AWB_LOCK Controle para travar os ajustes de cor do AWB nos valores atuais.
ANDROID_CONTROL_AWB_REGIONS Controle para selecionar as regiões do FOV que devem ser usadas para determinar um bom equilíbrio de cores. Isso se aplica apenas ao modo de balanço de branco automático.

Observações gerais sobre a transição da máquina de estados

Alternar entre os modos AF, AE ou AWB sempre redefine o estado do algoritmo para INACTIVE. Da mesma forma, alternar entre CONTROL_MODE ou CONTROL_SCENE_MODE se CONTROL_MODE == USE_SCENE_MODE redefine todos os estados do algoritmo como INATIVO.

As tabelas abaixo são por modo.

Máquinas de estado do AF

mode = AF_MODE_OFF or AF_MODE_EDOF
Estado Causa da transformação Novo estado Observações
INATIVA O AF está desativado
mode = AF_MODE_AUTO ou AF_MODE_MACRO
Estado Causa da transformação Novo estado Observações
INATIVA AF_TRIGGER ACTIVE_SCAN

Iniciar varredura de AF

A lente está se movendo

ACTIVE_SCAN Verificação de AF concluída FOCUSED_LOCKED

Se a AF for bem-sucedida

A lente está bloqueada

ACTIVE_SCAN Verificação de AF concluída NOT_FOCUSED_LOCKED

Se a AF for bem-sucedida

A lente está bloqueada

ACTIVE_SCAN AF_CANCEL INATIVA

Cancelar/redefinir AF

A lente está bloqueada

FOCUSED_LOCKED AF_CANCEL INATIVA Cancelar/redefinir AF
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nova varredura

A lente está se movendo

NOT_FOCUSED_LOCKED AF_CANCEL INATIVA Cancelar/redefinir AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nova varredura

A lente está se movendo

Todos os estados Mudança do modo INATIVA
mode = AF_MODE_CONTINUOUS_VIDEO
Estado Causa da transformação Novo estado Observações
INATIVA O HAL inicia uma nova verificação PASSIVE_SCAN

Iniciar varredura de AF

A lente está se movendo

INATIVA AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta de estado do AF

A lente está bloqueada

PASSIVE_SCAN O HAL conclui a verificação atual PASSIVE_FOCUSED

Finalizar a leitura de AF

A lente está bloqueada

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformação imediata se o foco for bom

A lente está bloqueada

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformação imediata se o foco estiver incorreto

A lente está bloqueada

PASSIVE_SCAN AF_CANCEL INATIVA

Redefinir a posição da lente

A lente está bloqueada

PASSIVE_FOCUSED O HAL inicia uma nova verificação PASSIVE_SCAN

Iniciar verificação de AF

A lente está se movendo

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformação imediata se o foco for bom

A lente está bloqueada

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED Transformação imediata se o foco estiver incorreto

A lente está bloqueada

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Nenhum efeito
FOCUSED_LOCKED AF_CANCEL INATIVA Reiniciar a leitura automática
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Nenhum efeito
NOT_FOCUSED_LOCKED AF_CANCEL INATIVA Reiniciar a leitura automática
mode = AF_MODE_CONTINUOUS_PICTURE
Estado Causa da transformação Novo estado Observações
INATIVA O HAL inicia uma nova verificação PASSIVE_SCAN

Iniciar verificação de AF

A lente está se movendo

INATIVA AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta de estado do AF

A lente está bloqueada

PASSIVE_SCAN O HAL conclui a verificação atual PASSIVE_FOCUSED Finalizar a leitura de AF

A lente está bloqueada

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformação eventual quando o foco é bom

A lente está bloqueada

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformação eventual se não for possível focar

A lente está bloqueada

PASSIVE_SCAN AF_CANCEL INATIVA

Redefinir a posição da lente

A lente está bloqueada

PASSIVE_FOCUSED O HAL inicia uma nova verificação PASSIVE_SCAN

Iniciar verificação de AF

A lente está se movendo

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformação imediata se o foco for bom

A lente está bloqueada

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

Transformação imediata se o foco estiver incorreto

A lente está bloqueada

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Nenhum efeito
FOCUSED_LOCKED AF_CANCEL INATIVA Reiniciar a leitura automática
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Nenhum efeito
NOT_FOCUSED_LOCKED AF_CANCEL INATIVA Reiniciar a leitura automática

Máquinas de estado AE e AWB

As máquinas de estado AE e AWB são quase idênticas. A AE tem outros estados FLASH_REQUIRED e PRECAPTURE. Portanto, as linhas abaixo que se referem a esses dois estados precisam ser ignoradas para a máquina de estado AWB.

modo = AE_MODE_OFF / modo AWB não é AUTO
Estado Causa da transformação Novo estado Observações
INATIVA AE/AWB desativado
mode = AE_MODE_ON_* / AWB_MODE_AUTO
Estado Causa da transformação Novo estado Observações
INATIVA O HAL inicia a verificação de AE/AWB PESQUISANDO
INATIVA AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
PESQUISANDO O HAL finaliza a verificação de AE/AWB CONVERGIDA Valores bons, sem mudanças
PESQUISANDO O HAL conclui a verificação de AE FLASH_REQUIRED Convergente, mas muito escuro sem flash
PESQUISANDO AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
CONVERGIDA O HAL inicia a verificação de AE/AWB PESQUISANDO Valores bloqueados
CONVERGIDA AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
FLASH_REQUIRED O HAL inicia a verificação de AE/AWB PESQUISANDO Valores bloqueados
FLASH_REQUIRED AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
BLOQUEADO AE/AWB_LOCK desativado PESQUISANDO Valores não são bons após o desbloqueio
BLOQUEADO AE/AWB_LOCK desativado CONVERGIDA Valores válidos após o desbloqueio
BLOQUEADO AE_LOCK desativado FLASH_REQUIRED Exposição boa, mas muito escura
Todos os estados da AE PRECAPTURE_START PRECAPTURA Iniciar a sequência de pré-captura
PRECAPTURA Sequência concluída, AE_LOCK desativado CONVERGIDA Pronto para captura de alta qualidade
PRECAPTURA Sequência concluída, AE_LOCK ativado BLOQUEADO Pronto para captura de alta qualidade

Ativar o controle manual

Vários controles também estão envolvidos na configuração dos blocos 3A do dispositivo para permitir o controle direto do app.

O modelo HAL para controle 3A é que, para cada solicitação, o HAL inspeciona o estado dos campos de controle 3A. Se qualquer rotina 3A estiver ativada, ela vai substituir as variáveis de controle relacionadas a essa rotina, e esses valores de substituição estarão disponíveis nos metadados de resultado dessa captura. Por exemplo, se a exposição automática estiver ativada em uma solicitação, o HAL vai substituir os campos de exposição, ganho e duração do frame (e possivelmente os campos de flash, dependendo do modo de AE) da solicitação. A lista de controles relevantes é:

Nome do controle Unidade Observações
android.control.mode tipo enumerado: OFF, AUTO, USE_SCENE_MODE Controle 3A de alto nível. Quando definido como OFF, todo o controle 3A pelo HAL é desativado. O app precisa definir os campos para capturar os parâmetros. Quando definido como AUTO, os controles de algoritmo individuais em android.control.* estão em vigor, como android.control.afMode. Quando definido como USE_SCENE_MODE, os controles individuais em android.control.* estão desativadas, e o HAL implementa uma das configurações do modo de cena (como ACTION, SUNSET ou PARTY) como quiser.
android.control.afMode enum OFF significa controle manual do foco da lente por android.lens.focusDistance.
android.control.aeMode enum OFF significa controle manual da duração da exposição/ganho/frame usando android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enum "OFF" significa controle manual do balanço de branco.