Modos 3A e transição de estado

Embora os algoritmos 3A reais dependam da implementação HAL, uma descrição da 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 do fluxo não redefine 3A. Por exemplo, o foco bloqueado deve ser mantido durante a chamada configure() .

O acionamento de uma ação 3A envolve simplesmente definir a entrada de acionamento relevante nas configurações da próxima solicitação para indicar o início do acionamento. Por exemplo, o gatilho para iniciar uma varredura 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 acionador definida com um valor não IDLE será tratada como um evento acionador independente.

No nível superior, 3A é controlado pela configuração ANDROID_CONTROL_MODE. Ele seleciona entre não 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 individuais de foco automático (AF), exposição automática (AE) e equilíbrio de branco automático (AWB) estão efetivamente DESLIGADOS 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 suas próprias entradas de modo, estado e metadados de acionamento, conforme listado na próxima seção.
  • Em USE_SCENE_MODE, o valor da entrada ANDROID_CONTROL_SCENE_MODE deve ser utilizado 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 CONTINUOUS_FOCUS AF. Qualquer seleção do usuário de AE/AWB/AF_MODE durante 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 da 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 varredura única e próximo. 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 disparo bloqueia imediatamente o foco na posição atual. O cancelamento retoma a focagem contínua.
AF_MODE_CONTINUOUS_PICTURE Foco rápido e contínuo, para captura de fotos com atraso zero do obturador. O acionamento bloqueia o foco quando a varredura atualmente ativa é concluída. O cancelamento retoma a focagem contínua.
AF_MODE_EDOF Focagem avançada com profundidade de campo estendida. Não há varredura 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 AF, relatado pelo HAL nos metadados de resultados.
AF_STATE_INACTIVE Nenhuma focagem foi feita ou o algoritmo foi reiniciado. A lente não está se movendo. Sempre o estado para MODE_OFF ou MODE_EDOF. Quando o dispositivo for aberto, ele deverá 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 da solicitação.
AF_TRIGGER_IDLE Nenhum gatilho atual.
AF_TRIGGER_START Acione 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 adicionais de metadados
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 procuram foco. Definido pela estrutura nas configurações da 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 da 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 Exposição automática padrão, com controle de flash desativado. O usuário pode definir o flash para disparar ou para o modo tocha.
AE_MODE_ON_AUTO_FLASH Exposição automática 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 Exposição automática 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 Exposição automática padrão, com flash ativado a critério da HAL para pré-captura e captura estática. Use um flash burst 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, relatado pelo HAL nos metadados de resultados.
AE_STATE_INACTIVE Estado AE inicial após mudança de modo. Quando o dispositivo for aberto, ele deverá 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 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 em busca de 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 obter uma imagem suficientemente brilhante. Usado para determinar se um quadro com atraso zero do obturador 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 série de pulsos de flash para redução do efeito 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 da 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 adicionais de metadados
ANDROID_CONTROL_AE_LOCK Controle para bloquear 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 ficar fora desses limites.
ANDROID_CONTROL_AE_REGIONS Controle para seleção das regiões do FOV que devem ser utilizadas para determinar bons níveis de exposição. Isto se aplica a todos os modos AE, exceto OFF.

Configurações de equilíbrio de branco automático e entradas de resultados

Principais entradas de metadados
ANDROID_CONTROL_AWB_MODE Controle para selecionar o modo de equilíbrio de branco atual.
AWB_MODE_OFF O equilíbrio 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; 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 equilíbrio de branco, boas para iluminação incandescente interna (tungstênio), aproximadamente 2700K.
AWB_MODE_FLUORESCENT Configurações fixas de equilíbrio de branco, boas para iluminação fluorescente, aproximadamente 5000K.
AWB_MODE_WARM_FLUORESCENT Configurações fixas de equilíbrio de branco, boas para iluminação fluorescente, aproximadamente 3000K.
AWB_MODE_DAYLIGHT Corrigidas configurações de equilíbrio de branco boas para a luz do dia, aproximadamente 5500K.
AWB_MODE_CLOUDY_DAYLIGHT Corrigidas configurações de equilíbrio de branco, boas para luz do dia nublada, aproximadamente 6500K.
AWB_MODE_TWILIGHT Configurações de equilíbrio de branco corrigidas, boas para perto do pôr do sol/nascer do sol, aproximadamente 15.000K.
AWB_MODE_SHADE Corrigidas configurações de equilíbrio 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, relatado pelo HAL nos metadados de resultados.
AWB_STATE_INACTIVE Estado inicial do AWB após a troca de modo. Quando o dispositivo for aberto, ele deverá iniciar neste estado.
AWB_STATE_SEARCHING O 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 cores para a cena atual e os parâmetros não estão mudando. HAL pode sair espontaneamente deste estado em busca de uma solução melhor.
AWB_STATE_LOCKED AWB foi bloqueado com o controle AWB_LOCK. Os valores de ajuste de cores não mudam.
Entradas adicionais de metadados
ANDROID_CONTROL_AWB_LOCK Controle para bloquear os ajustes de cores AWB em seus valores atuais.
ANDROID_CONTROL_AWB_REGIONS Controle para seleção das regiões do FOV que devem ser utilizadas para determinar um bom equilíbrio de cores. Isto se aplica apenas ao modo de equilíbrio 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 AF for bem-sucedido

Lente agora bloqueada

ACTIVE_SCAN Varredura AF concluída NOT_FOCUSED_LOCKED

Se 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 estiver ruim

Lente agora bloqueada

PASSIVE_SCAN AF_CANCEL INATIVO

Redefinir 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 estiver 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

Eventual transformação, uma vez que o foco seja bom

Lente agora bloqueada

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

Eventual transformação se não conseguir se concentrar

Lente agora bloqueada

PASSIVE_SCAN AF_CANCEL INATIVO

Redefinir 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 estiver 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 possui estados FLASH_REQUIRED e PRECAPTURE adicionais. Portanto, as linhas abaixo que se referem a esses dois estados devem ser ignoradas na máquina de estados 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 termina a varredura AE/AWB CONVERGIDO Bons valores, não mudando
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 desbloqueio
BLOQUEADO AE_LOCK desativado FLASH_REQUIRED Exposição boa, mas muito escura
Todos os estados de EA 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 do aplicativo.

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 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 dessa captura. Assim, por exemplo, se a exposição automática estiver habilitada em uma solicitação, o HAL deverá 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 enumeração: DESLIGADO, AUTO, USE_SCENE_MODE Controle 3A de alto nível. Quando definido como 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 individuais do algoritmo em android.control.* entram em vigor, como android.control.afMode. Quando definido como USE_SCENE_MODE, os controles individuais em android.control.* são quase todos desabilitados, e o HAL implementa uma das configurações do modo de cena (como ACTION, SUNSET ou PARTY) conforme desejar.
android.control.afMode enumeração OFF significa controle manual do foco da lente por meio de android.lens.focusDistance.
android.control.aeMode enumeração OFF significa controle manual de exposição/ganho/duração do quadro por meio de android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enumeração OFF significa controle manual do equilíbrio de branco.