Modos 3A e transição de estado

Embora os algoritmos de 3A reais dependam da implementação da HAL, um nível descrição da máquina de estado é definida pela interface da HAL para permitir que ela do dispositivo e o framework para se comunicar sobre o estado atual dos 3A e acionarão eventos 3A.

Quando o dispositivo é aberto, todos os estados 3A individuais precisam ser STATE_INACTIVE. A configuração do stream não redefine os 3A. Por exemplo, o foco bloqueado precisa ser mantidos durante a chamada de configure().

O acionamento de uma ação 3A envolve simplesmente definir a entrada do acionador relevante em as configurações da próxima solicitação para indicar o início do acionador. Por exemplo: o gatilho para iniciar uma verificação de foco automático é definir a entrada ANDROID_CONTROL_AF_TRIGGER para ANDROID_CONTROL_AF_TRIGGER_START para uma solicitação; e cancelar uma verificação de autofoco é acionado ao definir de ANDROID_CONTROL_AF_TRIGGER para ANDROID_CONTRL_AF_TRIGGER_CANCEL. Caso contrário, o entrada não existirá ou será definida como ANDROID_CONTROL_AF_TRIGGER_IDLE. Cada solicitação com uma entrada de acionador definida com 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. Ela seleciona entre não 3A (ANDROID_CONTROL_MODE_OFF), o modo AUTO normal (ANDROID_CONTROL_MODE_AUTO) e usar a configuração do modo de cena (ANDROID_CONTROL_USE_SCENE_MODE):

  • No modo DESLIGADO, cada um dos focos automáticos (AF), autoexposição (AE), e de balanço de branco automático (AWB) estão DESATIVADOS, e nenhum de captura podem ser substituídos pelas rotinas de 3A.
  • No modo AUTOMÁTICO, os modos AF, AE e AWB executam seus próprios modos algoritmos e têm entradas de metadados de modo, estado e acionador próprios, conforme listado na próxima seção.
  • Em USE_SCENE_MODE, o valor da entrada ANDROID_CONTROL_SCENE_MODE deve ser usado para determinar o comportamento das rotinas 3A. Em SCENE_MODEs diferentes FACE_PRIORITY, a HAL deverá substituir os valores de ANDROID_CONTROL_AE/AWB/AF_MODE deve ser o modo preferido para o MODO_CENA. Por exemplo, a HAL pode preferir que SCENE_MODE_NIGHT use CONTINUOUS_FOCUS Modo AF. Qualquer seleção de AE/AWB/AF_MODE pelo usuário quando a cena precisam ser ignoradas 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 devem ser direcionadas para a medição e focando em todos os rostos detectados na cena.

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

Principais entradas de metadados
ANDROID_CONTROL_AF_MODE Controle para selecionar o modo de foco automático atual. Definido pelo framework nas configurações de solicitação.
MODO_AF_DESLIGADO A AF está desativada; o framework/app controla diretamente a posição da lente.
MODO_AF_AUTO Foco automático de varredura única. Nenhum movimento da lente, a menos que a AF seja acionada.
MODO_AF_MACRO Foco automático de fechamento único com varredura única. Nenhum movimento da lente, a menos que a AF seja acionada
MODO_AF_MODE_CONTINUOUS_VIDEO Foco contínuo suave para gravar vídeos. Acionando imediatamente bloqueia o foco na posição atual. O cancelamento retoma o foco contínuo.
MODO_AF_CONTINUOUS_PICTURE Foco contínuo e rápido para captura com atraso zero. Acionamento bloqueia o foco quando a varredura ativa no momento é concluída. Cancelamento de currículos foco contínuo.
MODO_DE_AF_EDOF Profundidade estendida de foco de campo. Não há verificação de autofoco, portanto, acionar ou cancelar um não tem efeito. As imagens estão em foco automaticamente pela HAL.
ANDROID_CONTROL_AF_STATE Metadados dinâmicos que descrevem o estado atual do algoritmo de AF, relatados pela HAL nos metadados de resultado.
AF_STATE_INACTIVE Nenhum foco foi feito ou o algoritmo foi redefinido. A lente não está se movendo. Sempre o estado para 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 no momento. 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. A HAL pode sair desse estado espontaneamente.
AF_STATE_PASSIVE_UNFOCused Um algoritmo de foco contínuo acredita que não está bem focado. A lente não está se movendo. A HAL pode sair desse estado espontaneamente.
AF_STATE_ACTIVE_SCAN Uma verificação acionada pelo usuário está em andamento.
AF_STATE_FOCused_LOCKED O algoritmo de AF acredita que está focado. A lente não está se movendo.
AF_STATE_NOT_FOCused_LOCKED O algoritmo de AF não conseguiu se concentrar. A lente não está se movendo.
ANDROID_CONTROL_AF_TRIGGER Controle para iniciar uma verificação de foco automático, cujo significado depende modo e estado. Definido pelo framework nas configurações de solicitação.
AF_TRIGGER_IDLE Nenhum acionador no momento.
INÍCIO AF_TRIGGER Acionar início da busca de AF. O efeito depende do modo e do estado.
AF_TRIGGER_CANCEL Cancelar a verificação atual de AF, se houver, e redefinir 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) que devem ser usada para determinar um bom foco. Isso se aplica a todas as atualizações que verificam o foco. Definido pelo framework nas configurações de solicitação.

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

