Esta página fornece uma lista abrangente dos testes no Camera Image Test Suite (ITS), que faz parte do Android Compatibility Test Suite (CTS) Verifier. Os testes ITS são testes funcionais, o que significa que eles não medem a qualidade da imagem, mas que todas as funções da câmera anunciadas estão funcionando conforme o esperado. Este documento permite que desenvolvedores e testadores entendam o que os testes individuais fazem e como depurar falhas de teste.
Os testes são agrupados por cena da seguinte forma:
- scene0 : Capture metadados, jitter, giroscópio, vibração
- cena1 : Exposição, sensibilidade, compensação EV, YUV vs JPEG/RAW
- cena2 : detecção de rosto
- Scene3 : Aprimoramento de borda, movimento da lente
- Scene4 : Proporção, corte, campo de visão
- cena5 : sombreamento da lente
- cena6 : Zoom
- sensor_fusion : Compensação de tempo da câmera/giroscópio
Consulte as seções individuais para obter uma descrição de cada cena.
cena0
Os testes Scene0 não requerem informações de cena específicas. No entanto, o telefone deve estar parado para testes de giroscópio e vibração.
test_burst_capture
Verifica se todo o pipeline de captura pode acompanhar a velocidade da captura em tamanho real e o tempo de CPU.
APIs testadas:
Aprovado: Captura uma sequência de imagens em tamanho real e a câmera é rápida o suficiente para evitar o tempo limite.
test_capture_result_dump
Testa se um resultado de captura é retornado de uma captura manual e o despeja.
APIs testadas:
Aprovado: conclui a captura e despeja os resultados da captura.
test_gyro_bias
Testa se o giroscópio tem saída estável quando o dispositivo está parado. Os dados são plotados como uma média de 20 pontos de dados.
APIs testadas:
Aprovado: O delta da leitura do giroscópio é menor que 0,01 ao longo do tempo.
test_gyro_bias_plot.png
teste_jitter
Mede o jitter nos carimbos de data e hora da câmera.
APIs testadas:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Pass: Há pelo menos um delta de 30 ms entre os quadros.
test_jitter_plot.png (Observe o pequeno intervalo do eixo y. O jitter é realmente pequeno neste gráfico.)
test_metadata
Testa a validade das entradas de metadados. Examina os resultados da captura e os objetos de características da câmera. Este teste usa valores de exposição e ganho de auto_capture_request
porque o conteúdo da imagem não é importante.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: nível de hardware, rollingShutterSkew
, tags frameDuration
, timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, FOV, distância hiperfocal estão presentes e têm valores válidos.
test_param_sensitivity_burst
Testa se o parâmetro android.sensor.sensitivity
é aplicado corretamente na intermitência. Inspeciona apenas os metadados de saída.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado: os dados de saída têm uma tolerância de erro inferior a 0,2%.
test_read_write
Testa se o dispositivo grava os valores corretos de exposição e ganho lendo os metadados de captura.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Aprovado: os valores de leitura e gravação correspondem em todas as tomadas.
test_sensor_events
Testa que o dispositivo consulta e imprime eventos de sensor para dispositivos que anunciam suporte à fusão de sensores. Os sensores esperados são acelerômetro, giroscópio e magnetômetro. Este teste só funciona se a tela estiver ligada, o que significa que o dispositivo não está no modo de espera.
APIs testadas:
Aprovado: Os eventos para cada sensor são recebidos.
teste_solid_color_test_pattern
Testa se os padrões de teste de cores sólidas são gerados corretamente para o silenciamento da câmera. Se o silenciamento da câmera for suportado, os padrões de teste de cores sólidas deverão ser suportados. Se o silenciamento da câmera não for suportado, os padrões de teste de cores sólidas serão testados apenas se o recurso for anunciado.
Se as imagens RAW forem suportadas, a atribuição de cores também será testada. As cores testadas são preto, branco, vermelho, azul e verde. Para câmeras que não suportam imagens RAW, apenas o preto é testado.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Aprovado: os padrões de teste sólidos suportados são da cor correta e há baixa variação na imagem.
teste_teste_padrão
Testa o parâmetro android.sensor.testPatternMode
para capturar quadros para cada padrão de teste válido e verifica se os quadros são gerados corretamente para cores sólidas e barras de cores. Este teste inclui as seguintes etapas:
- Captura imagens para todos os padrões de teste suportados.
- Executa uma verificação simples de correção do padrão de teste de cores sólidas e das barras de cores.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Aprovado: os padrões de teste com suporte são gerados corretamente.
test_test_patterns_2.jpg
test_tonemap_curve
Testa a conversão do padrão de teste de RAW para YUV com mapa de tons linear. Este teste requer android.sensor.testPatternMode = 2
(COLOR_BARS) para gerar um padrão de imagem perfeito para conversão de mapa de tons. Garante que o pipeline tenha saídas de cores adequadas com mapa de tons linear e entrada de imagem ideal (depende de test_test_patterns
).
APIs testadas:
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Passe: O YUV e o RAW são semelhantes entre si.
test_tonemap_curve_raw_2.jpg
test_tonemap_curve_yuv_2.jpg
test_unified_timestamp
Testa se os eventos do sensor de imagem e movimento estão no mesmo domínio de tempo.
APIs testadas:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.hardware.Sensor#TYPE_GYROSCOPE
Aprovado: os carimbos de data/hora de movimento estão entre os dois carimbos de data/hora da imagem.
teste_vibração_restrição
Testa se a vibração do dispositivo está funcionando conforme o esperado.
APIs testadas:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.os.Vibrator
-
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Aprovado: o dispositivo não vibra quando silenciado pela API de restrição de áudio da câmera.
cena1
scene1 é um gráfico cinza. O gráfico cinza deve cobrir 30% do centro do campo de visão da câmera. Espera-se que o gráfico cinza desafie 3A (exposição automática, balanço de branco automático, foco automático) moderadamente, pois a região central não possui recursos. No entanto, a solicitação de captura especifica toda a cena que inclui recursos suficientes para a convergência de 3A.
As câmeras RFoV podem ser testadas no WFoV ou no equipamento de teste RFoV. Se uma câmera RFoV for testada no equipamento de teste WFoV, o gráfico será dimensionado em ⅔ para garantir alguns limites para o gráfico cinza no FoV para ajudar a convergir 3A.
scene1: gráfico em tamanho real (esquerda). ⅔ gráfico em escala (direita).
teste_3a
Testa a convergência de 3A com um alvo moderadamente desafiador.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: 3A converge e os valores 3A retornados são válidos.
teste_ae_af
Testa os algoritmos de exposição automática 3A (AE) e foco automático (AF) individualmente.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Aprovado: 3A converge e os valores 3A retornados são válidos.
test_ae_precapture_trigger
Testa a máquina de estado AE ao usar o gatilho de pré-captura. Captura cinco solicitações manuais com AE desabilitado. A última solicitação tem um gatilho de pré-captura AE, que deve ser ignorado porque o AE está desabilitado.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Aprovado: AE converge.
test_auto_vs_manual
Testes que capturaram fotos automáticas e manuais têm a mesma aparência.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Aprovado: Os ganhos e a transformação manuais do balanço de branco relatados em cada resultado de captura correspondem à estimate
do balanço de branco automático do algoritmo 3A da câmera.
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
teste_preto_branco
Testa se o dispositivo produz imagens completas em preto e branco. Faz duas capturas, a primeira com ganho extremamente baixo e exposição curta, o que resulta em uma foto preta, e a segunda com ganho extremamente alto e exposição longa, o que resulta em uma foto branca.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: Produz imagens em preto e branco.
test_black_white_black.jpg | test_black_white_white.jpg |
test_black_white_plot_means.png
test_burst_sameness_manual
Tira 5 sequências de 50 imagens com configuração de captura manual e verifica se todas são idênticas. Este teste pode ser usado para identificar se existem frames esporádicos que são processados de forma diferente ou possuem artefatos.
APIs testadas:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
-
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Pass: As imagens são idênticas visualmente e em valores RGB.
Falha: mostra um pico ou queda do gráfico de média RGB no início de cada explosão
- A tolerância é de 3% para
first_API_level
< 30 - A tolerância é de 2% para
first_API_level
>= 30
test_burst_sameness_manual_mean.jpg
test_burst_sameness_manual_plot_means.png
test_capture_result
Testa se dados válidos retornam em objetos CaptureResult
. Faz uma captura automática, manual e automática.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Aprovado: Os metadados são válidos para todas as capturas e as configurações manuais não vazam para a segunda captura automática. Traça a correção de sombreamento da lente para as capturas.
test_capture_result_plot_lsc_auto_ch0.png
test_channel_saturation
Testa se os canais RGB saturam uniformemente para eliminar o tingimento em regiões saturadas da imagem.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado: Os canais saturados têm valores RGB de [255, 255, 255] com uma margem de erro inferior a 1% de diferença.
test_channel_saturation.jpg
test_crop_region_raw
Testa que os fluxos RAW não podem ser cortados.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Aprovado: as imagens YUV são cortadas no centro, mas não as imagens RAW.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
Testes que as regiões de cultivo funcionam. Captura uma imagem completa e cria patches de 5 regiões diferentes (cantos e centro). Captura imagens com recorte definido para as 5 regiões. Compara o patch e os valores da imagem de corte.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Aprovado: A imagem da região recortada corresponde ao remendo que corresponde à imagem recortada.
test_dng_noise_model
Verifica se os parâmetros do modelo bruto DNG estão corretos. O gráfico mostra a variação medida de um patch central do cartão cinza em fotos brutas capturadas em uma faixa de sensibilidades e compara esses valores com a variação esperada em cada sensibilidade pelo modelo de ruído DNG na câmera HAL (com base na parâmetros O,S retornados nos objetos de resultado da captura). Para obter mais detalhes sobre o modelo de ruído DNG, baixe o seguinte documento sobre o modelo de ruído DNG .
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado: os parâmetros do modelo bruto DNG estão corretos. Os valores RGB esperados correspondem aos valores RGB reais medidos.
test_dng_noise_model_plog.png
test_ev_compensation_advanced
Testa se a compensação do valor de exposição (EV) é aplicada. O teste aumenta a exposição em oito etapas e verifica o brilho medido em relação ao brilho esperado. Os valores esperados são calculados a partir do brilho da imagem sem compensação EV aplicada e o valor esperado saturará se os valores calculados excederem a faixa de valor real da imagem. O teste falha se os valores esperados e os valores medidos não corresponderem ou as imagens forem superexpostas em cinco etapas.
APIs testadas:
Aprovado: as imagens mostram uma exposição crescente sem superexposição em cinco etapas.
test_ev_compensation_advanced_plot_means.png
test_ev_compensation_basic
Testa se a compensação EV é aplicada usando um intervalo criado com CONTROL_AE_COMPENSATION_STEP
. Oito quadros são capturados em cada valor de compensação.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Aprovado: Captura aumento de luma com configuração de compensação EV aumentada, e os oito quadros capturados para cada configuração de compensação EV têm valores de luma estáveis.
test_ev_compensation_basic.png
exposição_teste
Testa que uma exposição constante é alcançada, pois o ISO e o tempo de exposição variam. Tira uma série de fotos com ISO e tempo de exposição escolhidos para equilibrar um ao outro. Os resultados devem ter o mesmo brilho, mas ao longo da sequência a imagem deve ficar mais ruidosa. Verifica se os valores médios dos pixels da amostra estão próximos uns dos outros. Garante que as imagens não sejam fixadas em 0 ou 1 (o que as faria parecer linhas planas). O teste também pode ser executado com imagens RAW definindo o sinalizador de debug
em seu arquivo de configuração.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado: As imagens têm o mesmo brilho, mas ficam mais ruidosas com ISO mais alto. Os planos RGB são planos quando o valor da exposição ISO* é constante no espaço de ganho testado.
test_exosure_plot_means.png
test_exosure_mult=1.00.jpg | test_exosure_mult=64.00.jpg |
teste_jpeg
Testes que converteram imagens YUV e imagens JPEG do dispositivo têm a mesma aparência. O teste pega os 10% centrais da imagem e calcula o valor RGB e verifica se eles correspondem.
APIs testadas:
Aprovado: A diferença média de RGB entre cada imagem é inferior a 3%.
test_jpeg_fmt=jpg.jpg | test_jpeg=fmt=yuv.jpg |
test_latching
Testa se as configurações (exposição e ganho) travam no quadro certo para câmeras FULL
e LEVEL_3
. Tira uma série de fotos usando solicitações consecutivas, variando os parâmetros de solicitação de captura entre as fotos. Verifica se as imagens possuem as propriedades esperadas.
APIs testadas:
Aprovado: Imagens [2, 3, 6, 8, 10, 12, 13] aumentaram o ISO ou a exposição e aparecem com médias RGB mais altas em test_latching_plot_means.png
.
test_latching_i=00.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
test_latching_i=12.jpg |
test_latching_plot_means.png
teste_linearidade
Testa se o processamento do dispositivo pode ser invertido em pixels lineares. Captura uma sequência de disparos com o dispositivo apontado para um alvo uniforme.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Aprovado: Os valores de R, G, B devem aumentar linearmente com o aumento da sensibilidade.
test_linearity_plot_means.png
test_locked_burst
Testa o bloqueio 3A e a explosão YUV (usando a configuração automática). Este teste foi desenvolvido para passar mesmo em dispositivos limitados que não possuem MANUAL_SENSOR
ou PER_FRAME_CONTROLS
. O teste verifica a consistência da imagem YUV enquanto a verificação da taxa de quadros está em CTS.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Passe: As capturas parecem consistentes.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
test_multi_camera_match
Testes para ver se várias câmeras em dispositivos fornecem valores RGB semelhantes para um patch cinza.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#LENS_FOCAL_LENGTH
Aprovado: Câmeras diferentes produzem valores RGB semelhantes para o mesmo patch de cinza.
test_multi_camera+match_yuv_fl=4.38.jpg
test_param_color_correction
Testa se os parâmetros android.colorCorrection.*
são aplicados quando definidos. Tira fotos com diferentes valores de transformação e ganho e testa se elas parecem correspondentemente diferentes. A transformação e os ganhos são escolhidos para tornar a saída cada vez mais vermelha ou azul. Usa um mapa de tons linear. O mapeamento de tons é uma técnica usada no processamento de imagens para mapear um conjunto de cores para outro para aproximar a aparência de imagens de alto alcance dinâmico em um meio que possui um alcance dinâmico mais limitado.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Aprovado: Os valores de R e B aumentam de acordo com a transformação.
test_param_color_correction_plot_means.png
*O eixo x são as solicitações de captura: 0 = unidade, 1 = aumento vermelho, 2 = aumento azul
test_param_color_correction_req=0.jpg
test_param_color_correctness_req=1.jpg (R boost)
test_param_color_correction_req=2.jpg (aumento B)
test_param_exposure_time
Testa se o parâmetro android.sensor.exposureTime
é aplicado.
APIs testadas:
Passe: Cada foto é mais brilhante que a anterior.
test_param_exosure_time_frame0.jpg
test_param_exposure_time_plot.png
test_param_flash_mode
Testa se o parâmetro android.flash.mode
é aplicado. Configura manualmente a exposição para o lado escuro, para que seja óbvio se o flash disparou ou não, e usa um mapa de tons linear. Verifica o centro com a imagem do bloco para ver se há um gradiente grande criado para verificar se o flash disparou.
APIs testadas:
Passar: O centro da imagem lado a lado tem um grande gradiente, o que significa que o flash disparou.
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
test_param_noise_reduction
Testa se o parâmetro android.noiseReduction.mode
é aplicado corretamente quando definido. Captura imagens com a câmera pouco iluminada. Usa um alto ganho analógico para garantir que a imagem capturada seja ruidosa. Captura três imagens, para NR desligado, "rápido" e "alta qualidade". Também captura uma imagem com baixo ganho e NR desligado e usa a variação disso como linha de base. Quanto maior o SNR (Signal to Noise Ratio), melhor a qualidade da imagem.
APIs testadas:
Aprovado: O SNR varia com os diferentes modos de redução de ruído e se comporta de maneira semelhante ao gráfico abaixo.
test_param_noise_reduction_plot_SNRs.png
0: DESLIGADO, 1: RÁPIDO, 2: HQ, 3: MIN, 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_sensibilidade
Testa se o parâmetro android.sensor.sensitivity
é aplicado. O teste aumenta a sensibilidade em 5 passos com exposição fixa para cada disparo.
APIs testadas:
Pass: O meio RGB do centro 10% fica mais brilhante com maior sensibilidade.
test_param_sensitivity_iso=0055.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
test_param_shading_mode
Testa se o parâmetro android.shading.mode
é aplicado.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Aprovado: Os modos de sombreamento são alternados e os mapas de sombreamento da lente são modificados conforme o esperado.
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
Testa se o parâmetro android.tonemap.mode é aplicado. Aplica diferentes curvas de mapa de tons a cada canal R, G, B e verifica se as imagens de saída são modificadas conforme o esperado. Este teste consiste em dois testes, test1 e test2.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Passar:
- test1: Ambas as imagens têm um mapa de tons linear, mas n=1 tem um gradiente mais acentuado. O canal G (verde) é mais claro para a imagem n=1.
- test2: Mesmo mapa de tons, mas comprimento diferente. As imagens são as mesmas.
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
test_post_raw_sensitivity_boost
Verifica o aumento de sensibilidade pós-RAW. Captura um conjunto de imagens RAW e YUV com sensibilidade diferente, publica a combinação de aumento de sensibilidade RAW e verifica se a média do pixel de saída corresponde às configurações da solicitação.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado: as imagens RAW ficam mais escuras à medida que o aumento aumenta, enquanto as imagens YUV permanecem constantes no brilho
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
Captura um conjunto de imagens brutas com ganhos crescentes e mede o ruído. Captura apenas raw, em uma rajada.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Passe: Cada tiro é mais ruidoso que o tiro anterior, pois o ganho está aumentando.
Usa a variação da célula da grade de estatísticas do centro.
test_raw_burst_sensitivity_variance.png
test_raw_exposition
Captura um conjunto de imagens brutas com tempo de exposição crescente e mede os valores de pixel.
APIs testadas:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Passar: Aumentar o ISO (ganho) torna os pixels mais sensíveis à luz, então o gráfico se move para a esquerda.
test_raw_exosure_s=55.png
(10⁰ é 1 ms, 10¹ é 10 ms, 10⁻¹ é 0,1 ms)
test_raw_exosure_s=132.png
test_raw_exosure_s=209.png
test_raw_exosure_s=286.png
test_raw_exosure_s=363.png
test_raw_exosure_s=440.png
test_raw_sensitivity
Captura um conjunto de imagens raw com sensibilidades crescentes e mede o ruído (variância) no centro 10% da imagem. Testa que cada tiro é mais ruidoso que o anterior.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Passe: A variação aumenta a cada tiro.
test_raw_sensitivity_variance.png
test_reprocess_noise_reduction
Testa se android.noiseReduction.mode
é aplicado para solicitações de reprocessamento. Captura imagens reprocessadas com a câmera pouco iluminada. Usa um alto ganho analógico para garantir que a imagem capturada seja ruidosa. Captura três imagens reprocessadas, para NR desligado, "rápido" e "alta qualidade". Captura uma imagem reprocessada com baixo ganho e NR desligado e usa a variação disso como linha de base.
APIs testadas:
Passe: RÁPIDO >= DESLIGADO, HQ >= RÁPIDO, HQ >> DESLIGADO
Gráfico típico de SNR vs NR_MODE
test_tonemap_sequence
Testa uma sequência de disparos com diferentes curvas de mapa de tons. Captura 3 fotos manuais com um mapa de tons linear. Captura 3 fotos manuais com mapa de tons padrão. Calcula o delta entre cada par de quadros consecutivos.
APIs testadas:
Pass: Existem 3 frames idênticos seguidos por um conjunto diferente de 3 frames idênticos.
test_tonemap_sequence_i=0.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
Testa se todos os tamanhos e formatos relatados para captura de imagem funcionam. Usa uma solicitação manual com um mapa de tons linear para que o YUV e o JPEG tenham a mesma aparência quando convertidos pelo módulo its.image. As imagens não são salvas por padrão, mas podem ser salvas ativando debug_mode
.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Aprovado: Todos os centros de imagem têm uma diferença máxima de RMS (valor quadrático médio de um sinal) em imagens convertidas em RGB com 3% da imagem YUV de resolução mais alta.
test_yuv_jpeg_all.png
test_yuv_plus_dng
Testa se os tamanhos e formatos relatados para captura de imagem funcionam.
APIs testadas:
Aprovado: O teste conclui e retorna as imagens solicitadas.
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
Testa a captura de um único quadro como saídas YUV e JPEG. Usa uma solicitação manual com um mapa de tons linear para que o YUV e o JPEG tenham a mesma aparência (quando convertidos pelo módulo its.image
).
APIs testadas:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Aprovado: As imagens YUV e JPEG são semelhantes e têm menos de 1% de diferença RMS (valor quadrático médio de um sinal).
test_yuv_plus_jpg_jpg.jpg | test_yuv_plus_jpeg_yuv.jpg |
test_yuv_plus_raw
Testa a captura de um único quadro como saídas RAW e YUV. Usa uma solicitação manual com mapa de tons linear, portanto, espera-se que RAW e YUV sejam os mesmos. Compara os valores RGB de 10% do centro das imagens convertidas em RGB. Registra android.shading.mode
.
APIs testadas:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Aprovado: As imagens YUV e JPEG são semelhantes e têm menos de 3,5% de diferença RMS (valor quadrático médio de um sinal).
test_yuv_plus_raw_shading=1_raw.jpg | test_yuv_plus_raw_shading=1_yuv.jpg |
test_yuv_plus_raw10
Testa a captura de um único quadro como saídas RAW10 e YUV. Usa uma solicitação manual com mapa de tons linear, portanto, espera-se que RAW e YUV sejam os mesmos. Compara os valores RGB de 10% do centro das imagens convertidas em RGB. Registra android.shading.mode
.
APIs testadas:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW10
Aprovado: As imagens RAW10 e YUV são semelhantes e têm menos de 3,5% de diferença RMS (valor quadrático médio de um sinal).
test_yuv_plus_raw10_shading=1_raw.jpg | test_yuv_plus_raw10_shading=1_yuv.jpg |
test_yuv_plus_raw12
Testa a captura de um único quadro como saídas RAW12 e YUV. Usa uma solicitação manual com mapa de tons linear, portanto, espera-se que RAW e YUV sejam os mesmos. Compara os valores RGB de 10% do centro das imagens convertidas em RGB. Registra android.shading.mode
.
APIs testadas:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW12
Aprovado: As imagens RAW12 e YUV são semelhantes e têm menos de 3,5% de diferença RMS (valor quadrático médio de um sinal).
test_yuv_plus_raw12_shading=1_raw.jpg | test_yuv_plus_raw12_shading=1_yuv.jpg |
cena2_a
scene2_a tem três rostos com fundo cinza e roupas neutras. Os rostos são escolhidos para ter uma ampla gama de tons de pele.
cena2_a
test_effects
Captura quadro para efeitos de câmera suportados e verifica se eles são gerados corretamente. O teste verifica apenas os efeitos OFF
e MONO
, mas salva as imagens para todos os efeitos suportados.
APIs testadas:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
-
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Pass: Captura a imagem da cena com os efeitos OFF
e uma imagem monocromática com os efeitos definidos para MONO
.
test_effects_MONO.jpg
test_faces
Testa a detecção de rosto. A imagem é salva, mas as informações da caixa e do ponto de referência são tabuladas em test_faces_stdout.txt
.
APIs testadas:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado: Detecta pelo menos um rosto da imagem.
test_format_combos
Testa diferentes combinações de formatos de saída.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
Passe: Todas as combinações são capturadas com sucesso.
test_jpeg_quality
Testa a qualidade de compactação JPEG da câmera. Passe as qualidades JPEG por meio de android.jpeg.quality
e garanta que as Tabelas de Quantização sejam alteradas corretamente.
APIs testadas:
Aprovado: A matriz de quantização diminui com o aumento da qualidade. (Matriz representa o fator de divisão.)
Pixel 4 câmera traseira luma/chroma matriz DQT médias vs qualidade JPEG
Exemplo de teste com falha
Observe que para imagens de qualidade muito baixa (jpeg.quality < 50), não há aumento na compressão na matriz de quantização.
test_num_faces
Testa a detecção de rosto.
APIs testadas:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Passe: Encontra três faces.
test_num_faces_fd_mode_1.jpg
cena2_b
test_auto_per_frame_control
Testa as propriedades PER_FRAME_CONTROL
para solicitações de captura automática.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: Todas as propriedades PER_FRAME_CONTROL
estão presentes.
test_auto_per_frame_control_frame_1.jpg
test_auto_per_frame_control_frame_10.jpg
test_auto_per_frame_control_frame_29.jpg
test_auto_per_frame_control_plot.png
test_num_faces
Testa a detecção de rosto com maior diversidade de tons de pele em cenas de rosto.
APIs testadas:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Passe: Encontra 3 faces.
test_num_faces_fd_mode_1.jpg
cena2_c
test_num_faces
Testa a detecção de rosto com maior diversidade de tons de pele em cenas de rosto.
APIs testadas:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Passe: Encontra 3 faces.
test_num_faces_fd_mode_1.jpg
test_jpeg_capture_perf_class
Testa a latência de captura JPEG para a classe de desempenho S conforme especificado na seção 2.2.7.2 Câmera no CDD.
Aprovado: DEVE ter latência de captura JPEG da camera2 < 1000ms para resolução de 1080p conforme medido pelo PerformanceTest da câmera CTS sob condições de iluminação ITS (3000K) para ambas as câmeras primárias.
test_camera_launch_perf_class
Testa a latência de inicialização da câmera para a classe de desempenho S conforme especificado na seção 2.2.7.2 Câmera no CDD.
Aprovado: DEVE ter a latência de inicialização da câmera2 (abra a câmera para o primeiro quadro de visualização) < 600 ms, conforme medido pelo teste de desempenho da câmera CTS sob condições de iluminação ITS (3000 K) para ambas as câmeras primárias.
cena2_d
test_num_faces
Testa a detecção de rosto com maior diversidade de tons de pele em cenas de rosto.
APIs testadas:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Passe: Encontra 3 faces.
cena2_e
test_continuous_picture
50 quadros de resolução VGA são capturados com a solicitação de captura primeiro configurando android.control.afMode = 4 (CONTINUOUS_PICTURE).
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_CAPTURE_INTENT
android.hardware.camera2.CaptureResult#CONTROL_POST_RAW_SENSITIVITY_BOOST
Aprovado: o sistema 3A se estabelece no final de uma captura de 50 quadros.
test_num_faces
Testa a detecção de rosto com maior diversidade de tons de pele em cenas de rosto.
APIs testadas:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Passe: Encontra 3 faces.
cena3
O Scene3 usa o gráfico ISO12233 e a maioria dos testes usa um método de extração de gráfico para localizar o gráfico na cena. Por esse motivo, a maioria das imagens salvas não possui bordas como as imagens das cenas 1, 2 ou 4, mas apenas o gráfico.
test_3a_consistency
Testes de consistência 3A.
APIs testadas:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Pass: 3A converge para exposição, ganho, awb (equilíbrio de branco automático) e fd (distância de foco) três vezes dentro da tolerância.
test_edge_enhancement
Testa se o parâmetro android.edge.mode
é aplicado corretamente. Captura imagens não reprocessadas para cada modo de borda e retorna a nitidez da imagem de saída e os metadados do resultado da captura. Processa uma solicitação de captura com um determinado modo de borda, sensibilidade, tempo de exposição, distância de foco e parâmetro de superfície de saída.
Aprovado: o modo rápido não é mais nítido que o modo HQ (alta qualidade).
APIs testadas:
Parâmetros da câmera impactados:
-
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (modo rápido)
test_edge_enhancement_edge=2.jpg (modo de alta qualidade)
test_flip_mirror
Testa se a imagem está orientada corretamente conforme a seção CDD 7.5.2 Câmera frontal [C-1-5] .
Imagens espelhadas, invertidas ou giradas podem ser identificadas pelo recurso de diamante próximo ao centro.
Aprovado: a imagem não é invertida, espelhada ou girada.
test_flip_mirror_scene_patch.jpg
test_lens_movement_reporting
Testa se o sinalizador de movimento da lente é relatado corretamente. Captura uma sequência de 24 imagens com os primeiros 12 quadros na distância de foco ideal (conforme encontrado por 3A) e os últimos 12 quadros na distância de foco mínima. Em torno do quadro 12, a lente se move fazendo com que a nitidez diminua. A nitidez eventualmente se estabiliza à medida que a lente se move para a posição final. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first 10 frames with the lens stationary at optimum focal distance, and the final 10 frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass: Lens movement flag is True
in the frame with sharpness change.
test_lens_position
Tests if the focus position is properly reported for moving lenses.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_HYPERFOCAL_DISTANCE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
Pass: Correct focus positions are reported.
test_reprocess_edge_enhancement
Returns sharpness of the output images and the capture result metadata. Processes a capture request with a given edge mode, sensitivity, exposure time, focus distance, output surface parameter, and reprocess format.
APIs tested:
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Pass: Sharpness for the different edge modes is correct.
scene4
Scene4 consists of a black circle on a white background inside a square.
scene4
test_aspect_ratio_and_crop
Takes pictures of a circle inside of a square over all formats. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FOV (field of view) is preserved.
test_multi_camera_alignment
Tests the multi camera system parameters related to camera spacing. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Pass: Focal lengths and circles sizes are consistent.
scene5/diffuser
test_lens_shading_and_color_uniformity
Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.
scene6
Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.
scene6
test_zoom
Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.
test_zoom to find the contour of the circle closest to the center.
scene_change
test_scene_change
The scene change makes use of the tablet displaying a face scene and then turns the tablet on and off to create a scene change. The scene reuses scene2_e, but is in a separate scene because of the required tablet control. Additionally, for manual testing, the scene change can be accomplished by waving your hand in front of the camera.
APIs tested:
Pass: The android.control.afSceneChange
flag is asserted with a scene change.
sensor_fusion
Sensor fusion tests require specific phone movement in front of a checkerboard pattern. The sensor_fusion
tests can be automated with the Sensor Fusion Box .
Image of checkerboard
test_multi_camera_frame_sync
Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.
test_sensor_fusion
Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the REALTIME
parameter is not enabled.
The test_sensor_fusion
test generates a number of plots. The two most important plots for debugging are:
test_sensor_fusion_gyro_events
: Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.test_sensor_fusion_plot_rotations
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_FACING
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .