Testes de ITS da câmera

Esta página fornece uma lista abrangente dos testes do 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 não medem a qualidade da imagem, mas que todas as funções anunciadas da câmera 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.

Testes de portas ITS da câmera por propriedades de câmera exigidas, nível de API e nível de classe de desempenho de mídia (MPC). Para o nível de API, o ITS usa ro.product.first_api_level para bloquear testes adicionados em um nível de API específico que testa experiências negativas do usuário para funcionalidade em níveis de API mais baixos. O ITS usa ro.vendor.api_level para realizar testes de recursos adicionados em um nível de API específico que exigem novos recursos de hardware. Se ro.odm.build.media_performance_class for definido para um dispositivo, o ITS exigirá a execução de testes específicos dependendo do nível do MPC.

Os testes são agrupados por cena da seguinte forma:

  • scene0 : captura metadados, jitter, giroscópio, vibração
  • cena1 : Exposição, sensibilidade, compensação EV, YUV vs JPEG/RAW
  • scene2 : Detecção de rosto, testes que exigem cenas coloridas ou escuridão total
  • cena3 : Aprimoramento de borda, movimento da lente
  • scene4 : Proporção de aspecto, corte, campo de visão
  • cena 5 : Sombreamento de lente
  • cena 6 : Zoom
  • scene_extensions : Extensões de câmera
  • sensor_fusion : deslocamento 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 específicas da cena. 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 série 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, em seguida, faz dump dele.

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 é inferior a 0,01 ao longo do tempo.

test_gyro_bias_plot.png

test_gyro_bias_plot.png

teste_jitter

Mede o jitter nos carimbos de data/hora da câmera.

APIs testadas:

Aprovado: há pelo menos um delta de 30 ms entre os quadros.

test_jitter_plot.png

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. Observa os resultados da captura e os objetos com características da câmera. Este teste usa valores de exposição e ganho auto_capture_request porque o conteúdo da imagem não é importante.

APIs testadas:

Aprovado: nível de hardware, tags rollingShutterSkew , frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FoV e distância hiperfocal estão presentes e possuem valores válidos.

test_param_sensitivity_burst

Testa se o parâmetro android.sensor.sensitivity é aplicado corretamente no burst. Inspeciona apenas os metadados de saída.

APIs testadas:

Aprovado: Os dados de saída têm uma tolerância a erros inferior a 0,2%.

teste_leitura_gravação

Testa se o dispositivo grava os valores corretos de exposição e ganho lendo os metadados de captura.

APIs testadas:

Aprovado: os valores de leitura e gravação correspondem em todas as fotos.

test_sensor_events

Testa as consultas do dispositivo 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: 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 silenciar a câmera. Se o silenciamento da câmera for compatível, os padrões de teste de cores sólidas deverão ser suportados. Se o silenciamento da câmera não for compatível, os padrões de teste de cores sólidas serão testados apenas se o recurso for anunciado.

Se houver suporte para imagens RAW, 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:

Aprovado: Os padrões de teste sólidos suportados têm a 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:

  1. Captura imagens para todos os padrões de teste suportados.
  2. Executa uma verificação simples de correção para padrões de teste de cores sólidas e barras coloridas.

APIs testadas:

Aprovado: os padrões de teste suportados são gerados corretamente.

test_test_patterns_2

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:

Aprovação: O YUV e o RAW são semelhantes entre si.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_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:

Aprovado: os carimbos de data/hora do 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:

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, equilíbrio 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 equipamento de teste WFoV ou 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. Para obter descrições mais detalhadas dos equipamentos de teste de câmera, consulte Camera ITS-in-a-box .

cena1

cena1: gráfico em tamanho real (esquerda). ⅔ gráfico em escala (direita).

teste_3a

Testa a convergência de 3A com uma meta moderadamente desafiadora.

APIs testadas:

Aprovado: 3A converge e os valores 3A retornados são válidos.

teste_ae_af