Principais entradas de metadados
ANDROID_CONTROL_AE_MODE Controle para selecionar o modo de exposição automática atual. Definido pelo nas configurações de solicitação.
AE_MODE_OFF A exposição automática está desativada. o usuário controla a exposição, o ganho, o enquadramento duração e flash.
Modo AE_ATIVADO Exposição automática padrão, com controle do flash desativado. O usuário pode definir o flash disparar ou lanterna.
AE_MODE_ON_AUTO_FLASH Exposição automática padrão, com flash ativado a critério da HAL para pré-captura e ainda capturar. O controle do usuário sobre o flash está desativado.
AE_MODE_ON_ALWAYS_FLASH Exposição automática padrão, com flash sempre acionado para captura e em HAL critério para a pré-captura. O controle do usuário sobre o flash está desativado.
AE_MODE_ON_AUTO_FLASH_REDEYE Exposição automática padrão, com flash ativado a critério da HAL para pré-captura e ainda capturar. Use uma sequência de flash no final da sequência de pré-captura para reduzir os olhos vermelhos na imagem final. O controle do usuário sobre o flash está desativado.
ESTADO ANDROID_CONTROL_AE Metadados dinâmicos que descrevem o estado atual do algoritmo AE, relatados por nos metadados de resultado.
AE_STATE_INACTIVE Estado de AE inicial após a troca de modo. Quando o dispositivo é aberto, ele deve começam nesse estado.
PESQUISA DE ESTADO AE O AE não convergiu para um bom valor e está ajustando a exposição parâmetros.
AE_STATE_CONVERGED O AE encontrou bons valores de exposição para a cena atual, e os parâmetros de exposição não mudam. a HAL pode sair espontaneamente estado para procurar uma solução melhor.
AE_STATE_LOCKED (Bloqueada) AE foi bloqueado com o controle AE_LOCK Os valores de exposição não são mudando.
AE_STATE_FLASH_REQUIRED A HAL tem exposição convergente, mas acredita que o flash é necessário para uma imagem clara o suficiente. Usado para determinar se há um atraso do obturador zero um frame pode ser usado.
PRECAPTURE DO ESTADO AE A HAL está no meio de uma sequência de pré-captura. Dependendo do modo AE, esse modo pode envolver o acionamento do flash para medição ou uma explosão de flash pulsa para reduzir os olhos vermelhos.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER Controle para iniciar uma sequência de medição antes de capturar uma imagem de alta qualidade imagem. Definido pelo framework nas configurações de solicitação.
PRECAPTURE_TRIGGER_IDLE Nenhum acionador no momento.
PRECAPTURE_TRIGGER_START Inicie uma sequência de pré-captura. A HAL deve usar as solicitações subsequentes para medir um bom equilíbrio de exposição/branco em uma futura resolução capturar.
Outras entradas de metadados
ANDROID_CONTROL_AE_LOCK Controle para bloquear controles AE nos valores atuais.
COMPENSAÇÃO DO ANDROID_CONTROL_AE_EXPOSURE Controle para ajustar o ponto de brilho desejado do algoritmo AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Controle para selecionar o intervalo de frame rate desejado para o algoritmo AE. A rotina AE não pode alterar o frame rate para ficar fora desses limites.
ANDROID_CONTROL_AE_REGIONS Controle para selecionar as regiões do campo de visão que devem ser usadas para determinar bons níveis de exposição. Isso se aplica a todos os modos AE além de DESATIVADO.

Configurações do Autowhitebalance e entradas de resultados

