Modos 3A e Transição de Estado

Enquanto os algoritmos 3A reais dependem da implementação HAL, uma descrição de máquina de estado de alto nível é definida pela interface HAL para permitir que o dispositivo HAL e a estrutura se comuniquem sobre o estado atual de 3A e acionem eventos 3A.

Quando o dispositivo é aberto, todos os estados 3A individuais devem ser STATE_INACTIVE. A configuração de fluxo não redefine 3A. Por exemplo, o foco bloqueado deve ser mantido na chamada configure() .

Acionar uma ação 3A envolve simplesmente definir a entrada de gatilho relevante nas configurações para a próxima solicitação para indicar o início do gatilho. Por exemplo, o gatilho para iniciar uma verificação de foco automático é definir a entrada ANDROID_CONTROL_AF_TRIGGER como ANDROID_CONTROL_AF_TRIGGER_START para uma solicitação; e o cancelamento de uma varredura de foco automático é acionado definindo ANDROID_CONTROL_AF_TRIGGER como ANDROID_CONTRL_AF_TRIGGER_CANCEL. Caso contrário, a entrada não existirá ou será definida como ANDROID_CONTROL_AF_TRIGGER_IDLE. Cada solicitação com uma entrada de acionamento definida para um valor não-IDLE será tratada como um evento de acionamento independente.

No nível superior, 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 usando a configuração do modo de cena (ANDROID_CONTROL_USE_SCENE_MODE):

  • No modo DESLIGADO, cada um dos modos individual de foco automático (AF), exposição automática (AE) e balanço de branco automático (AWB) está efetivamente DESLIGADO, e nenhum dos controles de captura pode ser substituído pelas rotinas 3A.
  • No modo AUTO, os modos AF, AE e AWB executam seus próprios algoritmos independentes e têm seu próprio modo, estado e entradas de metadados de disparo, 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 de FACE_PRIORITY, o HAL deve 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 deve 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 devem direcionar para medição e foco em quaisquer 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 pela estrutura nas configurações de solicitação.
AF_MODE_OFF AF está desativado; a estrutura/aplicativo 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 close-up de varredura única. Nenhum movimento da lente a menos que o AF seja acionado
AF_MODE_CONTINUOUS_VIDEO Focagem contínua suave, para gravação de vídeo. O acionamento bloqueia imediatamente o foco na posição atual. O cancelamento retoma a focagem contínua.
AF_MODE_CONTINUOUS_PICTURE Focagem contínua rápida, para captura sem atraso do obturador. O acionamento bloqueia o foco quando a varredura ativa no momento é concluída. O cancelamento retoma a focagem contínua.
AF_MODE_EDOF Profundidade avançada de foco de campo estendido. Não há varredura de foco automático, portanto, acionar um ou cancelar um 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 AF, relatados pelo HAL nos metadados do resultado.
AF_STATE_INACTIVE Nenhuma focagem foi feita 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 deve iniciar neste estado.
AF_STATE_PASSIVE_SCAN Um algoritmo de foco contínuo está atualmente 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 espontaneamente deste estado.
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 espontaneamente deste estado.
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 AF não conseguiu focar. A lente não está se movendo.
ANDROID_CONTROL_AF_TRIGGER Controle para iniciar uma varredura de foco automático, cujo significado depende do modo e do estado. Definido pela estrutura nas configurações de solicitação.
AF_TRIGGER_IDLE Nenhum gatilho atual.
AF_TRIGGER_START Aciona o início da varredura AF. O efeito depende do modo e do estado.
AF_TRIGGER_CANCEL Cancele a varredura AF atual, se houver, e redefina o algoritmo para o padrão.
Entradas de metadados adicionais
ANDROID_CONTROL_AF_REGIONS Controle para selecionar as regiões do campo de visão (FOV) que devem ser usadas para determinar um bom foco. Isso se aplica a todos os modos AF que digitalizam o foco. Definido pela estrutura 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 pela estrutura nas configurações de solicitação.
AE_MODE_OFF A exposição automática está desativada; o usuário controla a exposição, ganho, duração do quadro e flash.
AE_MODE_ON Autoexposição padrão, com controle de flash desativado. O usuário pode definir o flash para disparar ou para o modo de tocha.
AE_MODE_ON_AUTO_FLASH Autoexposição padrão, com flash ativado a critério da HAL para pré-captura e captura estática. Controle do usuário do flash desativado.
AE_MODE_ON_ALWAYS_FLASH Autoexposição padrão, com flash sempre disparado para captura e a critério da HAL para pré-captura. Controle do usuário do flash desativado.
AE_MODE_ON_AUTO_FLASH_REDEYE Autoexposição padrão, com flash ativado a critério da HAL para pré-captura e captura estática. Use uma sequência de flash no final da sequência de pré-captura para reduzir o efeito de olhos vermelhos na imagem final. Controle do usuário do flash desativado.
ANDROID_CONTROL_AE_STATE Metadados dinâmicos que descrevem o estado atual do algoritmo AE, relatados pelo HAL nos metadados do resultado.
AE_STATE_INACTIVE Estado AE inicial após a troca de modo. Quando o dispositivo é aberto, ele deve iniciar neste estado.
AE_STATE_SEARCHING AE não convergiu para um bom valor e está ajustando os parâmetros de exposição.
AE_STATE_CONVERGED O AE encontrou bons valores de exposição para a cena atual e os parâmetros de exposição não estão mudando. HAL pode sair espontaneamente deste estado para procurar uma solução melhor.
AE_STATE_LOCKED AE foi bloqueado 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 brilhante. Usado para determinar se um quadro de atraso do obturador zero pode ser usado.
AE_STATE_PRECAPTURE O HAL está no meio de uma sequência de pré-captura. Dependendo do modo AE, este modo pode envolver o disparo do flash para medição ou uma rajada 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 pela estrutura nas configurações de solicitação.
PRECAPTURE_TRIGGER_IDLE Nenhum gatilho atual.
PRECAPTURE_TRIGGER_START Inicie uma sequência de pré-captura. O HAL deve usar as solicitações subsequentes para medir uma boa exposição/balanço de branco para uma próxima captura de alta resolução.
Entradas de metadados adicionais
ANDROID_CONTROL_AE_LOCK Controle para travar os controles AE em seus valores atuais.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Controle para ajustar o ponto de brilho alvo do algoritmo AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Controle para selecionar a faixa de taxa de quadros alvo para o algoritmo AE. A rotina AE não pode alterar a taxa de quadros 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 AE além de OFF.