Testa os algoritmos de exposição automática (AE) e foco automático (AF) 3A individualmente.

APIs testadas:

Aprovado: 3A converge e os valores 3A retornados são legais.

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 possui um gatilho de pré-captura de AE, que deve ser ignorado porque o AE está desabilitado.

APIs testadas:

Aprovado: AE converge.

test_auto_vs_manual

Os testes que capturaram fotos automáticas e manuais têm a mesma aparência.

APIs testadas:

Aprovado: Os ganhos e transformações manuais do equilíbrio de branco relatados em cada resultado de captura correspondem à estimate automática do equilíbrio de branco do algoritmo 3A da câmera.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

teste_preto_branco

Testa se o dispositivo produz imagens totalmente em preto e branco. Faz duas capturas, a primeira com ganho extremamente baixo e exposição curta, que resulta em uma foto preta, e a segunda com ganho extremamente alto e exposição longa, que resulta em uma foto branca.

APIs testadas:

Aprovado: Produz imagens em preto e branco. Canais saturados de imagens brancas possuem valores RGB de [255, 255, 255] com margem de erro inferior a 1% de diferença.

teste_preto_branco_pretoteste_preto_branco_preto
teste_preto_branco_preto.jpg teste_preto_branco_branco.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

Captura 5 sequências de 50 imagens com configuração de captura manual e verifica se são todas 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:

Aprovado: As imagens são idênticas visualmente e em valores RGB.

Falha: mostra um aumento ou queda no gráfico médio 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

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

resultado_de_captura_de_teste

Testa se dados válidos retornam em objetos CaptureResult . Faz uma captura automática, manual e automática.

APIs testadas:

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. Plota a correção de sombreamento da lente para as capturas.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Testa se os fluxos RAW não podem ser recortados.

APIs testadas:

Aprovado: as imagens YUV são cortadas no centro, mas não as imagens RAW.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Testa se as regiões de cultivo funcionam. Captura uma imagem completa e cria patches de 5 regiões diferentes (cantos e centro). Captura imagens com corte definido para as 5 regiões. Compara o patch e os valores da imagem cortada.

APIs testadas:

Passar: A imagem da região recortada corresponde ao patch que corresponde à imagem recortada.

test_dng_noise_model

Verifica se os parâmetros do modelo bruto DNG estão corretos. O gráfico representa a variância medida de uma área central do cartão cinza em fotos brutas capturadas em uma faixa de sensibilidades e compara esses valores com a variância esperada em cada sensibilidade pelo modelo de ruído DNG na câmera HAL (com base no O,S parâmetros 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:

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

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 versus o brilho esperado. Os valores esperados são calculados a partir do brilho da imagem sem compensação EV aplicada e o valor esperado será saturado se os valores calculados excederem a faixa de valores reais da imagem. O teste falhará se os valores esperados e os valores medidos não corresponderem ou se as imagens forem superexpostas em cinco etapas.

APIs testadas:

Aprovado: As imagens mostram exposição crescente sem superexposição em cinco etapas.

test_ev_compensation_advanced_plot_means

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:

Aprovado: Captura o aumento de luminância 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 luminância estáveis.

test_ev_compensation_basic

test_ev_compensation_basic.png

exposição_teste

Testa se uma exposição constante é alcançada conforme 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 entre si. 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 debug em seu arquivo de configuração.

APIs testadas:

Aprovado: As imagens têm o mesmo brilho, mas ficam mais barulhentas 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_exposure_plot_means

test_exposure_plot_means.png

test_exposure_mult = 1,00test_exposure_mult = 64,00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

teste_jpeg

Os testes que converteram imagens YUV e imagens JPEG de dispositivos têm a mesma aparência. O teste pega 10% do centro da imagem, calcula o valor RGB e verifica se eles correspondem.

APIs testadas:

Aprovado: A diferença RGB média entre cada imagem é inferior a 3%.

test_jpeg_fmt=jpg.jpgtest_jpeg=fmt=yuv.jpg
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 da 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 ISO ou exposição e aparecem com médias RGB mais altas em test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

teste_linearidade

Testa que o processamento do dispositivo pode ser invertido para pixels lineares. Captura uma sequência de disparos com o dispositivo apontado para um alvo uniforme.

APIs testadas:

Aprovado: os valores de R, G, B devem aumentar linearmente com o aumento da sensibilidade.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Testa bloqueio 3A e explosão YUV (usando configuração automática). Este teste foi projetado para ser aprovado 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:

Aprovado: As capturas parecem consistentes.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.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 alta faixa dinâmica em um meio que possui uma faixa dinâmica mais limitada.

APIs testadas:

Aprovado: Os valores de R e B aumentam de acordo com a transformação.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*O eixo x são as solicitações de captura: 0 = unidade, 1=reforço vermelho, 2=reforço azul

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (aumento de R)

test_param_color_correction_req=2

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 clara que a anterior.

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

test_param_exposure_time_plot.png

test_param_flash_mode

Testa se o parâmetro android.flash.mode foi aplicado. Define 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 grande gradiente criado para verificar se o flash disparou.

APIs testadas:

Aprovado: O centro da imagem do bloco tem um grande gradiente, o que significa que o flash disparou.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

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 tenha ruído. Captura três imagens, para NR desligado, "rápido" e "alta qualidade". Também captura uma imagem com baixo ganho e NR desativado e usa a variação disso como linha de base. Quanto maior o SNR (Relação Sinal-Ruído), melhor será 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

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

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

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 etapas com exposição fixa para cada foto.

APIs testadas:

Aprovado: RGB significa centro de 10% fica mais brilhante com maior sensibilidade.

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

Testa se o parâmetro android.shading.mode é aplicado.

APIs testadas:

Aprovado: Os modos de sombreamento são alterados e os mapas de sombreamento da lente são modificados conforme o esperado.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

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:

Passar:

  • test1: Ambas as imagens possuem um mapa de tons linear, mas n=1 possui um gradiente mais acentuado. O canal G (verde) é mais brilhante para a imagem n=1.
  • test2: Mesmo mapa de tons, mas comprimento diferente. As imagens são iguais.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
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 de solicitação.

APIs testadas:

Aprovado: as imagens RAW ficam mais escuras à medida que o aumento aumenta, enquanto as imagens YUV permanecem com brilho constante

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

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 explosão.

APIs testadas:

Passe: Cada tiro é mais barulhento que o tiro anterior, à medida que o ganho aumenta.

Usa a variação da célula central da grade de estatísticas.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposição

Captura um conjunto de imagens brutas com tempo de exposição crescente e mede os valores dos pixels.

APIs testadas:

Aprovado: Aumentar o ISO (ganho) torna os pixels mais sensíveis à luz, fazendo com que o gráfico se mova para a esquerda.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ é 1 ms, 10¹ é 10 ms, 10⁻¹ é 0,1 ms)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensibilidade

Captura um conjunto de imagens brutas com sensibilidades crescentes e mede o ruído (variância) no centro de 10% da imagem. Testa se cada disparo é mais barulhento que o anterior.

APIs testadas:

Passe: A variância aumenta a cada tiro.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Testa se android.noiseReduction.mode é aplicado para reprocessar solicitações. Captura imagens reprocessadas com a câmera pouco iluminada. Usa um alto ganho analógico para garantir que a imagem capturada tenha ruído. Captura três imagens reprocessadas, para NR desligado, "rápido" e "alta qualidade". Captura uma imagem reprocessada com baixo ganho e NR desativado e usa a variação disso como linha de base.

APIs testadas:

Aprovado: RÁPIDO >= DESLIGADO, HQ >= RÁPIDO, HQ >> DESLIGADO

Gráfico típico de SNR vs NR_MODE

Gráfico típico de SNR vs NR_MODE

test_tonemap_sequence

Testa uma sequência de fotos 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:

Passagem: Existem 3 quadros idênticos seguidos por um conjunto diferente de 3 quadros idênticos.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

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 YUV e JPEG tenham a mesma aparência quando convertidos pelo módulo image_processing_utils . As imagens não são salvas por padrão, mas podem ser salvas ativando debug_mode .

APIs testadas:

Aprovado: Todos os centros de imagem têm uma diferença máxima RMS (valor quadrático médio de um sinal) em imagens convertidas RGB com 3% da imagem YUV de resolução mais alta.

test_yuv_jpeg_all

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 é concluído e retorna as imagens solicitadas.

test_yuv_plus_dng

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 YUV e JPEG tenham a mesma aparência quando convertidos pelo módulo image_processing_utils .

APIs testadas:

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.jpgtest_yuv_plus_jpeg_yuv.jpg
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/RAW10/RAW12 e YUV, se houver suporte. Usa uma solicitação manual com mapa de tons linear, portanto, espera-se que raw e YUV sejam iguais. Compara os valores RGB centrais de 10% das imagens convertidas em RGB. Registra android.shading.mode .

APIs testadas:

Aprovado: imagens YUV e brutas 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.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

cena2_a

scene2_a tem três rostos com fundo cinza e roupas neutras. Os rostos são escolhidos para terem uma ampla gama de tons de pele. O gráfico deve ter a orientação correta para que a detecção de rosto funcione de maneira ideal.

cena2_a

cena2_a

test_auto_flash

Testa se o flash automático é acionado em uma cena escura. Verifica se o flash automático é disparado verificando se o centro da imagem lado a lado tem um grande gradiente. Para acionar o flash automático, o tablet e as luzes do equipamento de teste devem estar desligados. O tablet é desligado pelo teste e as luzes podem ser desligadas automaticamente com o controlador Arduino. A cena deve estar completamente escura para que o teste funcione corretamente. Como tal, a abertura traseira do tablet deve ser completamente coberta pelo tablet de cena, e a abertura frontal deve ser coberta por uma abertura e pelo telefone DUT para bloquear a entrada de luz difusa no equipamento.

APIs testadas:

Aprovado: O centro da imagem do bloco tem um gradiente grande, o que significa que o flash automático foi disparado.

teste_autoframing

Testa o comportamento de enquadramento automático do dispositivo da câmera. Executa um grande zoom para que nenhum dos rostos na cena fique visível, ativa o modo de enquadramento automático definindo AUTOFRAMING em CaptureRequest como True e verifica se todos os rostos na cena original podem ser detectados quando o estado converge (ou seja, quando AUTOFRAMING_STATE em CaptureResult está definido como AUTOFRAMING_STATE_CONVERGED ).

APIs testadas:

Aprovado: Todos os três rostos são detectados.

test_display_p3

Testes Exibir captura P3 em JPEG usando a API ColorSpaceProfiles . Testa se o JPEG capturado possui um perfil ICC apropriado em seu cabeçalho e se a imagem contém cores fora da gama sRGB.

APIs testadas:

Aprovado: O JPEG contém um perfil Display P3 ICC e cores fora da gama sRGB.

efeitos_teste

Captura quadros para efeitos de câmera suportados e verifica se eles foram gerados corretamente. O teste verifica apenas os efeitos OFF e MONO , mas salva imagens para todos os efeitos suportados.

APIs testadas:

Aprovado: Captura a imagem da cena com efeitos OFF e uma imagem monocromática com efeitos definidos como MONO .

test_efeitos_MONO

test_efeitos_MONO.jpg

test_format_combos

Testa diferentes combinações de formatos de saída.

APIs testadas:

Passar: Todas as combinações são capturadas com sucesso.

test_jpeg_quality

Testa a qualidade de compactação JPEG da câmera. Avance 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.)

test_jpeg_quality

Médias da matriz DQT de luma / croma da câmera traseira do Pixel 4 versus qualidade JPEG

test_jpeg_quality falhou

Exemplo de teste com falha

