Esta página oferece uma lista completa dos testes do Camera Image Test Suite (ITS), que faz parte do Verificador do Android Compatibility Test Suite (CTS). Os testes do ITS são funcionais, ou seja, não medem a qualidade da imagem, mas garantem que todas as funções de câmera anunciadas estão funcionando conforme o esperado. Este documento ajuda desenvolvedores e testadores a entender o que os testes individuais fazem e como depurar falhas de teste.
O ITS da câmera limita os testes por propriedades de câmera, nível da API e nível da classe de desempenho de mídia (MPC, na sigla em inglês) necessários. Para o nível da API, o ITS usa
ro.product.first_api_level
para restringir testes adicionados em um nível específico da API que
testam experiências negativas do usuário para funcionalidades em níveis mais baixos da API. O ITS
usa ro.vendor.api_level
para restringir testes de recursos adicionados em um nível
específico da API que exigem um novo recurso de hardware. Se ro.odm.build.media_performance_class
estiver definido para um dispositivo, o ITS vai exigir que testes específicos sejam executados dependendo do nível de MPC.
Os testes são agrupados por cena da seguinte forma:
scene0
:captura metadados, instabilidade, giroscópio, vibraçãoscene1
:exposição, sensibilidade, compensação do valor de exposição (EV), YUV x JPEG e RAWscene2
:detecção facial, testes que exigem cenas coloridasscene3
:reforço de ponta, movimento da lentescene4
:proporção, corte, campo de visãoscene5
: sombreamento da lentescene6
:Zoomscene7
:interruptor de várias câmerasscene8
:medição de região de exposição automática (AE) e balanço de branco automático (AWB)scene9
:compactação JPEGscene_extensions
:extensões de câmerascene_tele
:troca de lente telefotoscene_flash
:autoflash, taxa de frames mínimascene_video
:queda de framessensor_fusion
:ajuste de horário da câmera e do giroscópiofeature_combination
:combinações de recursosscene_ip
:paridade de imagem entre o app de câmera padrão e o app de câmera do Jetpack (JCA)
Consulte as seções individuais para ver uma descrição de cada cena.
scene0
Os testes não exigem informações específicas sobre a cena. No entanto, o smartphone precisa estar parado para os testes de giroscópio e vibração.
test_jitter
Mede a instabilidade nos carimbos de data/hora da câmera.
APIs testadas:
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Aprovado:há um delta de pelo menos 30 ms entre os frames.
Na figura a seguir, observe o pequeno intervalo do eixo y. Na verdade, o jitter é pequeno neste gráfico.
Figura 1: gráfico test_jitter.
test_metadata
Testa a validade das entradas de metadados, analisando os resultados da captura e os objetos de características da câmera. Esse 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
Aprovado:nível de hardware, tags rollingShutterSkew
, frameDuration
, timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, campo de visão (FoV) e distância hiperfocal estão presentes e têm valores válidos.
test_request_capture_match
Testa se o dispositivo grava os valores corretos de exposição e ganho lendo de volta 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 metadados de solicitação e captura correspondem em todos os planos.
test_sensor_events
Para dispositivos que anunciam suporte à fusão de sensores, esse teste verifica se o dispositivo consulta e imprime eventos de sensor. Os sensores esperados são acelerômetro, giroscópio e magnetômetro. Esse teste só funciona se a tela estiver ligada, ou seja, se o dispositivo não estiver no modo de espera.
APIs testadas:
Aprovado:os eventos de cada sensor são recebidos.
test_solid_color_test_pattern
Testa se os padrões de teste de cor sólida são gerados corretamente para o silenciamento da câmera. Se o silenciamento da câmera for compatível, os padrões de teste de cor sólida também precisarão ser. Se o silenciamento da câmera não for compatível, os padrões de teste de cor sólida só serão testados se o recurso for anunciado.
Se as imagens brutas forem compatíveis, 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 aceitam 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 compatíveis têm a cor correta e há baixa variância na imagem.
test_test_pattern
Testa o parâmetro android.sensor.testPatternMode
para
capturar frames de cada padrão de teste válido e verifica se os frames são
gerados corretamente para cores sólidas e barras de cores. Esse teste inclui as
seguintes etapas:
- Captura imagens para todos os padrões de teste compatíveis.
- Realiza uma verificação de correção para um padrão de teste de cor sólida e 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 compatíveis são gerados corretamente.
Figura 2: exemplo de test_test_patterns.
test_tonemap_curve
Testa a conversão do padrão de teste de raw para YUV com tonemap linear. Esse teste requer android.sensor.testPatternMode = 2
(COLOR_BARS
) para gerar um padrão de imagem perfeito para conversão de mapa de tons. Verifica se o pipeline tem saídas de cores adequadas com tonemap 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
Aprovado:as imagens YUV e RAW são parecidas.
Figura 3.Exemplo bruto de test_tonemap_curve.
Figura 4: exemplo de YUV test_tonemap_curve.
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 carimbos de data/hora das duas imagens.
test_vibration_restriction
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.
scene1_1
scene1
é um gráfico cinza. O gráfico cinza precisa cobrir os 30% centrais do campo de visão da câmera. O gráfico cinza deve desafiar 3A (AE, AWB e AF) moderadamente, já que a região central não tem recursos.
No entanto, a solicitação de captura especifica toda a cena, que inclui
recursos suficientes para a convergência do 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 2/3 para especificar alguns limites para o gráfico cinza no FoV e ajudar na convergência do 3A. Para descrições mais detalhadas dos equipamentos de teste da câmera, consulte Camera ITS-in-a-box.
Figura 5. Gráfico de cena 1 em tamanho real (esquerda), gráfico dimensionado em 2/3 (direita).
test_ae_precapture_trigger
Testa a máquina de estado AE ao usar o gatilho de pré-captura. Captura cinco solicitações manuais com a AE desativada. A última solicitação tem um acionador de pré-captura de AE, que deve ser ignorado porque o AE está desativado.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Aprovação:a AE converge.
test_auto_vs_manual
Os testes que capturaram fotos automáticas e manuais parecem iguais.
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 do balanço de branco manual informados em cada resultado de captura correspondem ao balanço de branco automático estimate
do algoritmo 3A da câmera.
Figura 6.Exemplo automático de test_auto_vs_manual.
Figura 7: exemplo de teste de equilíbrio de branco automático x manual.
Figura 8: exemplo de transformação de balanço de branco manual test_auto_vs_manual.
test_black_white
Testa se o dispositivo produz imagens 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
Aprovado:produz imagens em preto e branco. Canais saturados de imagens brancas têm valores RGB de [255, 255, 255] com uma margem de erro de menos de 1% de diferença.
Figura 9: test_black_white, exemplo em preto.
Figura 10.test_black_white, exemplo branco.
Figura 11: test_black_white, exemplo de plotagem de médias.
test_burst_capture
Verifica se todo o pipeline de captura consegue acompanhar a velocidade da captura em tamanho real e o tempo da CPU.
APIs testadas:
Aprovado:captura uma sequência de imagens em tamanho real e verifica quedas de frame e brilho da imagem.
test_burst_sameness_manual
Faz cinco capturas de 50 imagens com configuração manual e verifica se elas são idênticas. Use esse teste para identificar se há frames esporádicos que são processados de maneira diferente ou têm artefatos.
APIs testadas:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Aprovado:as imagens são idênticas visualmente e em valores RGB.
Falha:mostra um pico ou uma queda no gráfico da média de RGB no início de cada burst
- A tolerância é de 3% para
first_API_level
< 30 - A tolerância é de 2% para
first_API_level
>= 30
Figura 12.Exemplo de média de test_burst_sameness_manual.
Figura 13: test_burst_sameness_manual_plot_means
test_crop_region_raw
Testa se os streams 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 as RAW não.
Figura 14: exemplo de corte bruto de test_crop_region_raw comp.
Figura 15: exemplo completo bruto de test_crop_region_raw comp.
Figura 16.Exemplo de corte YUV do componente test_crop_region_raw.
Figura 17: exemplo completo de YUV test_crop_region_raw.
test_crop_regions
Testa se as regiões de corte funcionam. Usa uma imagem completa e cria patches de cinco regiões diferentes (cantos e centro). Tira fotos com corte definido para as cinco regiões. Compara os valores do patch e da imagem cortada.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Aprovado:a imagem da região cortada corresponde ao patch que corresponde à imagem de corte.
test_ev_compensation
Testa se a compensação do valor de exposição (EV) foi aplicada. O teste consiste em uma seção básica e uma avançada.
A seção básica testa se a compensação de EV é aplicada usando um intervalo criado com CONTROL_AE_COMPENSATION_STEP
. Oito frames são capturados em cada valor de compensação.
A seção avançada aumenta a exposição em oito etapas e verifica o brilho medido em comparação com o brilho esperado. Os valores esperados são calculados com base no brilho da imagem sem compensação de EV aplicada. O valor esperado satura se os valores calculados excederem o intervalo de valores da imagem real. O teste falha se os valores esperados e medidos não corresponderem ou se as imagens ficarem superpostas em cinco etapas.
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_STATE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Passagem básica da seção:as imagens mostram exposição crescente sem superexposição em cinco etapas.
Figura 18: test_ev_compensation_basic.
Passagem de seção avançada:captura um aumento no luma à medida que a configuração de compensação de EV aumenta. Os oito frames capturados para cada configuração de compensação de EV têm valores de luminância estáveis.
Figura 19: test_ev_compensation_advanced_plot_means.
test_exposure_x_iso
Testa se uma exposição constante é alcançada à medida que o ISO e o tempo de exposição variam. Tira uma série de fotos com ISO e tempo de exposição escolhidos para se equilibrar.
Os resultados devem ter o mesmo brilho, mas ao longo da sequência a imagem vai ficar mais ruidosa. Verifica se os valores médios dos pixels de amostra estão próximos uns dos outros. Verifica se as imagens não estão fixadas em 0 ou 1, o que as faria parecer linhas planas. O teste também pode ser executado com imagens RAW definindo a flag debug
no 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 de ISO*exposição é constante no espaço de ganho testado.
Mecanismo de falha:na figura a seguir, à medida que os valores do multiplicador de ganho (eixo x) aumentam, os valores médios normalizados do plano RGB (eixo y) começam a divergir dos valores baixos do multiplicador de ganho.
Figura 20.test_exposure_plot_means.
Figura 21.test_exposure_mult=1.00.
Figura 22.test_exposure_mult=64.00.
test_latching
Testa se as configurações (exposição e ganho) são fixadas no frame 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 têm as propriedades esperadas.
APIs testadas:
Aprovado:as imagens [2, 3, 6, 8, 10, 12, 13] têm ISO ou exposição aumentados e aparecem com médias de RGB mais altas no gráfico da figura a seguir.
Figura 23: o gráfico test_latching significa exemplo.
Figura 24.test_latching i=00.
Figura 25: test_latching i=01.
Figura 26.test_latching i=02.
Figura 27: test_latching i=03.
Figura 28.test_latching i=04.
Figura 29: test_latching i=05.
Figura 30: test_latching i=06.
Figura 31. test_latching i=07.
Figura 32: test_latching i=08.
Figura 33: test_latching i=09.
Figura 34: test_latching i=10.
Figura 35.test_latching i=11.
Figura 36: test_latching i=12.
test_linearity
Testa se o processamento do dispositivo pode ser invertido para pixels lineares. Captura uma sequência de fotos 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 R, G e B precisam aumentar linearmente com o aumento da sensibilidade.
Figura 37.O gráfico "test_linearity" significa exemplo.
test_locked_burst
Testa o bloqueio 3A e o burst YUV (usando a configuração automática). Esse teste foi projetado para ser aprovado
mesmo em dispositivos limitados que não têm MANUAL_SENSOR
ou PER_FRAME_CONTROLS
.
O teste verifica a consistência da imagem YUV enquanto a verificação da taxa de frames está no CTS.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Aprovado:as capturas parecem consistentes.
Figura 38: exemplo de test_locked_burst frame0.
Figura 39: exemplo de frame1 test_locked_burst.
Figura 40: exemplo de test_locked_burst frame2.
scene1_2
scene 1_2
é uma cópia funcionalmente idêntica de scene 1_1
, implementando uma estrutura de subcena para reduzir a duração estendida de scene 1
.
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 deixar a saída cada vez mais vermelha ou azul. Usa uma tonificação linear.
O mapeamento de tons é uma técnica usada no processamento de imagens para mapear um conjunto de cores em outro e aproximar a aparência de imagens de alto intervalo dinâmico em um meio com um intervalo 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.
Figura 41.O gráfico "test_param_color_correction" mostra um exemplo de média.
Nas figuras a seguir, o eixo x é o número de solicitações de captura: 0 = unidade, 1 = aumento de vermelho e 2 = aumento de azul.
Figura 42: exemplo de unidade test_param_color_correction req=0.
Figura 43: exemplo de correção de cor test_param_color_correctness req=1 com aumento de vermelho.
Figura 44: exemplo de aumento de azul test_param_color_correction req=2.
test_param_flash_mode
Testa se o parâmetro android.flash.mode
foi aplicado. Define manualmente a exposição para o lado escuro, de modo que fique óbvio se o flash disparou ou não, e usa uma tonificação linear. Verifica o centro com a imagem do bloco para ver
se há um gradiente grande criado para verificar se o flash foi disparado.
APIs testadas:
Aprovado:o centro da imagem do bloco tem um gradiente grande, o que significa que o flash foi disparado.
Figura 45: exemplo de test_param_flash_mode 1.
Figura 46: exemplo de um bloco de test_param_flash_mode.
Figura 47: exemplo de test_param_flash_mode 2.
Figura 48.Exemplo de dois blocos test_param_flash_mode.
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 ganho analógico alto para ajudar a garantir que a imagem capturada seja ruidosa. Captura três imagens para NR desativado, rápido e de alta qualidade. Também captura uma imagem com ganho baixo e NR desativado e usa a variância dela como a linha de base. Quanto maior a relação sinal-ruído (SNR), melhor a qualidade da imagem.
APIs testadas:
Aprovado:a SNR varia com diferentes modos de redução de ruído e se comporta de maneira semelhante ao gráfico a seguir:
Figura 49: gráfico test_param_noise_reduction com exemplo de SNRs.
0: OFF, 1: FAST, 2: HQ, 3: MIN , 4: ZSL
Figura 50: exemplo de test_param_noise_reduction com ganho alto nr=0.
Figura 51.Exemplo de test_param_noise_reduction com ganho alto nr=1.
Figura 52.Exemplo de test_param_noise_reduction com alto ganho nr=2.
Figura 53.Exemplo de test_param_noise_reduction com alto ganho nr=3.
Figura 54: exemplo de ganho baixo de test_param_noise_reduction.
test_param_shading_mode
Testa se o parâmetro android.shading.mode
foi 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 trocados e os mapas de sombreamento da lente são modificados conforme o esperado.
Figura 55: mapa de sombreamento da lente test_param_shading_mode, exemplo de modo 0, loop 0.
Figura 56: mapa de correção de sombreamento da lente test_param_shading_mode, exemplo de loop 0 do modo 1.
Figura 57: mapa de correção de sombreamento da lente test_param_shading_mode, exemplo de modo 2, loop 0.
test_param_tonemap_mode
Testa se o parâmetro android.tonemap.mode
foi aplicado. Aplica diferentes curvas de tonificação a cada canal R, G e B e verifica se as imagens de saída são modificadas conforme o esperado. Esse teste consiste em dois testes, test1
e test2
.
APIs testadas:
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass:
test1
: ambas as imagens têm uma tonificação linear, masn=1
tem um gradiente mais acentuado. O canal G (verde) é mais brilhante para a imagemn=1
.test2
: mesma tonificação, mas com duração diferente. As imagens são iguais.
Figura 58: test_param_tonemap_mode com n=0.
Figura 59.test_param_tonemap_mode com n=1.
test_post_raw_sensitivity_boost
Verifica o aumento da sensibilidade bruta da postagem. Captura um conjunto de imagens brutas e YUV com sensibilidade diferente, envia uma combinação de aumento de sensibilidade bruta e verifica se a média de pixels 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 brutas ficam mais escuras à medida que o aumento aumenta, enquanto o brilho das imagens YUV permanece constante.
Figura 60: exemplo de test_post_raw_sensitivity_boost raw s=3583 boost=0100.
Figura 61: exemplo de test_post_raw_sensitivity_boost raw s=1792 boost=0200.
Figura 62: exemplo de test_post_raw_sensitivity_boost raw s=0896 boost=0400.
Figura 63.Exemplo de test_post_raw_sensitivity_boost raw s=0448 boost=0800.
Figura 64: exemplo de test_post_raw_sensitivity_boost raw s=0224 boost=1600.
Figura 65: exemplo de test_post_raw_sensitivity_boost raw s=0112 boost=3199.
Figura 66.Exemplo de gráfico bruto de sensibilidade de test_post_raw_sensitivity_boost.
Figura 67: exemplo de test_post_raw_sensitivity_boost YUV s=0112 boost=3199.
Figura 68: exemplo de test_post_raw_sensitivity_boost YUV s=0448 boost=0800.
Figura 69: exemplo de test_post_raw_sensitivity_boost YUV s=0896 boost=0400.
Figura 70: test_post_raw_sensitivity_boost YUV s=1792 boost=0200 example.
Figura 71.Exemplo de test_post_raw_sensitivity_boost YUV s=3585 boost=0100.
Figura 72: test_post_raw_sensitivity_boost_yuv_plot_means
test_raw_exposure
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
Aprovado:aumentar o ISO (ganho) torna os pixels mais sensíveis à luz, então o gráfico se move para a esquerda.
Figura 73: exemplo de ISO=55 test_raw_exposure.
10⁰ é 1 ms, 10¹ é 10 ms e 10⁻¹ é 0, 1 ms.
Figura 74: exemplo de ISO=132 test_raw_exposure.
Figura 75: exemplo de ISO=209 test_raw_exposure.
Figura 76.Exemplo de ISOs=286 test_raw_exposure.
Figura 77.Exemplo de ISO=363 test_raw_exposure.
Figura 78.Exemplo de ISO=440 test_raw_exposure.
test_reprocess_noise_reduction
Testes em que android.noiseReduction.mode
é aplicado para solicitações de reprocessamento.
Captura imagens reprocessadas com a câmera pouco iluminada. Usa um ganho analógico alto
para verificar se a imagem capturada está com ruído. Captura três imagens reprocessadas para NR desativado, rápido e de alta qualidade. Captura uma imagem reprocessada com ganho baixo e NR desativado e usa a variância dela como valor de referência.
APIs testadas:
Aprovado:FAST >= OFF, HQ >= FAST e HQ >> OFF.
Figura 79. Exemplo típico de gráfico de SNR x modo de NR.
test_tonemap_sequence
Testa uma sequência de capturas com diferentes curvas de mapeamento de tons. Captura três fotos manuais com um tonemap linear. Captura três fotos manuais com o tonemap padrão. Calcula o delta entre cada par de frames consecutivos.
APIs testadas:
Aprovado:há três frames idênticos seguidos por um conjunto diferente de três frames idênticos.
Figura 80: exemplo de test_tonemap_sequence i=0.
Figura 81.Exemplo de test_tonemap_sequence i=1.
Figura 82: exemplo de test_tonemap_sequence i=2.
Figura 83: exemplo de test_tonemap_sequence i=3.
Figura 84: exemplo de test_tonemap_sequence i=4.
Figura 85.Exemplo de test_tonemap_sequence i=5.
test_yuv_jpeg_all
Testa se todos os tamanhos e formatos informados para captura de imagem funcionam. Usa uma solicitação manual com uma tonificação linear para que o YUV e o 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 ao ativar o recurso 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 raiz do erro quadrático médio (RMS) (valor de um sinal) em imagens convertidas em RGB com 3% da imagem YUV de maior resolução.
Figura 86: exemplo de test_yuv_jpeg_all.
test_yuv_plus_dng
Testa se os tamanhos e formatos informados para captura de imagem funcionam.
APIs testadas:
Aprovado:o teste é concluído e retorna as imagens solicitadas.
Figura 87: exemplo de test_yuv_plus_dng.
scene1_3
scene 1_3
é uma cópia funcionalmente idêntica de scene 1_1
, implementando uma estrutura de subcena para reduzir a duração estendida de scene 1
.
test_capture_result
Testa se dados válidos são retornados em objetos CaptureResult
. O teste consiste em uma captura automática, uma manual e uma segunda 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. Mostra a correção de sombreamento da lente para as capturas.
Figura 88. test_capture_result_plot_lsc_auto_ch0.
test_dng_noise_model
Verifica se os parâmetros do modelo bruto DNG estão corretos. O gráfico mostra a variância medida de um patch central do cartão cinza em fotos brutas capturadas em uma variedade de sensibilidades e compara esses valores com a variância esperada em cada sensibilidade pelo modelo de ruído DNG no HAL da câmera (com base nos parâmetros O e S retornados nos objetos de resultado da captura). Para mais detalhes sobre o modelo de ruído DNG, faça o download do 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 DNG bruto estão corretos. Os valores RGB esperados correspondem aos valores RGB reais medidos.
Figura 89: test_dng_noise_model_plog.
test_jpeg
Os testes que converteram imagens YUV e JPEG do dispositivo têm a mesma aparência. O teste usa os 10% centrais da imagem, calcula o valor RGB e verifica se eles correspondem.
APIs testadas:
Aprovado:a diferença média de RGB entre cada imagem é menor que 3%.
Figura 90: test_jpeg_fmt=jpg.jpg.
Figura 91: test_jpeg=fmt=yuv.jpg.
test_raw_burst_sensitivity
Captura um conjunto de imagens brutas com ganhos crescentes e mede o ruído. Captura apenas arquivos brutos em uma sequência.
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
Aprovado:cada tomada é mais ruidosa que a anterior, já que o ganho está aumentando.
Usa a variância da célula da grade de estatísticas do centro.
Figura 92: test_raw_burst_sensitivity_variance.
test_raw_sensitivity
Captura um conjunto de imagens brutas com sensibilidades crescentes e mede o ruído (variância) nos 10% centrais da imagem. Testa se cada tomada é mais ruidosa que a 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
Passagem:a variância aumenta a cada disparo.
Figura 93: test_raw_sensitivity_variance.
test_yuv_plus_jpeg
Testes que capturam um único frame como saídas YUV e JPEG. Usa uma solicitação manual com uma tonificação linear para que o YUV e o JPEG tenham a mesma aparência quando convertidos pelo módulo image_processing_utils
.
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 de RMS (valor de um sinal).
Figura 94: test_yuv_plus_jpeg com formato JPEG.
Figura 95: test_yuv_plus_jpeg com formato YUV.
test_yuv_plus_raw
Testes que capturam um único frame como saídas brutas (bruto de 10 e 12 bits) e YUV, se compatíveis. Usa uma solicitação manual com tonemap linear para que os formatos bruto e
YUV sejam iguais. Compara os 10% dos valores RGB centrais das imagens convertidas em RGB. Registrosandroid.shading.mode
.
APIs testadas:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
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
android.hardware.graphics.ImageFormat#RAW12
Aprovado:as imagens YUV e brutas são semelhantes e têm menos de 3,5% de diferença de RMS (valor quadrático médio de um sinal).
Figura 96.test_yuv_plus_raw_shading=1_raw.jpg.
Figura 97: test_yuv_plus_raw_shading=1_yuv.jpg.
test_sensitivity_priority
Testa CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY
em várias configurações de ISO para confirmar uma correlação entre ISO mais alto e níveis de ruído aumentados.
APIs testadas:
android.hardware.camera2.CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_MODE
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_PRIORITY_MODES
Aprovado:ISOs mais altos resultam em níveis de ruído maiores.
Critérios para pular o teste
O teste test_sensitivity_priority.py
será ignorado se algum dos seguintes critérios for atendido:
- O dispositivo tem um primeiro nível da API (
first_api_level
) de 35 ou menos. - O dispositivo não anuncia
CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY
emCONTROL_AE_AVAILABLE_PRIORITY_MODES
.
test_exposure_time_priority
Testa CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY
em vários tempos de exposição, verificando o brilho estável no intervalo
em que o ISO pode compensar.
APIs testadas:
android.hardware.camera2.CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_MODE
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_PRIORITY_MODES
Aprovado:o brilho é estável (dentro da tolerância) em todos os tempos de exposição se o ISO estiver dentro do intervalo de compensação.
Critérios para pular o teste
O teste test_exposure_time_priority
será ignorado se algum dos seguintes critérios for atendido:
- O dispositivo tem um primeiro nível da API (
first_api_level
) de 35 ou menos. - O dispositivo não anuncia
CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY
emCONTROL_AE_AVAILABLE_PRIORITY_MODES
.
scene2_a
scene2_a
tem três rostos com um fundo cinza e roupas neutras. Os rostos são escolhidos para ter uma ampla variedade de tons de pele. O gráfico precisa estar na orientação correta para que a detecção facial funcione da melhor forma.
Figura 98: exemplo de scene2_a.
test_autoframing
Testa o comportamento de enquadramento automático do dispositivo de câmera. Executa um zoom grande 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
é definido como AUTOFRAMING_STATE_CONVERGED
).
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
Aprovado:todos os três rostos são detectados.
test_display_p3
Testa a captura
Display P3
em JPEG usando a API ColorSpaceProfiles
. Testa se o JPEG capturado tem um perfil ICC adequado no cabeçalho e se a imagem contém cores fora da gama sRGB.
APIs testadas:
android.hardware.camera2.params.ColorSpaceProfiles
android.hardware.camera2.params.SessionConfiguration#setColorSpace
Aprovado:o JPEG contém um perfil ICC Display P3 e cores fora da gama sRGB.
test_effects
Captura frames para efeitos de câmera compatíveis e verifica se eles são gerados corretamente. O teste verifica apenas os efeitos OFF
e MONO
, mas salva imagens para todos os efeitos compatíveis.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Aprovado:captura a imagem da cena com efeitos OFF
e uma imagem monocromática com efeitos definidos como MONO
.
Figura 99.test_effects_MONO.
test_exposure_keys_consistent
Esse teste compara o luma médio de uma captura ativada com AE a uma captura desativada com AE que aplica manualmente os parâmetros de exposição (sensibilidade, tempo de exposição, duração do frame, aumento de sensibilidade pós-bruto) recebidos no CaptureResult
da captura ativada com AE.
APIs testadas:
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureResult#CONTROL_POST_RAW_SENSITIVITY_BOOST
Aprovado:a diferença relativa no luma entre as duas capturas é menor que 4%.
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()
Aprovado:todas as combinações foram capturadas.
test_num_faces
Testa a detecção facial.
APIs testadas:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado:encontra três rostos.
Figura 100: exemplo do modo 1 de detecção facial test_num_faces.
test_reprocess_uv_swap
Testa se o reprocessamento de YUV não troca os planos U e V. Isso é detectado calculando a soma das diferenças absolutas (SAD, na sigla em inglês) entre a imagem reprocessada e uma captura não reprocessada. Se a troca dos planos U e V da captura reprocessada resultar em um aumento do SAD, a saída será considerada com os planos U e V corretos.
APIs testadas:
android.hardware.camera2.CameraDevice#createCaptureSession
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Aprovado:os planos U e V não são trocados.
Figura 101: exemplo de test_reprocess_uv_swap.
scene2_b
test_preview_num_faces
Testa a detecção facial na prévia 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
Aprovado:encontra três rostos com pontos de referência faciais nas caixas delimitadoras.
Figura 102: exemplo do modo 1 de detecção facial test_num_faces.
test_yuv_jpeg_capture_sameness
Captura duas imagens usando os maiores formatos comuns YUV e JPEG com a mesma proporção que o maior formato JPEG, sem exceder uma resolução de 1920 x 1440.
Define jpeg.quality
como 100 e captura uma solicitação de superfície dupla. Converte as duas imagens em matrizes RGB e calcula a diferença de raiz quadrática média (RMS) 3D entre elas.
Além disso, esse teste verifica se as saídas YUV para todos os casos de uso de stream compatíveis são razoavelmente semelhantes ao YUV com o caso de uso STILL_CAPTURE
.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
android.graphics.ImageFormat#JPEG
Aprovado:as imagens YUV e JPEG para o caso de uso STILL_CAPTURE
têm menos de 3% de diferença de RMS (valor quadrático médio de um sinal). As imagens YUV para todos os casos de uso compatíveis têm menos de 10% de diferença de RMS das imagens YUV com o caso de uso STILL_CAPTURE
.
scene2_c
test_num_faces
Testa a detecção facial 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
Aprovado:encontra três rostos.
Figura 103: exemplo do modo de detecção facial test_num_faces.
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 do CDD.
Aprovado:a latência de captura JPEG da câmera2 DEVE ser < 1.000 ms para resolução de 1080p, conforme medido pelo CTS camera PerformanceTest em condições de iluminação ITS (3.000 K) para as duas câmeras principais.
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 do CDD.
Aprovado:a latência de inicialização do camera2 (abrir a câmera para o primeiro frame de visualização) PRECISA ser < 600 ms, conforme medido pelo PerformanceTest da câmera do CTS em condições de iluminação do ITS (3.000 K) para as duas câmeras principais.
test_default_camera_hdr
Testa se a captura de câmera padrão é Ultra HDR para classe de desempenho 15, conforme especificado na seção 2.2.7.2 Câmera do CDD.
Aprovado:a captura do pacote de câmera padrão PRECISA ser Ultra HDR para um dispositivo de classe de desempenho 15.
scene2_d
test_preview_num_faces
Testa a detecção facial na prévia 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
Aprovado:encontra três rostos com pontos de referência faciais nas caixas delimitadoras.
scene2_e
test_continuous_picture
50 frames de resolução VGA são capturados com a primeira configuração de solicitação de captura
android.control.afMode = 4 (CONTINUOUS_PICTURE).
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Aprovado:o sistema 3A se estabiliza até o final de uma captura de 50 frames.
test_num_faces
Testa a detecção facial 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
Aprovado:encontra três rostos.
scene2_f
scene2_f
tem três rostos com fundo e roupas brancas. Os rostos têm uma ampla variedade de tons de pele e alto contraste com o plano de fundo.
Figura 104: exemplo de scene2_f.
test_preview_num_faces
Testa a detecção facial 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
Aprovado:encontra três rostos com pontos de referência faciais nas caixas delimitadoras.
Figura 105: exemplo de test_num_faces_fd_mode_1.
scene2_g
scene2_g
tem três rostos de perfil com fundo e roupas brancas.
Os rostos têm uma ampla variedade de tons de pele e alto contraste com o plano de fundo.
Figura 106: exemplo de scene2_g.
test_preview_num_faces
Testa a detecção facial 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
Aprovado:encontra três rostos com pontos de referência faciais nas caixas delimitadoras.
Figura 107: exemplo de test_preview_num_faces.
scene3
O scene3
usa o gráfico ISO12233, e a maioria dos testes usa um método de extração de gráfico para
encontrar o gráfico na cena. Por isso, a maioria das imagens salvas não tem bordas, como as das cenas 1, 2 ou 4, mas apenas o gráfico. O gráfico precisa estar na orientação correta para que o localizador funcione da melhor forma.
test_edge_enhancement
Testa se o parâmetro android.edge.mode
está 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:modo HQ
(2) mais nítido que o modo OFF
(0). FAST
(1) mais nítido que o modo OFF
. O modo HQ
é mais nítido ou igual ao modo FAST
.
APIs testadas:
Parâmetros de câmera afetados:
EDGE_MODE
Figura 108.Exemplo de test_edge_enhancement edge=0.
Figura 109: exemplo de test_edge_enhancement edge=1 (modo rápido).
Figura 110: exemplo de test_edge_enhancement edge=2 (modo de alta qualidade).
test_flip_mirror
Testa se a imagem está orientada corretamente de acordo com 7.5.2 Câmera frontal no CDD.
Imagens espelhadas, invertidas ou giradas podem ser identificadas pelo recurso de losango perto do centro.
Aprovado:a imagem não está invertida, espelhada nem girada.
Figura 111: exemplo de patch de cena test_flip_mirror.
test_imu_drift
Testa se a unidade de medição inercial (IMU) tem saída estável por 30 segundos enquanto o dispositivo está parado e capturando uma prévia em alta definição.
APIs testadas:
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_GYROSCOPE
android.hardware.Sensor#TYPE_ROTATION_VECTOR
Pass:
- A deriva do giroscópio é menor que 0,01 rad durante o tempo de teste.
- A variância da leitura do giroscópio é menor que 1E-7 rad2/s2/Hz durante o tempo de teste.
- O drift do vetor de rotação é menor que 0,01 rad durante o tempo de teste.
- (Ainda não é obrigatório) A deriva do giroscópio é inferior a 1 grau por segundo.
Figura 112: exemplo de deriva do giroscópio test_imu_drift.
Figura 113: exemplo de deriva do vetor de rotação test_imu_drift.
test_landscape_to_portrait
Testa se a substituição de paisagem para retrato funciona corretamente para sensores orientados para paisagem.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Aprovado:o teste localiza um gráfico com a rotação esperada (0 grau quando a substituição de paisagem para retrato está desativada e 90 graus quando está ativada).
Figura 114: exemplo de test_landscape_to_portrait.
test_lens_movement_reporting
Testa se a flag de movimento da lente foi informada corretamente. Captura uma sequência de 24 imagens com os primeiros 12 frames na distância de foco ideal (conforme encontrado por 3A) e os últimos 12 frames na distância de foco mínima. Por volta do frame 12, a lente se move, fazendo com que a nitidez diminua. A nitidez acaba se estabilizando quando a lente se move para a posição final.
A flag de movimento da lente precisa ser declarada em todos os frames em que a nitidez é intermediária à nitidez nos primeiros frames com a lente parada na distância focal ideal e nos últimos frames em que a lente está parada na distância focal mínima. O frame exato em que a lente se move não é importante. O que importa é que a flag de movimento seja declarada quando a lente estiver se movendo.
APIs testadas:
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
Aprovado:a flag de movimento do Lens é True
no frame com mudança de nitidez.
Mecanismos de falha:
lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) emtest_log.DEBUG
é declarado apenas em frames em que a nitidez não está mudando.- Os frames com
lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) emtest_log.DEBUG
têm uma diferença de nitidez em comparação com os primeiros frames na distância focal ideal ou os últimos frames na distância focal mínima.
test_reprocess_edge_enhancement
Testa se os métodos de reprocessamento compatíveis para aprimoramento de borda funcionam corretamente. Processa uma solicitação de captura com um determinado modo de borda de reprocessamento e compara diferentes modos para capturar com os modos de borda de reprocessamento desativados.
APIs testadas:
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Aprovado:a nitidez dos diferentes modos de borda está correta. HQ
(modo 2) é mais nítido que OFF
(modo 0), e a melhoria entre os diferentes modos é semelhante.
Figura 115: exemplo de gráfico test_reprocess_edge_enhancement.
scene4
scene4
consiste em um círculo preto sobre um fundo branco dentro de um quadrado.
Os testes no scene4 podem ser sensíveis ao alinhamento. Por isso, a partir do Android
15, você pode usar check_alignment.py
no diretório
tools para ativar uma verificação do alinhamento do DUT e do gráfico.
Figura 116: exemplo de scene4.
test_30_60fps_preview_fov_match
Testa se os vídeos de prévia de 30 FPS e 60 FPS têm o mesmo campo de visão. O teste captura dois vídeos, um com 30 QPS e outro com 60 QPS. Um frame representativo é selecionado de cada vídeo e analisado para verificar se as mudanças de campo de visão nos dois vídeos estão dentro das especificações. Testa se a proporção do círculo permanece constante, se o centro do círculo permanece estável e se o raio do círculo permanece constante.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Aprovado:as imagens não estão esticadas, o centro delas não difere em mais de 3% e a mudança máxima na proporção entre vídeos de 30 FPS e 60 FPS não é superior a 7,5%.
Mecanismos de falha:
- O círculo do vídeo de 30 QPS é significativamente diferente em tamanho do vídeo de 60 QPS.
- O círculo na imagem capturada é distorcido pelo pipeline de processamento.
- O círculo na imagem capturada é cortado devido a uma solicitação de captura de proporção extrema que reduz a altura ou a largura da imagem.
- O círculo na imagem capturada tem um reflexo no centro e não aparece totalmente preenchido.
test_aspect_ratio_and_crop
Testa se as imagens estão distorcidas ou cortadas inesperadamente no pipeline de imagens. Tira fotos de um círculo em todos os formatos. Verifica se o círculo não está distorcido, se não se move do centro da imagem e se não muda de tamanho incorretamente com diferentes proporções ou resoluções.
APIs testadas:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Aprovado:as imagens não são esticadas, o centro delas não difere em mais de 3% e o campo de visão máximo possível é preservado.
Mecanismos de falha:
- A câmera não está alinhada com o círculo exibido no tablet no centro da cena capturada.
- O círculo na imagem capturada é distorcido pelo pipeline de processamento.
- A imagem de resolução mais baixa é cortada duas vezes no pipeline de imagens, criando diferentes campos de visão entre imagens de alta e baixa resolução.
- O círculo na imagem capturada é cortado devido a uma solicitação de captura de proporção extrema que reduz a altura ou a largura da imagem.
- O círculo na imagem capturada tem um reflexo no centro e não aparece totalmente preenchido.
test_multi_camera_alignment
Testa os parâmetros de calibragem da câmera relacionados ao posicionamento dela em sistemas com várias câmeras. Usando as subcâmeras físicas com várias câmeras, tire uma foto com uma das câmeras físicas. Encontra o centro do círculo. Projeta o centro do círculo para as coordenadas mundiais de cada câmera. Compara a diferença entre os centros dos círculos das câmeras em coordenadas mundiais. Reprojeta a coordenada mundial de volta para as coordenadas de pixel e compara com as originais como uma verificação de validade. Compara os tamanhos dos círculos para verificar se as distâncias focais das câmeras são diferentes.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
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
Aprovado:os centros e tamanhos dos círculos estão como esperado nas imagens projetadas em comparação com as imagens capturadas usando dados de calibragem da câmera e distâncias focais.
Mecanismos de falha:
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
eLENS_POSE_ROTATION
são valores de projeto e não dados de calibragem reais.- O sistema de câmera não é adequado para a configuração de teste. Por exemplo, testar um sistema de câmera ampla e ultra-ampla com o equipamento de teste RFoV. Para mais informações, consulte Perguntas frequentes sobre o ITS-in-a-box da câmera Q1.
test_preview_aspect_ratio_and_crop
Semelhante ao teste test_aspect_ratio_and_crop
para capturas estáticas, verifica os formatos de prévia compatíveis para garantir que os
frames de prévia não estejam esticados ou cortados de maneira inadequada. Verifica se a proporção do círculo não muda, se as imagens cortadas mantêm o círculo no centro do frame e se o tamanho do círculo não muda para um formato constante ou com resoluções diferentes (verificação de campo de visão).
APIs testadas:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:as imagens não são esticadas, o centro delas não difere em mais de 3% e o campo de visão máximo possível é preservado.
test_preview_stabilization_fov
Verifica os tamanhos de visualização compatíveis para garantir que o campo de visão seja cortado
adequadamente. O teste captura dois vídeos, um com estabilização de visualização
ON
e outro com estabilização de visualização OFF
. Um frame representativo é selecionado de cada vídeo e analisado para verificar se as mudanças de campo de visão nos dois vídeos estão dentro da especificação.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:a proporção da imagem do círculo permanece aproximadamente constante, a localização do centro do círculo permanece estável, e o tamanho do círculo muda em no máximo 20%.
test_video_aspect_ratio_and_crop
Grava vídeos de um círculo dentro de um quadrado em todos os formatos de vídeo. Extrai os frames principais e verifica se a proporção do círculo não muda, se as imagens cortadas mantêm o círculo no centro e se o tamanho do círculo não muda para um formato constante ou com resoluções diferentes (verificação de campo de visão).
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:os frames de vídeo não são esticados, o centro dos frames não difere em mais de 3% e o campo de visão máximo possível é preservado.
scene5
O scene5
exige uma cena cinza iluminada de maneira uniforme. Isso é feito com um difusor colocado sobre a lente da câmera. Recomendamos o seguinte difusor:
www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
Para preparar a cena, coloque um difusor na frente da câmera e aponte para uma fonte de luz de cerca de 2.000 lux. As imagens capturadas para
scene5
precisam de iluminação difusa sem recursos evidentes. Esta é uma imagem de exemplo:
Figura 117: exemplo de captura da cena 5.
test_lens_shading_and_color_uniformity
Testa se a correção de sombreamento da lente é aplicada corretamente e se a cor de uma cena monocromática uniforme é distribuída de maneira uniforme. Realiza esse teste em um frame YUV com 3A automático. A correção de iluminação da lente é avaliada com base no canal Y. Mede o valor médio de y para cada bloco de amostra especificado e determina a aprovação ou reprovação comparando com o valor de y central. O teste de uniformidade de cor é avaliado no espaço vermelho-verde e azul-verde.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Aprovado:no raio especificado da imagem, a variância do valor vermelho-verde e azul-verde precisa ser menor que 20% para aprovação no teste.
scene6
scene6
é uma grade de marcadores ArUco identificáveis de forma exclusiva.
Os testes em scene6
podem ser sensíveis ao alinhamento. Por isso, a partir da
API 15, é possível usar check_alignment.py
no diretório
tools para ativar uma verificação do alinhamento do DUT e do gráfico.
Figura 118: exemplo de scene6.
test_in_sensor_zoom
Testa o comportamento do recurso de zoom no sensor da câmera, que produz imagens brutas cortadas.
Com o caso de uso de transmissão definido como
CROPPED_RAW
,
o teste faz duas capturas no intervalo de zoom, uma imagem bruta de campo de visão completo e uma imagem bruta cortada. O teste converte as imagens em matrizes RGB, reduz a imagem bruta cortada em tamanho real para o tamanho informado por SCALER_RAW_CROP_REGION
e calcula a diferença de RMS 3D entre as duas imagens.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Aprovado:a diferença de RMS 3D entre a imagem bruta cortada reduzida e a imagem bruta de campo de visão completo é menor que o limite definido no teste.
test_zoom
Testa o comportamento do zoom da câmera da lente ultra grande angular para a grande angular. Faz capturas em toda a faixa de zoom e verifica se os marcadores ArUco aumentam à medida que a câmera aumenta o zoom. O teste também verifica se a posição do marcador central muda de maneira previsível em cada captura. A distância do centro do marcador até o centro da imagem pode mudar a uma taxa constante em relação à proporção de zoom até uma troca física de câmera ou pode mudar monotonicamente em direção ao local do mesmo marcador após uma troca física de câmera. O app Jetpack Camera (JCA) precisa ser instalado no dispositivo antes do teste.
APIs testadas:
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
Aprovado:o tamanho relativo do marcador ArUco capturado é preciso em relação à proporção de zoom solicitada para verificar se a câmera está fazendo zoom corretamente, e a distância do marcador até o centro da imagem muda de acordo com os critérios declarados na descrição do teste.
Figura 119: test_zoom para encontrar o contorno do marcador ArUco mais próximo do centro.
test_low_latency_zoom
Testa o comportamento de zoom de baixa latência da câmera. Faz capturas no intervalo de zoom
com android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
e verifica
se os marcadores nas imagens de saída correspondem às proporções de zoom nos metadados
de captura. A mesma sessão de captura da câmera é usada para convergir o 3A e
fazer capturas.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Aprovado:o tamanho relativo do marcador capturado é preciso em relação aos metadados de resultado da proporção de zoom.
test_preview_video_zoom_match
Testes que, durante a gravação e o zoom, mostram a prévia e a saída de vídeo e gravam a mesma saída. Calcula o tamanho do marcador mais próximo do centro em diferentes proporções de zoom e verifica se o tamanho do marcador aumenta à medida que a proporção de zoom aumenta.
APIs testadas:
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
Aprovado:o tamanho relativo do marcador capturado é preciso em relação à proporção de zoom solicitada no vídeo e na prévia.
Figura 120. HD_1280x720_key_frame.png (antes do zoom).
Figura 121: preview_1280x720_key_frame.png (antes do zoom).
Figura 122. HD_1280x720_key_frame.png (após o zoom).
Figura 123: preview_1280x720_key_frame.png (após o zoom).
test_preview_zoom
Testa se a proporção de zoom de cada frame de prévia corresponde aos metadados de captura correspondentes da lente ultrawide para a lente grande. O teste usa frames de prévia no intervalo de zoom e encontra o marcador ArUco mais próximo do centro. Em seguida, o teste verifica se a posição do marcador central muda de forma previsível em cada captura. A distância do centro do marcador até o centro da imagem pode mudar a uma taxa constante em relação à proporção de zoom até uma troca física de câmera ou pode mudar monotonicamente em direção ao local do mesmo marcador após uma troca física de câmera.
APIs testadas:
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
Aprovado:o tamanho relativo do marcador ArUco selecionado é preciso para a proporção de zoom informada do resultado de captura correspondente em todos os frames de visualização. A distância relativa do marcador selecionado em relação ao centro da imagem é precisa para a proporção de zoom informada do resultado de captura correspondente de todos os frames de visualização.
Figura 124: imagens test_preview_zoom mostrando o marcador selecionado mais próximo do centro
test_session_characteristics_zoom
Testa o intervalo de proporção de zoom para todas as configurações de sessão compatíveis listadas em
CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
.
Para cada uma dessas configurações, se
CameraDeviceSetup#isSessionConfigurationSupported
retornar true
, o teste vai verificar se o intervalo de proporção de zoom retornado em
CameraDeviceSetup#getSessionCharacteristics
pode ser alcançado.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
android.hardware.camera2.CameraDevice.CameraDeviceSetup#getSessionCharacteristics
Aprovado:as proporções de zoom mínima e máxima podem ser alcançadas para cada
SessionConfiguration
compatível listado em
CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
.
scene7
scene7
é um frame retangular dividido em quatro quadrantes iguais, cada um preenchido com uma cor diferente. No centro do retângulo, há um gráfico de borda inclinada para verificações de nitidez. Quatro marcadores ArUco são alinhados com os quatro cantos externos do retângulo para ajudar a obter coordenadas precisas do frame principal do retângulo em diferentes proporções de zoom.
Figura 125: scene7.
test_multi_camera_switch
Esse teste verifica se, durante a gravação de prévia em diferentes proporções de zoom, a troca entre as lentes ultrawide (UW) e wide (W) resulta em valores RGB semelhantes.
O teste usa diferentes proporções de zoom dentro do intervalo predefinido para fazer uma gravação de visualização dinâmica e identificar o ponto em que a câmera física muda. Esse ponto marca a transição da lente UW para a W.
Os frames capturados no ponto de crossover e antes dele são analisados para exposição automática (AE), balanço de branco automático (AWB) e foco automático (AF).
A verificação de AE verifica se a mudança de luminância está dentro do intervalo esperado para imagens de lentes UW e W. A verificação de AWB verifica se as proporções de vermelho-verde e azul-verde estão dentro dos valores de limite para imagens de lentes UW e W. A verificação de AF avalia o valor de estimação de nitidez com base na magnitude média do gradiente entre as imagens de lentes UW e W.
Se o efeito moiré interferir nos resultados durante a execução desse teste, use um tablet de resolução mais alta da lista de tablets aprovados para o ITS da câmera.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.media.CamcorderProfile
android.media.MediaRecorder
Aprovado:para que o teste seja aprovado, as verificações de AE e AWB precisam ser aprovadas. Os resultados da verificação de AF são usados apenas para fins de geração de registros. Confira abaixo os critérios para cada verificação:
- Verificação de AE: a mudança de luminância (valor Y) entre as imagens das lentes UW e W precisa ser menor que 4% para todos os patches de cor se o dispositivo for compatível com
ae_regions
eawb_regions
. Se apenasae_regions
for compatível, somente os valores de patch de cor cinza precisarão atender aos critérios. - Verificação de AWB: a diferença entre os valores vermelho-verde e azul-verde para as imagens das lentes UW e W precisa ser menor que 3% para o patch de cor cinza e menor que 10% para outros patches de cor se o dispositivo for compatível com
ae_regions
eawb_regions
. - Verificação de foco automático: a nitidez da imagem capturada com a lente W precisa ser maior do que a nitidez com a captura UW.
Figura 126. Patch cinza tirado com lente UW.
Figura 127. Mancha cinza tirada com uma lente W.
scene8
scene8
é um quadro retangular dividido em quatro regiões iguais, cada uma contendo um retrato tirado com uma exposição diferente ou sobreposto com um tom de cor diferente (tom azul, exposição aumentada, exposição diminuída, tom amarelo).
Quatro marcadores ArUco são alinhados com os quatro cantos externos do retângulo para obter coordenadas precisas do frame principal.
Figura 128: exemplo de scene8.
test_ae_awb_regions
Testa se os valores de RGB e luma são diferentes ao gravar a prévia em diferentes regiões de AE e AWB.
O teste grava uma prévia de 8 segundos, realizando a medição de AE e AWB em cada quadrante por 2 segundos. Em seguida, o teste extrai um frame da gravação de prévia de cada região e usa os frames extraídos para realizar as seguintes verificações de AE e AWB:
- Verificação de AE: verifica se a medição de frames da região com exposição reduzida tem um valor de luminância mais de 1% maior do que a medição de frames da região com exposição aumentada. Isso verifica se as imagens são iluminadas ao medir uma região escura.
- Verificação de AWB: verifica se a proporção de vermelho para azul (dos valores RGB médios da imagem) no frame com a região de medição azul é mais de 2% maior do que no frame com a região de medição amarela. Isso verifica se as imagens têm um valor RGB equilibrado ao medir uma região amarela (quente) ou azul (fria).
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AE
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
Aprovado:as verificações de AE e AWB foram aprovadas.
Figura 129. Medição de frame em região escura com exposição aumentada.
Figura 130. Região mais clara de medição de frame com exposição reduzida.
Mecanismos de falha:
A detecção precisa dos quatro marcadores ArUco é essencial para esse teste. Se a detecção inicial falhar, o sistema tentará uma segunda detecção usando uma versão em preto e branco da imagem. A imagem em escala de cinza a seguir representa a etapa de processamento secundário:
Figura 131. Desalinhamento dos marcadores ArUco.
test_color_correction_mode_cct
Testa COLOR_CORRECTION_MODE
em diferentes temperaturas e tons de cor, verificando mudanças nas proporções de RGB em relação à cena de captura, scene8.
APIs testadas:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_COLOR_TEMPERATURE
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_COLOR_TEMPERATURE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_COLOR_TINT
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_COLOR_TINT
android.hardware.camera2.CameraCharacteristics#COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE
android.hardware.camera2.CameraMetadata#COLOR_CORRECTION_MODE_CCT
android.hardware.camera2.CameraCharacteristics#COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES
Aprovado:as proporções de RGB mostram os aumentos ou diminuições previstos em relação às temperaturas e tonalidades de cor selecionadas.
Critérios para pular o teste
O teste test_color_correction_mode_cct
será ignorado se algum dos seguintes critérios for atendido:
- O dispositivo tem um primeiro nível da API (
first_api_level
) de 35 ou menos. - O dispositivo não anuncia
COLOR_CORRECTION_MODE_CCT
emCOLOR_CORRECTION_AVAILABLE_ABERRATION_MODES
.
scene9
scene9
consiste em milhares de círculos de tamanhos e cores aleatórios para criar uma cena com repetibilidade muito baixa e testar algoritmos de compressão JPEG.
Figura 132: exemplo de scene9.
test_jpeg_high_entropy
Testa se a compactação JPEG da câmera funciona no scene9
com alta entropia e o fator de qualidade JPEG definido como 100%. O fator de zoom é aumentado para verificar se a cena mostrada no tablet preenche o campo de visão da câmera.
APIs testadas:
Aprovado:o arquivo JPEG é compactado, gravado e lido novamente do disco corretamente.
test_jpeg_quality
Testa a qualidade da compactação JPEG da câmera. Percorre as qualidades JPEG usando
android.jpeg.quality
e verifica se as tabelas de quantização mudam
corretamente.
APIs testadas:
Aprovado:a matriz de quantização diminui com o aumento da qualidade. A matriz representa o fator de divisão.
Figura 133. Médias da matriz DQT de luma e croma da câmera traseira do Pixel 4 em comparação com a qualidade JPEG.
Figura 134. Exemplo de teste com falha.
scene_video
scene_video
é uma cena de vídeo com quatro círculos de cores diferentes se movendo para frente e para trás em diferentes taxas de frames em um fundo branco.
Figura 135: exemplo de scene_video.
test_preview_frame_drop
Testa se a taxa de frames por segundo da visualização solicitada é mantida com uma cena dinâmica. Esse teste é executado em todas as câmeras expostas a apps de terceiros.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
Aprovado:a taxa de frames da prévia está no máximo do intervalo solicitado, e a variação média entre frames consecutivos é menor que a tolerância relativa definida no teste.
scene_extensions
Os testes scene_extensions
são para extensões de câmera e precisam usar o
Camera ITS-in-a-Box,
já que exigem controle preciso do ambiente de teste. Além disso, todo vazamento de luz precisa ser controlado. Isso pode exigir cobrir o suporte de teste, o DUT e o tablet com um pano de proteção, além de eliminar o vazamento de luz da tela frontal do DUT.
scene_hdr
A cena scene_hdr
consiste em um retrato à esquerda e um QR code de baixo contraste à direita.
Figura 136: exemplo de scene_hdr.
test_hdr_extension
Testa a extensão HDR. Faz capturas com e sem a extensão ativada e verifica se ela torna o QR code mais detectável.
APIs testadas:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Aprovado:a extensão HDR reduz o número de mudanças de contraste necessárias para detectar o QR code ou reduz o gradiente no QR code.
scene_low_light
A cena scene_low_light
consiste em uma grade de quadrados de vários tons de cinza em um fundo preto, e a grade de quadrados é delimitada por um contorno vermelho. Os quadrados são organizados em uma orientação de curva de Hilbert.
Figura 137: exemplo de scene_low_light.
test_night_extension
Testa a extensão noturna. Faz capturas com a extensão ativada e realiza o seguinte:
- Detecta a presença de 20 quadrados
- Calcula o luma delimitado por cada quadrado
- Calcula o valor médio de luma dos seis primeiros quadrados de acordo com a orientação da grade da curva de Hilbert.
- Calcula a diferença no valor de luminância de quadrados consecutivos (por exemplo, quadrado2 - quadrado1) até os quadrados 5 e 6 (quadrado6 - quadrado5) e encontra a média das cinco diferenças calculadas.
Em dispositivos com Android 16 ou versões mais recentes, a solicitação de captura inclui uma região tarifada correspondente ao retângulo que delimita a grade de quadrados. Essa adição muda os critérios de aprovação do limite.
APIs testadas:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Pass:
- Para dispositivos com Android 16 ou mais recente, o valor médio de luma dos seis primeiros quadrados precisa ser de pelo menos 80, e a diferença média no valor de luma dos quadrados consecutivos até os quadrados 5 e 6 precisa ser de pelo menos 18,75.
- Para dispositivos com Android 15 e versões anteriores, o valor médio de luma dos seis primeiros quadrados precisa ser de pelo menos 85, e a diferença média no valor de luma dos quadrados consecutivos até os quadrados 5 e 6 precisa ser de pelo menos 17.
O gráfico de luminância a seguir mostra como é um resultado de teste aprovado.
Figura 138. Exemplo de teste aprovado de uma cena noturna com pouca luz.
test_low_light_boost_extension
Testa o modo AE de aumento do modo pouca luz. Se o Camera2 for compatível com o modo de exposição automática de pouca luz, esse teste será realizado para o Camera2. Se a extensão de câmera do modo noturno for compatível e o modo AE de pouca luz refinado for compatível com a extensão, esse teste também será realizado para a extensão de câmera do modo noturno. Esse teste define o modo AE como "Aumento de pouca luz", captura um frame da prévia e realiza o seguinte:
- Detecta a presença de 20 caixas
- Calcula o luma delimitado por cada caixa.
- Calcula o valor médio de luma dos seis primeiros quadrados de acordo com a orientação da grade da curva de Hilbert.
- Calcula a diferença no valor de luminância de quadrados consecutivos (por exemplo, quadrado2 - quadrado1) até os quadrados 5 e 6 (quadrado6 - quadrado5) e encontra a média das cinco diferenças calculadas.
Em dispositivos com Android 16 ou versões mais recentes, a solicitação de captura inclui uma região tarifada correspondente ao retângulo que delimita a grade de quadrados. Essa adição muda os critérios de aprovação do limite.
APIs testadas:
android.hardware.camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
Pass:
Para dispositivos com Android 16 ou mais recente, o valor médio de luma dos seis primeiros quadrados precisa ser de pelo menos 54, e a diferença média no valor de luma dos quadrados consecutivos até os quadrados 5 e 6 precisa ser de pelo menos 17.
Para dispositivos com Android 15 e versões anteriores, o valor médio de luma dos seis primeiros quadrados precisa ser de pelo menos 70, e a diferença média no valor de luma dos quadrados consecutivos até os quadrados 5 e 6 precisa ser de pelo menos 18.
scene_tele
Um requisito fundamental para os testes de scene_tele
é que a distância do gráfico precisa ser pelo menos a distância mínima de foco da teleobjetiva. Como essa distância mínima de foco pode variar entre dispositivos, configure o ambiente para se adequar à câmera teleobjetiva específica.
Figura 139: configuração do scene_tele com base na distância de foco da câmera grande-angular e teleobjetiva.
Para mais informações sobre a configuração do hardware de teste, consulte Configuração do equipamento de extensão telescópica.
scene6_tele
A cena scene6_tele
consiste em uma grade de marcadores ArUco em um fundo branco.
Se as capturas de scene6_tele
parecerem superexpostas no suporte modular, remova a placa frontal do suporte modular.
Desconecte o equipamento de teste de WFoV da extensão e remova o suporte do smartphone.
Figura 140. Desconecte o equipamento de teste de WFoV da extensão e remova o suporte do smartphone.
Figura 141. Remova a placa frontal.
test_zoom_tele
Testa o comportamento do zoom da câmera da lente grande angular para a lente telefoto. O
teste é idêntico a test_zoom
, mas testa o comportamento do zoom da câmera
da lente grande angular para a lente telefoto.
APIs testadas:
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
Aprovado:o tamanho relativo do marcador ArUco capturado é preciso em relação à proporção de zoom solicitada para verificar se a câmera está fazendo zoom corretamente, e a distância do marcador até o centro da imagem muda de acordo com os critérios listados em test_zoom
.
test_preview_zoom_tele
Testa o comportamento do zoom da câmera para frames de visualização da lente grande angular para a teleobjetiva. O teste é idêntico a
test_preview_zoom
, mas testa o comportamento do zoom da câmera
para frames de visualização da lente grande angular para a teleobjetiva.
APIs testadas:
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
Aprovado:o tamanho relativo do marcador ArUco capturado é preciso em relação à proporção de zoom solicitada para verificar se a câmera está fazendo zoom corretamente, e a distância do marcador até o centro da imagem muda de acordo com os critérios listados em test_preview_zoom.
scene7_tele
scene7_tele
é idêntico a scene7
, mas configurado para testes de lente telefoto. É um frame retangular dividido em quatro quadrantes iguais, cada um preenchido com uma cor diferente. No centro do retângulo, há um gráfico de borda inclinada para verificações de nitidez. Quatro marcadores ArUco são alinhados com os quatro cantos externos do retângulo para ajudar a obter coordenadas precisas do frame principal do retângulo em diferentes proporções de zoom.
test_multi_camera_switch_tele
Esse teste verifica se, durante a gravação de prévia em diferentes proporções de zoom, a troca entre as lentes grande-angular (W) e teleobjetiva (tele) resulta em valores RGB semelhantes.
O teste usa diferentes proporções de zoom dentro do intervalo predefinido para fazer uma gravação de visualização dinâmica e identificar o ponto em que a câmera física muda. Esse ponto marca a transição da lente W para a tele.
Os frames capturados no ponto de cruzamento e antes dele são analisados para AE, AWB e AF.
A verificação de AE verifica se a mudança de luminância está dentro do intervalo esperado para imagens de lente W e tele. A verificação de AWB verifica se as proporções de vermelho-verde e azul-verde estão dentro dos valores de limite para imagens de lente W e tele. A verificação de AF avalia o valor de estimação de nitidez com base na magnitude média do gradiente entre as imagens da lente W e tele.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.media.CamcorderProfile
android.media.MediaRecorder
Aprovado:para que o teste seja aprovado, as verificações de AE, AWB e AF precisam ser aprovadas. Confira abaixo os critérios para cada verificação:
- Verificação de AE: a mudança de luma entre as imagens da lente W e teleobjetiva precisa ser menor que 4%.
- Verificação de AWB: no espaço de cores LAB, o delta C entre vermelho-verde e azul-verde para grande angular e teleobjetiva não pode exceder 10.
- Verificação de AF: a nitidez da imagem da teleobjetiva precisa ser maior do que a da lente W.
scene_flash
Os testes de scene_flash
exigem uma cena escura na caixa de fusão do sensor.
test_auto_flash
Testa se o flash automático é acionado em uma cena escura para câmeras traseiras e frontais. Para câmeras frontais, o flash automático usa a tela para iluminar a cena, não uma unidade de flash física. O teste verifica se o flash automático é disparado conferindo se o centro da imagem do bloco está mais claro com o flash automático ativado. Para acionar o flash automático, as luzes do equipamento de teste precisam estar apagadas. Elas podem ser apagadas automaticamente com o controlador Arduino. A cena precisa estar completamente escura para que o teste funcione corretamente. O app Jetpack Camera (JCA) precisa ser instalado no dispositivo antes do teste. O flash automático para câmeras traseiras depende do estado AE para ser acionado, mas o flash automático para câmeras frontais não depende do AE e é sempre acionado.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Aprovado:o centro da imagem do bloco com o flash automático ativado está mais claro do que a imagem da cena original para todas as câmeras.
test_flash_strength
Testa se o controle de intensidade do flash no modo
SINGLE
foi implementado corretamente.
Verifica se, quando o dispositivo é compatível com o controle da intensidade do flash durante o uso da câmera
no modo SINGLE
, a intensidade do flash muda com diferentes níveis de intensidade
solicitados. Verifica se o controle da intensidade do flash funciona com diferentes
AE_MODES
.
Por exemplo, se o modo de exposição automática for ON
ou OFF
, o nível de intensidade do flash afetará o brilho. Se o modo for ON_AUTO_FLASH
, o nível de intensidade do flash não afetará o brilho.
Para realizar o teste, as luzes no equipamento de teste precisam ser desligadas. Elas podem ser desligadas automaticamente com o controlador Arduino. A cena precisa estar completamente escura para que o teste funcione corretamente.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_MAX_LEVEL
Pass:
Quando o modo de exposição automática é ON
ou OFF
, o brilho dos patches de imagem aumenta à medida que o nível de intensidade do flash aumenta de sem flash para FLASH_SINGLE_STRENGTH_MAX_LEVEL
.
Quando o modo de exposição automática é ON_AUTO_FLASH
, a diferença no brilho dos patches de imagem está dentro da tolerância à medida que o nível de intensidade do flash aumenta de sem flash para FLASH_SINGLE_STRENGTH_MAX_LEVEL
.
test_led_snapshot
Testa se os snapshots de LED não saturam nem tingem a imagem.
Esse teste adiciona um controlador de iluminação à caixa de fusão do sensor para controlar as luzes. Com as luzes definidas como OFF
, o teste faz uma captura com o modo AUTO_FLASH
definido como ON
. Durante essa captura, o teste executa uma
sequência de pré-captura com o gatilho aePrecapture
definido como START
e define a
intent de captura como Preview
para fazer a captura com flash.
Como a captura tem um ponto de destaque devido ao flash, o teste calcula a média da imagem do flash de toda a captura e verifica se o valor está dentro do intervalo (68, 102). Para verificar se o balanceamento de branco da imagem é razoável, o teste calcula as proporções vermelho-verde e azul-verde e verifica se elas estão entre 0,95 e 1,05.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Aprovado:as proporções vermelho-verde e azul-verde estão entre 0,95 e 1,05. A média da imagem do flash está no intervalo (68, 102).
test_night_mode_indicator
Testa a funcionalidade do indicador do modo noturno, um recurso que indica se a câmera está operando em condições de pouca luz e se beneficiaria de uma extensão de câmera do modo noturno ainda em captura. Esse recurso só está disponível em dispositivos que oferecem suporte a extensões de câmera do modo noturno.
Esse teste verifica se o indicador do modo noturno reflete corretamente as condições de iluminação durante a prévia da câmera. O teste executa as seguintes etapas:
- Inicialização:o teste inicializa um
ItsSession
e recupera propriedades da câmera. Ele também estabelece uma conexão com o controlador de iluminação. - Condições de ignorar:o teste é ignorado se o dispositivo não for compatível com o nível de API necessário ou com o recurso de indicador do modo noturno.
- Sessão do Camera2:
- O teste inicia uma sessão de captura de prévia usando uma sessão
Camera2
. - A luz é acesa e um frame de prévia é capturado.
- O teste verifica se o indicador do modo noturno está no estado
OFF
. - A luz é apagada e um frame de prévia é capturado.
- O teste verifica se o indicador do modo noturno está no estado
ON
.
- O teste inicia uma sessão de captura de prévia usando uma sessão
- Sessão de extensão de câmera:
- O teste repete o mesmo procedimento da sessão
Camera2
, mas usando uma sessãoCameraExtension
com a extensãoEXTENSION_NIGHT
.
- O teste repete o mesmo procedimento da sessão
- Limpeza:o teste é encerrado
ItsSession
e libera o controlador de iluminação.
APIs testadas:
Pass:
- Quando a luz estiver acesa, o indicador do modo noturno vai estar no estado
OFF
. - Quando a luz está apagada, o indicador do modo noturno precisa estar no estado
ON
. - Isso se aplica às sessões de
Camera2
eCameraExtension
.
test_preview_min_frame_rate
Testa se a taxa de frames por segundo da prévia diminui corretamente em uma cena escura. Para que esse teste funcione corretamente, as luzes no equipamento de teste precisam ser desligadas pelo controlador ou manualmente pelo operador de teste.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
Aprovado:a taxa de frames da prévia está no mínimo do intervalo de taxa de frames solicitado, e a variação entre frames é menor que a tolerância absoluta definida no teste.
test_torch_strength
Testa se o controle de intensidade do flash no modo
TORCH
foi implementado corretamente.
Verifica se o dispositivo oferece suporte ao controle da intensidade do flash durante o uso da câmera
no modo TORCH
e se a intensidade da lanterna muda com os diferentes níveis
solicitados. Verifica se o controle da intensidade do flash funciona com diferentes
AE_MODES
.
Por exemplo, se o modo de exposição automática for ON
ou OFF
, o nível de intensidade do flash afetará o brilho. Se o modo for ON_AUTO_FLASH
, o nível de intensidade do flash não afetará o brilho.
Verifica se a intensidade da luz permanece a mesma durante um
disparo contínuo, simulando uma sessão de captura de vídeo. Para realizar o teste, as luzes do
equipamento de teste precisam ser desligadas. Elas podem ser desligadas automaticamente com o
controlador Arduino. A cena precisa estar completamente escura para que o teste funcione corretamente.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_MAX_LEVEL
Pass:
Quando o modo de exposição automática é ON
ou OFF
, o brilho dos patches de
rajada de imagens aumenta à medida que o nível de intensidade do flash aumenta de sem flash
para
FLASH_TORCH_STRENGTH_MAX_LEVEL
.
Quando o modo de exposição automática é ON_AUTO_FLASH
, a diferença no brilho dos patches de sequência de imagens está dentro da tolerância à medida que o nível de intensidade do flash aumenta de sem flash para FLASH_TORCH_STRENGTH_MAX_LEVEL
.
sensor_fusion
Os testes de fusão de sensores exigem um movimento específico do smartphone na frente de um padrão de tabuleiro de damas e marcadores ArUco. Para ter os melhores resultados, verifique se o gráfico de teste está montado de forma plana. Os gráficos que não são planos afetam os cálculos de rotação de muitos testes. O gráfico precisa preencher a parte de trás da caixa de fusão de sensores ao ser impresso em 43 x 43 cm. (43x43 cm). Os testes de sensor_fusion
podem ser automatizados com a caixa de fusão de sensores.
Figura 142. Gráfico de fusão do sensor.
Figura 143. Gráfico de fusão do sensor que preenche a parte de trás da caixa de fusão do sensor.
test_lens_intrinsic_calibration
Testa se o centro óptico das mudanças intrínsecas da lente quando ela se move devido à estabilização óptica de imagem (OIS). Se as amostras intrínsecas da lente forem compatíveis, os testes vão verificar se o centro óptico das amostras intrínsecas da lente muda quando ela se move devido à OIS.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:o centro óptico da mudança intrínseca da lente em 1 pixel ou mais. Se as amostras intrínsecas da lente forem compatíveis, os centros ópticos delas vão mudar em um pixel ou mais.
A figura a seguir é um exemplo de gráfico test_lens_intrinsic_calibration
que mostra mudanças de pontos principais em pixels para cada frame:
Figura 144. Exemplo de gráfico test_lens_intrinsic_calibration mostrando mudanças de pontos principais em pixels para cada frame.
test_multi_camera_frame_sync
Testa se os carimbos de data/hora de frames capturados pela câmera lógica estão dentro de 10 ms calculando os ângulos dos quadrados no padrão quadriculado para determinar o carimbo de data/hora.
APIs testadas:
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()
Aprovado:o ângulo entre as imagens de cada câmera não muda muito quando o smartphone é girado.
test_preview_distortion
Testa se a distorção é corrigida em cada frame de prévia capturado em vários níveis de zoom. Para cada frame de prévia, o teste calcula pontos ideais com base nas características intrínsecas e extrínsecas da câmera.
Na imagem de exemplo, os pontos ideais são mostrados em verde, e os pontos reais, em vermelho. O erro de distorção é calculado com base na distância RMS em pixels entre os pontos reais e ideais. Os destaques em verde e vermelho na imagem são usados para detectar visualmente a área do erro de distorção.
Figura 145. Imagem de um tabuleiro de damas com pontos ideais em verde e pontos reais em vermelho.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.media.CamcorderProfile
android.media.MediaRecorder
Aprovado:o erro de distorção normalizado de cada frame de prévia é menor que o limite definido no teste.
test_preview_stabilization
Testes que estabilizaram a rotação do vídeo de prévia menos do que o giroscópio.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:a rotação máxima do ângulo nos frames é menor que 70% da rotação do giroscópio.
Confira abaixo exemplos de vídeos com e sem estabilização:
Figura 146. Exemplo de vídeo com estabilização.
Figura 147. Exemplo de vídeo sem estabilização.
test_sensor_fusion
Testa a diferença de carimbo de data/hora entre a câmera e o giroscópio para aplicativos de AR e VR. O smartphone é girado 90 graus 10 vezes na frente do padrão quadriculado. O movimento é de cerca de 2 segundos de ida e volta. Esse teste será ignorado se nenhum giroscópio estiver incluído ou se o parâmetro de origem do carimbo de data/hora REALTIME
não estiver ativado.
O teste test_sensor_fusion
gera vários gráficos. Os dois gráficos mais importantes para depuração são:
test_sensor_fusion_gyro_events
: mostra os eventos do giroscópio do smartphone durante o teste. O movimento nas direções x e y indica que o smartphone não está fixado com segurança na placa de suporte, reduzindo a probabilidade de aprovação no teste. O número de ciclos no gráfico depende da velocidade de gravação para salvar frames.Figura 148: exemplo de eventos do giroscópio test_sensor_fusion.
test_sensor_fusion_plot_rotations
: mostra o alinhamento dos eventos do giroscópio e da câmera. Esse gráfico precisa mostrar o movimento correspondente entre a câmera e o giroscópio em +/-1 ms.Figura 149: exemplo de rotações do gráfico test_sensor_fusion.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#LENS_FACING
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
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
Aprovado:o deslocamento dos carimbos de data/hora da câmera e do giroscópio é menor que 1 ms, conforme 7.3.9 Sensores de alta fidelidade no CDD.
Mecanismos de falha:
- Erro de compensação: a compensação do giroscópio da câmera não está calibrada corretamente em +/-1 ms.
- Quedas de frames: o pipeline não é rápido o suficiente para capturar 200 frames consecutivos.
- Erros de soquete: o
adb
não consegue se conectar ao DUT por tempo suficiente para executar o teste. - O gráfico não está montado em uma superfície plana. O gráfico
test_sensor_fusion_plot_rotations
tem frames em que a rotação do giroscópio e da câmera varia consideravelmente à medida que a câmera gira pelas partes não planas do gráfico. - A câmera não está montada em uma superfície plana. O gráfico
test_sensor_fusion_gyro_events
mostra o movimento nos planos X e Y. Essa falha é mais comum em câmeras frontais, já que a câmera traseira geralmente tem uma protuberância em relação ao restante do corpo do smartphone, criando uma inclinação ao fixar a parte de trás do smartphone na placa de fixação.
test_video_stabilization
Testes que estabilizaram o vídeo giram menos do que o giroscópio.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:a rotação máxima do ângulo nos frames é menor que 60% da rotação do giroscópio.
Confira abaixo exemplos de vídeos com e sem estabilização.
Figura 150. Exemplo de vídeo com estabilização.
Figura 151. Exemplo de vídeo sem estabilização.
test_video_stabilization_jca
Os testes que estabilizaram o vídeo capturado usando o JCA giram menos do que o giroscópio. A JCA precisa ser instalada no dispositivo antes do teste.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.CamcorderProfile
android.media.MediaRecorder
Aprovado:a rotação máxima do ângulo nos frames extraídos do vídeo capturado usando a JCA é menor que 70% da rotação do giroscópio.
feature_combination
Os testes de feature_combination
verificam se os recursos funcionam corretamente quando
vários recursos de câmera estão ativados ao mesmo tempo. Esses testes usam a mesma imagem de
tabuleiro de damas usada na cena de fusão de sensores.
test_feature_combination
Testa todas as combinações de diferentes combinações de stream, modo de estabilização de vídeo, intervalo de QPS desejado, vídeo HDR de 10 bits e Ultra HDR compatíveis com o dispositivo de câmera.
No Android 16 e versões mais recentes, o teste executa todas as combinações de
recursos compatíveis e registra os resultados em um arquivo proto. As declarações de falha são chamadas apenas para combinações de recursos em que isSessionConfigurationSupported
retorna True
.
APIs testadas:
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
android.hardware.camera2.CameraDevice.CameraDeviceSetup#createCaptureRequest
Aprovado:para cada combinação de recursos compatível:
- A prévia da transmissão é estabilizada se a estabilização de prévia estiver ativada.
- A taxa de frames da prévia está dentro do
AE_TARGET_FPS_RANGE
configurado. - O espaço de cores do stream de prévia gravado corresponde ao que foi definido.
- A captura Ultra HDR tem um mapa de ganho válido.
scene_ip
No Android 16 e versões mais recentes, a cena scene_ip
permite verificações de paridade de imagem entre o app de câmera padrão e o app de câmera do Jetpack (JCA, na sigla em inglês) para identificar diferenças significativas entre as imagens capturadas. O JCA replica capturas de apps de mídia social e fornece uma imagem de base que esses apps processam e refinam.
Requisitos de configuração de hardware
A seguinte configuração de hardware é necessária para testes de scene_ip
:
- Os testes são executados no ITS-in-a-box da câmera Gen2.
- Os controladores de iluminação e servo que fazem parte do equipamento Gen2 são usados para controlar o ambiente de teste.
- Um gráfico de recurso de teste é colocado dentro do rig Gen2.
Figura 152. Exemplo de Gen2chart_sample.
Critérios para pular o teste
Os testes de scene_ip
são ignorados se algum dos seguintes critérios for atendido:
- O dispositivo tem um primeiro nível da API (
first_api_level
) de 35 ou menos. - O dispositivo não é um smartphone com câmeras frontais e traseiras principais (por exemplo, um tablet ou uma TV).
test_default_jca_ip
Faz capturas do gráfico de recursos de teste em condições de iluminação controladas usando o app de câmera padrão e a JCA e realiza as seguintes verificações:
Campo de visão (FoV):verifica se o app de câmera padrão e as capturas da JCA têm o mesmo campo de visão. Essa verificação usa o recurso de QR code central extraído da imagem do gráfico de capturas.
Brilho:verifica se a diferença de brilho medida entre o app de câmera padrão e a JCA não excede 10. Essa verificação usa o patch de intervalo dinâmico para medição de brilho.
Balanço de branco:verifica se a diferença de balanço de branco entre o app de câmera padrão e a JCA não excede 4. Essa verificação usa o patch de intervalo dinâmico para medição de brilho.
Aprovação na seção básica:o teste passa nas verificações de campo de visão, brilho e equilíbrio de branco. No Android 16, esse teste não é obrigatório
(NOT_YET_MANDATED
).