Configurações de balanço de branco automático 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 de branco automático está ativado; 3A controla a transformação de cores, 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 interna (tungstênio), aproximadamente 2700K.
AWB_MODE_FLUORESCENT Configurações fixas de balanço de branco boas para iluminação fluorescente, aproximadamente 5000K.
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 6500K.
AWB_MODE_TWILIGHT Configurações fixas de balanço de branco boas para quase pôr do sol/nascer do sol, aproximadamente 15000K.
AWB_MODE_SHADE Configurações fixas de balanço de branco boas para áreas iluminadas indiretamente pelo sol, aproximadamente 7500K.
ANDROID_CONTROL_AWB_STATE Metadados dinâmicos que descrevem o estado atual do algoritmo AWB, relatados pelo HAL nos metadados do resultado.
AWB_STATE_INACTIVE Estado AWB inicial após a troca de modo. Quando o dispositivo é aberto, ele deve iniciar neste estado.
AWB_STATE_SEARCHING AWB não convergiu para um bom valor e está alterando os parâmetros de ajuste de cor.
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. HAL pode sair espontaneamente deste estado para procurar uma solução melhor.
AWB_STATE_LOCKED AWB foi bloqueado com o controle AWB_LOCK. Os valores de ajuste de cor não estão mudando.
Entradas de metadados adicionais
ANDROID_CONTROL_AWB_LOCK Controle para travar os ajustes de cor AWB em seus 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.

Notas gerais de transição da máquina 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 por modo.

Máquinas de estado AF

modo = AF_MODE_OFF ou AF_MODE_EDOF
Estado Causa da transformação Novo estado Notas
INATIVO AF está desativado
modo = AF_MODE_AUTO ou AF_MODE_MACRO
Estado Causa da transformação Novo estado Notas
INATIVO AF_TRIGGER ACTIVE_SCAN

Iniciar varredura AF

Lente agora em movimento

ACTIVE_SCAN Varredura AF concluída FOCUSED_LOCKED

Se o AF for bem-sucedido

Lente agora bloqueada

ACTIVE_SCAN Varredura AF concluída NOT_FOCUSED_LOCKED

Se o AF for bem-sucedido

Lente agora bloqueada

ACTIVE_SCAN AF_CANCEL INATIVO

Cancelar/redefinir AF

Lente agora bloqueada

FOCUSED_LOCKED AF_CANCEL INATIVO Cancelar/redefinir AF
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nova varredura

Lente agora em movimento

NOT_FOCUSED_LOCKED AF_CANCEL INATIVO Cancelar/redefinir AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Iniciar nova varredura

Lente agora em movimento

Todos os Estados Mudança de modo INATIVO
modo = AF_MODE_CONTINUOUS_VIDEO
Estado Causa da transformação Novo estado Notas
INATIVO HAL inicia nova varredura PASSIVE_SCAN

Iniciar varredura AF

Lente agora em movimento

INATIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta de estado AF

