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