Esta página descreve os modos 3A e as máquinas de estados para um dispositivo Android. A interface HAL da câmera, que define as máquinas de estado em um nível alto, permite que a implementação da HAL e o framework do Android comuniquem os estados atuais do 3A e ativem eventos do 3A. A implementação do HAL é responsável pelos algoritmos 3A que controlam as configurações do modo 3A e as transições de estado.
Quando o dispositivo é aberto, todos os estados 3A individuais precisam ser
STATE_INACTIVE.
A configuração de streaming não redefiniu o 3A. Por exemplo, o foco bloqueado precisa ser
mantido em toda a chamada configure()
.
Para acionar uma ação de 3A, basta definir a entrada de gatilho relevante nas configurações da próxima solicitação para indicar o início do gatilho. Por exemplo, o acionador para iniciar uma verificação de autofoco é definir a entrada ANDROID_CONTROL_AF_TRIGGER como ANDROID_CONTROL_AF_TRIGGER_START para uma solicitação. O cancelamento de uma verificação de autofoco é acionado definindo ANDROID_CONTROL_AF_TRIGGER como ANDROID_CONTRL_AF_TRIGGER_CANCEL. Caso contrário, a entrada não vai existir ou será definida como ANDROID_CONTROL_AF_TRIGGER_IDLE. Cada solicitação com uma entrada de gatilho definida como 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. Ele seleciona entre nenhum 3A (ANDROID_CONTROL_MODE_OFF), modo AUTO normal (ANDROID_CONTROL_MODE_AUTO) e o uso da configuração do modo de cena (ANDROID_CONTROL_USE_SCENE_MODE):
- No modo DESLIGADO, cada um dos modos de foco automático (AF), de exposição automática (AE) e de balanço de branco automático (AWB) são desativados, e nenhum dos controles de captura pode ser substituído pelas rotinas 3A.
- No modo AUTO, os modos AF, AE e AWB executam algoritmos independentes e têm entradas de metadados de modo, estado e acionador, conforme listado na próxima seção.
- Em USE_SCENE_MODE, o valor da entrada ANDROID_CONTROL_SCENE_MODE precisa ser usado para determinar o comportamento das rotinas 3A. Em SCENE_MODEs diferentes de FACE_PRIORITY, o HAL precisa 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 precisa 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 precisam se inclinar para a medição e o foco em todas as faces detectadas na cena.
Configurações de foco automático e entradas de resultados
Entradas de metadados principais | |
---|---|
ANDROID_CONTROL_AF_MODE | Controle para selecionar o modo de foco automático atual. Definido pelo framework nas configurações da solicitação. |
AF_MODE_OFF | O AF está desativado. O framework/app 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 aproximação com varredura única. Nenhum movimento da lente, a menos que o AF seja acionado |
AF_MODE_CONTINUOUS_VIDEO | Foco contínuo suave para gravação de vídeo. Acionar imediatamente trava o foco na posição atual. O cancelamento retoma o foco contínuo. |
AF_MODE_CONTINUOUS_PICTURE | Foco contínuo rápido, para captura de fotos estáticas sem atraso do obturador. O acionamento bloqueia o foco quando a varredura ativa é concluída. O cancelamento retoma o foco contínuo. |
AF_MODE_EDOF | Foco avançado com profundidade de campo estendida. Não há verificação 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 de AF, informados pelo HAL nos metadados do resultado. |
AF_STATE_INACTIVE | Nenhuma segmentação foi feita ou o algoritmo foi redefinido. A lente não está se movendo. Sempre o estado de 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. 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 desse estado de forma espontânea. |
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 desse estado de forma espontânea. |
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 de AF não conseguiu focar. A lente não está se movendo. |
ANDROID_CONTROL_AF_TRIGGER | Controle para iniciar uma verificação de foco automático, cujo significado depende do modo e do estado. Definido pelo framework nas configurações da solicitação. |
AF_TRIGGER_IDLE | Nenhum acionador atual. |
AF_TRIGGER_START | Acionar o início da verificação de AF. O efeito depende do modo e do estado. |
AF_TRIGGER_CANCEL | Cancela a verificação de AF atual, se houver, e redefine 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, na sigla em inglês) que devem ser usadas para determinar um bom foco. Isso se aplica a todos os modos de AF que procuram o foco. Definido pelo framework nas configurações da solicitação. |
Configurações de exposição automática e entradas de resultados
Entradas de metadados principais | |
---|---|
ANDROID_CONTROL_AE_MODE | Controle para selecionar o modo de exposição automática atual. Definido pelo framework nas configurações da solicitação. |
AE_MODE_OFF | A exposição automática está desativada. O usuário controla a exposição, o ganho, a duração do frame e o flash. |
AE_MODE_ON | Autoexposição padrão, com o controle de flash desativado. O usuário pode definir o flash para acionar ou para o modo lanterna. |
AE_MODE_ON_AUTO_FLASH | Exposição automática padrão, com flash ativado a critério do HAL para pré-captura e captura de fotos. Controle do usuário do flash desativado. |
AE_MODE_ON_ALWAYS_FLASH | Exposição automática padrão, com o flash sempre acionado para captura e a critério do 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 do HAL para pré-captura e captura de fotos. Use uma explosão de flash no final da sequência de pré-captura para reduzir o efeito de olhos vermelhos na foto final. O controle do usuário do flash está desativado. |
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY | O aumento do modo pouca luz ajusta automaticamente o brilho do fluxo de visualização em condições de pouca luz. Isso pode resultar em mais ruído e desfoque de movimento em condições de pouca luz. Os fabricantes de dispositivos precisam garantir que a taxa de frames não fique abaixo de 10 QPS. |
ANDROID_CONTROL_AE_STATE | Metadados dinâmicos que descrevem o estado atual do algoritmo de AE, informados pelo HAL nos metadados do resultado. |
AE_STATE_INACTIVE | Estado inicial da AE após a mudança de modo. Quando o dispositivo é aberto, ele precisa começar nesse estado. |
AE_STATE_SEARCHING | A AE não está convergindo para um valor bom e está ajustando os parâmetros de exposição. |
AE_STATE_CONVERGED | A AE encontrou bons valores de exposição para a cena atual, e os parâmetros de exposição não estão mudando. O HAL pode sair desse estado espontaneamente para buscar uma solução melhor. |
AE_STATE_LOCKED | A AE foi bloqueada 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 clara. Usado para determinar se um frame de zero-shutter-lag pode ser usado. |
AE_STATE_PRECAPTURE | O HAL está no meio de uma sequência de pré-captura. Dependendo do modo AE, esse modo pode envolver o disparo do flash para medição ou uma série 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 pelo framework nas configurações da solicitação. |
PRECAPTURE_TRIGGER_IDLE | Nenhum acionador atual. |
PRECAPTURE_TRIGGER_START | Iniciar uma sequência de pré-captura. O HAL precisa usar as solicitações subsequentes para medir uma boa exposição/equilíbrio de branco para uma próxima captura de alta resolução. |
Outras entradas de metadados | |
---|---|
ANDROID_CONTROL_AE_LOCK | Controle para travar os controles de AE nos valores atuais. |
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION | Controle para ajustar o ponto de brilho de destino do algoritmo de AE. |
ANDROID_CONTROL_AE_TARGET_FPS_RANGE | Controle para selecionar o intervalo de frame rate desejado para o algoritmo de AE. A rotina de AE não pode mudar a taxa de frames 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 de AE, exceto "OFF". |
Configurações de balanço de branco automático e entradas de resultados
Entradas de metadados principais | |
---|---|
ANDROID_CONTROL_AWB_MODE | Controle para selecionar o modo de equilíbrio 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 equilíbrio de branco automático está ativado. O 3A controla a transformação de cor, 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 (tungstênio) interna, aproximadamente 2700K. |
AWB_MODE_FLUORESCENT | Configurações fixas de balanço de branco boas para iluminação fluorescente, aproximadamente 5.000K. |
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 6.500 K. |
AWB_MODE_TWILIGHT | Configurações fixas de balanço de branco boas para o pôr/nascer do sol, aproximadamente 15.000 K. |
AWB_MODE_SHADE | Correção de configurações de balanço de branco boas para áreas iluminadas indiretamente pelo sol, cerca de 7500K. |
ANDROID_CONTROL_AWB_STATE | Metadados dinâmicos que descrevem o estado atual do algoritmo AWB, informados pelo HAL nos metadados do resultado. |
AWB_STATE_INACTIVE | Estado inicial do AWB após a mudança de modo. Quando o dispositivo é aberto, ele precisa iniciar nesse estado. |
AWB_STATE_SEARCHING | O AWB não é convertido em um valor bom e está mudando os parâmetros de ajuste de cores. |
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. O HAL pode sair desse estado de forma espontânea para buscar uma solução melhor. |
AWB_STATE_LOCKED | O AWB foi bloqueado com o controle AWB_LOCK. Os valores de ajuste de cor não estão mudando. |
Outras entradas de metadados | |
---|---|
ANDROID_CONTROL_AWB_LOCK | Controle para travar os ajustes de cor do AWB nos 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. |
Observações gerais sobre a transição da máquina de estados
Alternar entre os modos AF, AE ou AWB sempre redefine o estado do algoritmo para INACTIVE. Da mesma forma, alternar entre CONTROL_MODE ou CONTROL_SCENE_MODE se CONTROL_MODE == USE_SCENE_MODE redefine todos os estados do algoritmo como INATIVO.
As tabelas abaixo são por modo.
Máquinas de estado do AF
mode = AF_MODE_OFF or AF_MODE_EDOF | |||
---|---|---|---|
Estado | Causa da transformação | Novo estado | Observações |
INATIVA | O AF está desativado |
mode = AF_MODE_AUTO ou AF_MODE_MACRO | |||
---|---|---|---|
Estado | Causa da transformação | Novo estado | Observações |
INATIVA | AF_TRIGGER | ACTIVE_SCAN | Iniciar varredura de AF A lente está se movendo |
ACTIVE_SCAN | Verificação de AF concluída | FOCUSED_LOCKED | Se a AF for bem-sucedida A lente está bloqueada |
ACTIVE_SCAN | Verificação de AF concluída | NOT_FOCUSED_LOCKED | Se a AF for bem-sucedida A lente está bloqueada |
ACTIVE_SCAN | AF_CANCEL | INATIVA | Cancelar/redefinir AF A lente está bloqueada |
FOCUSED_LOCKED | AF_CANCEL | INATIVA | Cancelar/redefinir AF |
FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Iniciar nova varredura A lente está se movendo |
NOT_FOCUSED_LOCKED | AF_CANCEL | INATIVA | Cancelar/redefinir AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Iniciar nova varredura A lente está se movendo |
Todos os estados | Mudança do modo | INATIVA |
mode = AF_MODE_CONTINUOUS_VIDEO | |||
---|---|---|---|
Estado | Causa da transformação | Novo estado | Observações |
INATIVA | O HAL inicia uma nova verificação | PASSIVE_SCAN | Iniciar varredura de AF A lente está se movendo |
INATIVA | AF_TRIGGER | NOT_FOCUSED_LOCKED | Consulta de estado do AF A lente está bloqueada |
PASSIVE_SCAN | O HAL conclui a verificação atual | PASSIVE_FOCUSED | Finalizar a leitura de AF A lente está bloqueada |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Transformação imediata se o foco for bom A lente está bloqueada |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformação imediata se o foco estiver incorreto A lente está bloqueada |
PASSIVE_SCAN | AF_CANCEL | INATIVA | Redefinir a posição da lente A lente está bloqueada |
PASSIVE_FOCUSED | O HAL inicia uma nova verificação | PASSIVE_SCAN | Iniciar verificação de AF A lente está se movendo |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Transformação imediata se o foco for bom A lente está bloqueada |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformação imediata
se o foco estiver incorreto
A lente está bloqueada |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Nenhum efeito |
FOCUSED_LOCKED | AF_CANCEL | INATIVA | Reiniciar a leitura automática |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Nenhum efeito |
NOT_FOCUSED_LOCKED | AF_CANCEL | INATIVA | Reiniciar a leitura automática |
mode = AF_MODE_CONTINUOUS_PICTURE | |||
---|---|---|---|
Estado | Causa da transformação | Novo estado | Observações |
INATIVA | O HAL inicia uma nova verificação | PASSIVE_SCAN | Iniciar verificação de AF A lente está se movendo |
INATIVA | AF_TRIGGER | NOT_FOCUSED_LOCKED | Consulta de estado do AF A lente está bloqueada |
PASSIVE_SCAN | O HAL conclui a verificação atual | PASSIVE_FOCUSED | Finalizar a leitura de AF
A lente está bloqueada |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Transformação eventual quando o foco é bom A lente está bloqueada |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformação eventual se não for possível focar A lente está bloqueada |
PASSIVE_SCAN | AF_CANCEL | INATIVA | Redefinir a posição da lente A lente está bloqueada |
PASSIVE_FOCUSED | O HAL inicia uma nova verificação | PASSIVE_SCAN | Iniciar verificação de AF A lente está se movendo |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Transformação imediata se o foco for bom A lente está bloqueada |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformação imediata se o foco estiver incorreto A lente está bloqueada |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Nenhum efeito |
FOCUSED_LOCKED | AF_CANCEL | INATIVA | Reiniciar a leitura automática |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Nenhum efeito |
NOT_FOCUSED_LOCKED | AF_CANCEL | INATIVA | Reiniciar a leitura automática |
Máquinas de estado AE e AWB
As máquinas de estado AE e AWB são quase idênticas. A AE tem outros estados FLASH_REQUIRED e PRECAPTURE. Portanto, as linhas abaixo que se referem a esses dois estados precisam 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 | Observações |
INATIVA | AE/AWB desativado |
mode = AE_MODE_ON_* / AWB_MODE_AUTO | |||
---|---|---|---|
Estado | Causa da transformação | Novo estado | Observações |
INATIVA | O HAL inicia a verificação de AE/AWB | PESQUISANDO | |
INATIVA | AE/AWB_LOCK ativado | BLOQUEADO | Valores bloqueados |
PESQUISANDO | O HAL finaliza a verificação de AE/AWB | CONVERGIDA | Valores bons, sem mudanças |
PESQUISANDO | O HAL conclui a verificação de AE | FLASH_REQUIRED | Convergente, mas muito escuro sem flash |
PESQUISANDO | AE/AWB_LOCK ativado | BLOQUEADO | Valores bloqueados |
CONVERGIDA | O HAL inicia a verificação de AE/AWB | PESQUISANDO | Valores bloqueados |
CONVERGIDA | AE/AWB_LOCK ativado | BLOQUEADO | Valores bloqueados |
FLASH_REQUIRED | O 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 não são bons após o desbloqueio |
BLOQUEADO | AE/AWB_LOCK desativado | CONVERGIDA | Valores válidos após o desbloqueio |
BLOQUEADO | AE_LOCK desativado | FLASH_REQUIRED | Exposição boa, mas muito escura |
Todos os estados da AE | PRECAPTURE_START | PRECAPTURA | Iniciar a sequência de pré-captura |
PRECAPTURA | Sequência concluída, AE_LOCK desativado | CONVERGIDA | Pronto para captura de alta qualidade |
PRECAPTURA | Sequência concluída, AE_LOCK ativado | BLOQUEADO | Pronto para captura de alta qualidade |
Ativar 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 app.
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 ativada, ela vai 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. Por exemplo, se a exposição automática estiver ativada em uma solicitação, o HAL vai substituir os campos de exposição, ganho e duração do frame (e possivelmente os campos de flash, dependendo do modo de AE) da solicitação. A lista de controles relevantes é:
Nome do controle | Unidade | Observações |
---|---|---|
android.control.mode | tipo enumerado: OFF, AUTO, USE_SCENE_MODE | Controle 3A de alto nível. Quando definido como OFF, todo o controle 3A pelo HAL é desativado. O app precisa definir os campos para capturar os parâmetros. 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.* estão desativadas, e o HAL implementa uma das configurações do modo de cena (como ACTION, SUNSET ou PARTY) como quiser. |
android.control.afMode | enum | OFF significa controle manual do foco da lente por android.lens.focusDistance. |
android.control.aeMode | enum | OFF significa controle manual da duração da exposição/ganho/frame usando android.sensor.exposureTime / .sensitivity / .frameDuration |
android.control.awbMode | enum | "OFF" significa controle manual do balanço de branco. |