Lente agora bloqueada

PASSIVE_SCAN HAL conclui a varredura atual PASSIVE_FOCUSED

Finalizar varredura AF

Lente agora bloqueada

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformação imediata se o foco for bom

Lente agora bloqueada

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformação imediata se o foco for ruim

Lente agora bloqueada

PASSIVE_SCAN AF_CANCEL INATIVO

Redefinir a posição da lente

Lente agora bloqueada

PASSIVE_FOCUSED HAL inicia nova varredura PASSIVE_SCAN

Iniciar varredura AF

Lente agora em movimento

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformação imediata se o foco for bom

Lente agora bloqueada

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED Transformação imediata se o foco for ruim

Lente agora bloqueada

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Sem efeito
FOCUSED_LOCKED AF_CANCEL INATIVO Reinicie a varredura AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Sem efeito
NOT_FOCUSED_LOCKED AF_CANCEL INATIVO Reinicie a varredura AF
modo = AF_MODE_CONTINUOUS_PICTURE
Estado Causa da transformação Novo estado Notas
INATIVO HAL inicia nova varredura PASSIVE_SCAN

Iniciar varredura AF

Lente agora em movimento

INATIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Consulta de estado AF

Lente agora bloqueada

PASSIVE_SCAN HAL conclui a varredura atual PASSIVE_FOCUSED Finalizar varredura AF

Lente agora bloqueada

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

Transformação eventual uma vez que o foco é bom

Lente agora bloqueada

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Transformação eventual se não puder se concentrar

Lente agora bloqueada

PASSIVE_SCAN AF_CANCEL INATIVO

Redefinir a posição da lente

Lente agora bloqueada

PASSIVE_FOCUSED HAL inicia nova varredura PASSIVE_SCAN

Iniciar varredura AF

Lente agora em movimento

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Transformação imediata se o foco for bom

Lente agora bloqueada

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

Transformação imediata se o foco for ruim

Lente agora bloqueada

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Sem efeito
FOCUSED_LOCKED AF_CANCEL INATIVO Reinicie a varredura AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Sem efeito
NOT_FOCUSED_LOCKED AF_CANCEL INATIVO Reinicie a varredura AF

Máquinas de estado AE e AWB

As máquinas de estado AE e AWB são praticamente idênticas. AE tem estados FLASH_REQUIRED e PRECAPTURE adicionais. Portanto, as linhas abaixo que se referem a esses dois estados devem 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 Notas
INATIVO AE/AWB desativado
modo = AE_MODE_ON_* / AWB_MODE_AUTO
Estado Causa da transformação Novo estado Notas
INATIVO HAL inicia varredura AE/AWB PROCURANDO
INATIVO AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
PROCURANDO HAL conclui a varredura AE/AWB CONVERGIDO Bons valores, não mudam
PROCURANDO HAL termina a varredura AE FLASH_REQUIRED Convergente, mas muito escuro sem flash
PROCURANDO AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
CONVERGIDO HAL inicia varredura AE/AWB PROCURANDO Valores bloqueados
CONVERGIDO AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
FLASH_REQUIRED HAL inicia varredura AE/AWB PROCURANDO Valores bloqueados
FLASH_REQUIRED AE/AWB_LOCK ativado BLOQUEADO Valores bloqueados
BLOQUEADO AE/AWB_LOCK desativado PROCURANDO Valores não são bons após o desbloqueio
BLOQUEADO AE/AWB_LOCK desativado CONVERGIDO Valores bons após o desbloqueio
BLOQUEADO AE_LOCK desligado FLASH_REQUIRED Exposição boa, mas muito escura
Todos os estados AE PRECAPTURE_START PRÉ-CAPTURA Iniciar sequência de pré-captura
PRÉ-CAPTURA Sequência concluída, AE_LOCK desativado CONVERGIDO Pronto para captura de alta qualidade
PRÉ-CAPTURA Sequência concluída, AE_LOCK ativado BLOQUEADO Pronto para captura de alta qualidade

Habilitando o controle manual

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

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

Nome do controle Unidade Notas
android.control.mode enum: OFF, AUTO, USE_SCENE_MODE Controle 3A de alto nível. Quando ajustado para OFF, todo o controle 3A pelo HAL é desabilitado. O próprio aplicativo deve definir os campos para os parâmetros de captura. 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.* são principalmente desabilitados, e o HAL implementa uma das configurações do modo de cena (como ACTION, SUNSET ou PARTY) conforme desejar.
android.control.afMode enumerar OFF significa controle manual da focagem da lente através de android.lens.focusDistance.
android.control.aeMode enumerar OFF significa controle manual da exposição/ganho/duração do quadro por meio de android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enumerar OFF significa controle manual do balanço de branco.