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