Observe que para imagens de qualidade muito baixa (qualidade jpeg < 50), não há aumento na compressão na matriz de quantização.

test_num_faces

Testa a detecção de rosto.

APIs testadas:

Passar: Encontra três faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_preview_min_frame_rate

Testa se a taxa de quadros de visualização diminui corretamente em uma cena escura. Para que este teste funcione corretamente, as luzes do equipamento de teste devem ser desligadas pelo controlador ou manualmente pelo operador de teste.

APIs testadas:

Aprovado: a taxa de quadros de visualização está no mínimo da faixa de taxa de quadros solicitada e a variação entre os quadros é menor que a tolerância absoluta definida no teste.

test_reprocess_uv_swap

Testa que o reprocessamento YUV não troca os planos U e V. Isto é detectado calculando a soma das diferenças absolutas (SAD) entre a imagem reprocessada e uma captura não reprocessada. Se a troca dos planos U e V de saída da captura reprocessada resultar em um SAD aumentado, presume-se que a saída tenha os planos U e V corretos.

APIs testadas:

Aprovado: Os planos U e V não são trocados.

test_reprocess_uv_swap

test_reprocess_uv_swap.png

cena2_b

test_num_faces

Testa a detecção de rosto com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Passar: Encontra 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Captura duas imagens usando os maiores formatos comuns YUV e JPEG com a mesma proporção do maior formato JPEG, não excedendo a resolução de 1920x1440. Define jpeg.quality como 100 e captura uma solicitação de superfície dupla. Converte ambas as imagens em matrizes RGB e calcula a diferença RMS (raiz quadrada média) 3D entre as duas imagens.

APIs testadas:

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

cena2_c

test_num_faces

Testa a detecção de rosto com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Passar: Encontra 3 faces.

test_num_faces_fd_mode_1

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 câmera2 <1000ms para resolução de 1080p, conforme medido pelo Teste de desempenho 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 lançamento 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 latência de inicialização da câmera2 (câmera aberta para o primeiro quadro de visualização) <600ms conforme medido pelo Teste de desempenho da câmera CTS sob condições de iluminação ITS (3000K) 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:

Passar: Encontra 3 faces.

cena2_e

imagem_test_contínua

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:

Aprovado: o sistema 3A se estabiliza ao 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:

Passar: Encontra 3 faces.

cena2_f

scene2_f tem três rostos com fundo branco e roupas brancas. Os rostos apresentam ampla gama de tons de pele e alto contraste com o fundo.

cena2_f.png

cena2_f

test_num_faces

Testa a detecção de rosto com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Passar: Encontra 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

cena3

Scene3 uses the ISO12233 chart, and most tests use a chart extractor method to find the chart in the scene. For this reason, most of the saved images don't have borders like the images for scenes 1, 2 or 4, but only the chart. The chart must be in the correct orientation for the chart finder to work optimally.

test_3a_consistency

Tests for 3A consistency.

APIs tested:

Pass: 3A converges for exposure, gain, awb (auto white balance), and fd (focus distance) three times within tolerance.

test_edge_enhancement

Tests that the android.edge.mode parameter is applied correctly. Captures non-reprocess images for each edge mode and returns sharpness of the output image and the capture result metadata. Processes a capture request with a given edge mode, sensitivity, exposure time, focus distance, and output surface parameter.

Pass: HQ mode (2) sharper than OFF mode (0). FAST mode (1) sharper than OFF mode. HQ mode sharper or equal to FAST mode.

APIs tested:

Impacted camera parameters:

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (fast mode)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (high quality mode)

test_flip_mirror

Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .

Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.

Pass: Image isn't flipped, mirrored or rotated.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_landscape_to_portrait

Tests if the landscape to portrait override functions correctly for landscape-oriented sensors.

APIs tested:

Pass: The test is able to locate a chart with the expected rotation (0 degrees when the landscape to portrait override is disabled, 90 degrees when enabled).

test_landscape_to_portrait