Principais entradas de metadados
ANDROID_CONTROL_AWB_MODE Controle para selecionar o modo de balanço 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 balanço automático de branco está ativado. 3A controla a transformação de cor, possivelmente usando transformações mais complexas do que uma matriz simples.
AWB_MODE_INCANDESCENT Configurações de balanço de branco fixo, adequadas para incandescentes em ambientes internos (tungstênio) iluminação, cerca de 2700K.
AWB_MODE_FLUORESCENT Configurações fixas de balanço de branco, adequadas para iluminação fluorescente, aproximadamente 5.000 mil.
AWB_MODE_WARM_FLUORESCENT Configurações fixas de balanço de branco, adequadas para iluminação fluorescente, aproximadamente 3.000 mil.
AWB_MODE_DAYLIGHT Configurações fixas de balanço de branco, boas para luz diurna, aproximadamente 5.500 K.
AWB_MODE_CLOUDY_DAYLIGHT Configurações fixas de balanço de branco, adequadas para luz diurna nublada, aproximadamente 6.500 K.
AWB_MODE_TWILIGHT Configurações fixas de balanço de branco, boas para quase o pôr do sol e o nascer do sol, aproximadamente 15.000 mil.
AWB_MODE_SHADE (link em inglês) Configurações fixas de balanço de branco, boas para áreas iluminadas indiretamente pelo sol, cerca de 7500 mil.
ESTADO ANDROID_CONTROL_AWB Metadados dinâmicos que descrevem o estado atual do algoritmo AWB, relatados por nos metadados de resultado.
AWB_STATE_INACTIVE Estado inicial do AWB após a troca de modo. Quando o dispositivo é aberto, ele deve começam nesse estado.
ESTADO_DE_PESQUISA_AWB O AWB não convergiu para um bom valor e está mudando o ajuste de cor parâmetros.
ESTADO_CONVERGIDO_AWB o AWB encontrou bons valores de ajuste de cor para a cena atual; os parâmetros não mudarem. A HAL pode sair desse estado espontaneamente para procurar uma solução melhor.
ESTADO_BLOQUEADO DO AWB O AWB foi bloqueado com o controle AWB_LOCK. Ajuste de cor valores não mudam.
Outras entradas de metadados
ANDROID_CONTROL_AWB_LOCK Controle para bloquear os ajustes de cor do AWB nos valores atuais.
ANDROID_CONTROL_AWB_REGIONS Controle para selecionar as regiões do campo de visão que devem ser usadas para determinar um bom equilíbrio de cores. Isso se aplica apenas ao balanceamento de branco automático, modo

Observações gerais sobre a transição de máquinas de estado

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

As tabelas abaixo são divididas por modo.

Máquinas de estado da AF

mode = AF_MODE_OFF ou AF_MODE_EDOF
Estado Causa da transformação Novo estado Observações
INATIVA A AF está desativada
modo = AF_MODE_AUTO ou AF_MODE_MACRO
Estado Causa da transformação Novo estado Observações
INATIVA ACIONADOR AF VERIFICAÇÃO ATIVA

Iniciar varredura da AF

A lente está se movendo

VERIFICAÇÃO ATIVA Varredura da AF concluída FOCUSADO_BLOQUEADO

Se a PD for bem-sucedida

Lente agora bloqueada

VERIFICAÇÃO ATIVA Varredura da AF concluída NOT_FOCused_LOCKED

Se a PD for bem-sucedida

Lente agora bloqueada

VERIFICAÇÃO ATIVA AF_CANCEL INATIVA

Cancelar/redefinir PD

Lente agora bloqueada

FOCUSADO_BLOQUEADO AF_CANCEL INATIVA Cancelar/redefinir PD
FOCUSADO_BLOQUEADO ACIONADOR AF VERIFICAÇÃO ATIVA

Iniciar nova varredura

A lente está se movendo

NOT_FOCused_LOCKED AF_CANCEL INATIVA Cancelar/redefinir PD
NOT_FOCused_LOCKED ACIONADOR AF VERIFICAÇÃO ATIVA

Iniciar nova varredura

A lente está se movendo

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

Iniciar varredura da AF

A lente está se movendo

INATIVA ACIONADOR AF NOT_FOCused_LOCKED

Consulta de estado da AF

Lente agora bloqueada

PASSIVE_SCAN HAL conclui a verificação atual PASSIVE_FOCused

Finalizar busca de AF

Lente agora bloqueada

PASSIVE_SCAN ACIONADOR AF FOCUSADO_BLOQUEADO

Transformação imediata se o foco está bom

Lente agora bloqueada

PASSIVE_SCAN ACIONADOR AF NOT_FOCused_LOCKED

Transformação imediata se o foco estiver ruim

Lente agora bloqueada

PASSIVE_SCAN AF_CANCEL INATIVA

Redefinir posição da lente

Lente agora bloqueada

PASSIVE_FOCused A HAL inicia uma nova verificação PASSIVE_SCAN

Iniciar busca de AF

A lente está se movendo

PASSIVE_FOCused ACIONADOR AF FOCUSADO_BLOQUEADO

Transformação imediata se o foco está bom

Lente agora bloqueada

PASSIVE_FOCused ACIONADOR AF NOT_FOCused_LOCKED Transformação imediata se o foco estiver ruim

