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