test_landscape_to_portrait.png

test_lens_movement_reporting

Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilizes as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first few frames with the lens stationary at optimum focal distance, and the final few 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:

Pass: Lens movement flag is True in the frame with sharpness change.

Fail mechanisms:

  • lens_moving: True ( android.hardware.camera2.CaptureResult#LENS_STATE = 1) in test_log.DEBUG is asserted only in frames where sharpness isn't changing.
  • Frames with lens_moving: False ( android.hardware.camera2.CaptureResult#LENS_STATE = 0) in test_log.DEBUG has a sharpness difference compared to the first few frames at optimum focal distance or the last few frames at minimum focus distance.

test_reprocess_edge_enhancement

Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.

APIs tested:

Pass: Sharpness for the different edge modes is correct. HQ (mode 2) is sharper than OFF (mode 0), and improvement between different modes is similar.

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 consists of a black circle on a white background inside a square.

scene4

scene4

test_aspect_ratio_and_crop

Tests if images are distorted or cropped unexpectedly in the image pipeline. Takes pictures of a circle over all formats. Verifies the circle isn't distorted, the circle doesn't move from the center of image, and the circle doesn't change size incorrectly with different aspect ratios or resolutions.

APIs tested:

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.

Fail mechanisms:

  • The circle in the captured image is distorted by the processing pipeline.
  • Lower resolution image is double cropped in the image pipeline creating different FoV between high and low resolution images.
  • The circle in the captured image is cropped due to an extreme aspect ratio capture request reducing the height or width of the image.
  • The circle in the captured image has a reflection in the center and doesn't appear fully filled.

test_multi_camera_alignment

Tests the camera calibration parameters related to camera positioning for multi-camera systems. 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:

Pass: Circle centers and sizes are as expected in projected images compared to captured images using camera calibration data and focal lengths.

Fail mechanisms:

  • LENS_INTRINSIC_CALIBRATION , LENS_POSE_TRANSLATION , or LENS_POSE_ROTATION are design values and not actual calibration data.
  • The camera system isn't appropriate for the test setup. For example, testing a wide and an ultra-wide camera system with the RFoV test rig. For more information, see Camera ITS-in-a-box FAQ1 .

test_preview_aspect_ratio_and_crop

Similar to the test_aspect_ratio_and_crop test for still captures, this test checks the supported preview formats to ensure the preview frames aren't stretched or cropped inappropriately. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center of the frame, and the circle size doesn't change for a constant format or with different resolutions (field of view check).

APIs tested:

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_preview_stabilization_fov

Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON , and another with preview stabilization OFF . A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.

APIs tested:

Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%.

test_video_aspect_ratio_and_crop

Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies 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:

Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

scene5

Scene5 requires a uniformly lit gray scene. This is accomplished by a diffuser placed over the camera lens. We recommend the following diffuser: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168 .

To prepare the scene, attach a diffuser in front of the camera and point the camera to a lighting source of around 2000 lux. Images captured for scene5 require diffuse lighting with no features evident. The following is a sample image:

scene5

scene5 capture

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:

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

scene6

test_in_sensor_zoom

Tests the behavior of the camera in-sensor zoom feature, which produces cropped RAW images.

With the stream use case set to CROPPED_RAW , the test takes two captures over the zoom range, a full field of view (FoV) RAW image and a cropped RAW image. The test converts the images to RGB arrays, downscales the full-sized cropped RAW image to the size reported by SCALER_RAW_CROP_REGION , and calculates the 3D root mean square (RMS) difference between the two images.

APIs tested:

Pass: The 3D root mean square (RMS) difference between the downscaled cropped RAW image and the full FoV RAW image is less than 1%.

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:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

test_zoom to find the contour of the circle closest to the center.

test_low_latency_zoom

Tests the camera low latency zoom behavior. Takes captures over the zoom range with android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) , and checks if the circles in the output images match the zoom ratios in the capture metadata.

APIs tested:

Pass: Relative size of captured circle is accurate against the zoom ratio result metadata.

test_preview_video_zoom_match

Tests that while recording and zooming, video preview and video output display and record the same output. Calculates the size of the circle closest to the center at different zoom ratios and checks whether the size of the circle increases as the zoom ratio increases.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio in video and preview.

VGA_640x480_key_frame.png

VGA_640x480_key_frame.png (before zoom)

preview_640x480_key_frame.png

preview_640x480_key_frame.png (before zoom)

VGA_640x480_key_frame_zoomed.png

VGA_640x480_key_frame.png (after zoom)

preview_640x480_key_frame_zoomed.png

preview_640x480_key_frame.png (after zoom)

scene_extensions

The scene_extensions tests are for camera extensions and must use Camera ITS-in-a-Box , as they require precise control of the testing environment.

scene_hdr

The scene_hdr scene consists of a portrait on the left and a low-contrast QR code on the right.

scene_hdr

scene_hdr

test_hdr_extension

Tests the HDR extension . Takes captures with and without the extension enabled, and checks if the extension makes the QR code more detectable.

APIs tested:

Pass: The HDR extension reduces the number of contrast changes needed to detect the QR code or reduces the gradient across the QR code.

scene_night

The scene_night scene consists of a white circle with four smaller circles inside of it, all against a black background. The smaller circle in the top right corner is darker than the others to indicate orientation.

scene_night

scene_night

test_night_extension

Tests the Night extension . Takes captures with and without the extension enabled, and checks for the following:

  • The capture with the Night extension enabled takes longer.
  • The capture with the Night extension enabled is brighter or has scene artifacts with an improved appearance.

APIs tested:

Pass: Compared to a capture without the Night extension enabled, a capture with the Night extension enabled takes at least 0.5 seconds longer. The capture must be at least 10% brighter, or the gray dots in the scene must be 20 pixel values lower than the surrounding circle's center.

sensor_fusion

Sensor fusion tests require specific phone movement in front of a checkerboard pattern. For optimum results, ensure the test chart is mounted flat. Charts that aren't flat affect the rotation calculations for many of the tests. The sensor_fusion tests can be automated with the Sensor Fusion Box .

checkerboard

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:

Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.

test_preview_stabilization

Tests that stabilized preview video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

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 timestamp source 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.png

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

    test_sensor_fusion_plot_rotations

APIs tested:

Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .

Fail mechanisms:

  • Offset error: The camera-gyroscope offset isn't correctly calibrated to within +/-1 ms.
  • Frame drops: The pipeline isn't fast enough to capture 200 frames consecutively.
  • Socket errors: adb can't reliably connect to the DUT long enough to execute the test.
  • The chart isn't mounted flat. The plot test_sensor_fusion_plot_rotations has frames where the gyroscope and camera rotation vary considerably as the camera rotates through the parts of the chart that aren't flat.
  • The camera isn't mounted flat. The plot test_sensor_fusion_gyro_events shows movement in the X and Y planes. This failure is more common in front-facing cameras as the rear camera often has a raised bump to the rest of the phone body, creating a tilt when mounting the rear of the phone to the mounting plate.

test_video_stabilization

Tests that stabilized video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

test_led_snapshot

Tests that the LED snapshots don't saturate or tint the image.

This test adds a lighting controller to the sensor fusion box to control the lights. With the lights set to OFF , the test takes a capture with the AUTO_FLASH mode set to ON . During this capture, the test runs a precapture sequence with the aePrecapture trigger set to START , and sets the capture intent to Preview to take the capture with flash.

Because the capture has a distinctive hotspot due to flash, the test computes the flash image mean of the entire capture and verifies whether the value is within the (68, 102) range. To check if the image is reasonably white-balanced, the test calculates the R/G and B/G ratios and verifies whether the ratios are within 0.95 and 1.05.

APIs tested:

Pass: The R/G and B/G ratios are within 0.95 and 1.05. The flash image mean is within the (68, 102) range.