Lente agora bloqueada

FOCUSADO_BLOQUEADO ACIONADOR AF FOCUSADO_BLOQUEADO Nenhum efeito
FOCUSADO_BLOQUEADO AF_CANCEL INATIVA Reiniciar busca de AF
NOT_FOCused_LOCKED ACIONADOR AF NOT_FOCused_LOCKED Nenhum efeito
NOT_FOCused_LOCKED AF_CANCEL INATIVA Reiniciar busca de AF
modo = AF_MODE_CONTINUOUS_PICTURE
Estado Causa da transformação Novo estado Observações
INATIVA A HAL inicia uma nova verificação PASSIVE_SCAN

Iniciar busca de AF

A lente está se movendo

INATIVA ACIONADOR AF NOT_FOCused_LOCKED

Consulta de estado da AF

Lente agora bloqueada

PASSIVE_SCAN HAL conclui a verificação atual PASSIVE_FOCused Finalizar busca de AF

Lente agora bloqueada

PASSIVE_SCAN ACIONADOR AF FOCUSADO_BLOQUEADO

Transformação eventual depois de focar o bem

Lente agora bloqueada

PASSIVE_SCAN ACIONADOR AF NOT_FOCused_LOCKED

A transformação pode ocorrer se não for possível focar

Lente agora bloqueada

PASSIVE_SCAN AF_CANCEL INATIVA

Redefinir posição da lente

Lente agora bloqueada

PASSIVE_FOCused A HAL inicia uma nova verificação PASSIVE_SCAN

Iniciar busca de AF

A lente está se movendo

PASSIVE_FOCused ACIONADOR AF FOCUSADO_BLOQUEADO

Transformação imediata se o foco for bom

Lente agora bloqueada

PASSIVE_FOCused ACIONADOR AF NOT_FOCused_LOCKED

Transformação imediata se o foco for ruim

Lente agora bloqueada

FOCUSADO_BLOQUEADO ACIONADOR AF FOCUSADO_BLOQUEADO Nenhum efeito
FOCUSADO_BLOQUEADO AF_CANCEL INATIVA Reiniciar busca de AF
NOT_FOCused_LOCKED ACIONADOR AF NOT_FOCused_LOCKED Nenhum efeito
NOT_FOCused_LOCKED AF_CANCEL INATIVA Reiniciar busca de AF

Máquinas de estado AE e AWB

Na maioria das vezes, as máquinas de estado AE e AWB são idênticas. O AE tem recursos FLASH_REQUIRED e PRECAPTURE. As linhas abaixo se referem a essas duas devem ser ignorados 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
modo = AE_MODE_ON_* / AWB_MODE_AUTO
Estado Causa da transformação Novo estado Observações
INATIVA A HAL inicia a verificação de AE/AWB PESQUISANDO
INATIVA AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
PESQUISANDO HAL termina a verificação de AE/AWB CONVERGENTE Bons valores, sem mudanças
PESQUISANDO HAL conclui verificação de AE FLASH_REQUIRED Conveniente, mas muito escura sem flash
PESQUISANDO AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
CONVERGENTE A HAL inicia a verificação de AE/AWB PESQUISANDO Valores bloqueados
CONVERGENTE AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
FLASH_REQUIRED A 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 ruins após o desbloqueio
BLOQUEADO AE/AWB_LOCK desativado CONVERGENTE Valores válidos após o desbloqueio
BLOQUEADO AE_LOCK desativado FLASH_REQUIRED Exposição boa, mas muito escura
Todos os estados AE PRECAPTURE_START CAPTURA Iniciar sequência de pré-captura
CAPTURA Sequência concluída, AE_LOCK desativado CONVERGENTE Pronto para capturas de alta qualidade
CAPTURA Sequência concluída, AE_LOCK ativado BLOQUEADO Pronto para capturas de alta qualidade

Ativar controle manual

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

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

Nome do controle Unidade Observações
android.control.mode enumeração: OFF, AUTO, USE_SCENE_MODE Controle 3A de alto nível. Quando desativado, todo o controle de 3 A pela HAL é desativado. O app precisa definir os campos para os parâmetros de captura por conta própria. Quando definido como AUTO, o algoritmo individual controla android.control.* estão em vigor, como android.control.afMode. Quando definido como USE_SCENE_MODE, os controles individuais em android.control.* na maioria das vezes são desativados, e a HAL implementa um dos configurações (como ACTION, SUNSET ou PARTY) como desejar.
android.control.afMode enum DESLIGADO significa controle manual da lente focando em android.lens.focusDistance.
android.control.aeMode enum DESATIVADO significa o controle manual da duração do quadro/ganho/a exposição por meio de android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enum DESLIGADO significa o controle manual do balanço de branco.