Esta página lista todos os testes disponíveis para avaliar a camada de abstração de hardware (HAL) da câmera do Android. Ela é destinada a fabricantes de equipamentos originais (OEMs) e fornecedores de processadores de aplicativos (APs) para garantir a implementação adequada da HAL da câmera com o mínimo de defeitos. Embora seja uma adição voluntária ao conjunto de testes de compatibilidade (CTS) do Android, ela aumenta muito a cobertura de testes da câmera e certamente identifica possíveis bugs.
Ao passar nesses testes, os OEMs validam se integraram corretamente as interfaces da camada de abstração de hardware (HAL) 3 da câmera do Android. Quando estiver em conformidade com todos os itens da lista de verificação, uma implementação de dispositivo poderá ser considerada completa em relação às interfaces HAL da câmera do Android. Isso, por sua vez, permite que um dispositivo ofereça suporte adequado ao
android.hardware.camera2 pacote em que os apps de câmera são criados.
Especificação HAL3 da câmera
A especificação HAL3 da câmera do Android é a fonte oficial de informações sobre o que os dispositivos precisam atender. Esta página oferece um resumo de todos os testes que podem ser usados como uma lista de verificação. Os implementadores de HAL da câmera (por exemplo, fornecedores de AP) precisam analisar a especificação HAL3 da câmera linha por linha e garantir que os dispositivos estejam em conformidade com ela.
A especificação HAL atual é definida nestes arquivos no Kit de desenvolvimento de plataforma (PDK) genérico do Android 5.0 e versões mais recentes:
- Interface e especificação HAL 3.x da câmera:
hardware/libhardware/include/hardware/camera3.h,hardware/libhardware/include/hardware/camera_common.h - Especificação de metadados HAL 3.x da câmera:
system/media/camera/docs/docs.html - Interface e especificação de formato de pixel HAL:
system/core/libsystem/include/system/graphics.h
Tipos de teste de câmera
Confira os principais tipos de testes disponíveis para a câmera mais recente do Android, além de referências às instruções associadas abaixo:
- _Conjunto de testes de fornecedor (VTS)_: testes que testam diretamente a interface HAL da câmera
- _Conjunto de testes de compatibilidade (CTS): testes padrão e automatizados do Android para garantir a compatibilidade do dispositivo. Para mais detalhes, consulte Conjunto de testes de compatibilidade e Visão geral do Trade Federation.
- _Conjunto de testes de imagem (ITS)_: testes executados manualmente para garantir a correção da imagem. Para mais detalhes, consulte ITS da câmera.
- Testes manuais da TestingCam:
executados na origem em
pdk/apps/TestingCamera/ - Testes manuais da TestingCam2.1
testes: executados na origem em
pdk/apps/TestingCamera2/
Todos esses tipos de teste são descritos em detalhes abaixo. Esses testes são apresentados na ordem cronológica em que os OEMs precisam executá-los.
Por exemplo, se um dispositivo falhar nos testes nativos, ele certamente falhará nos testes subsequentes do conjunto de testes de compatibilidade (CTS). E se um dispositivo falhar no CTS, não será útil prosseguir para o conjunto de testes de imagem (ITS). Recomendamos resolver falhas em cada tipo de teste antes de prosseguir para o próximo conjunto de testes.
Testes do conjunto de testes de fornecedor (VTS)
O conjunto de testes de fornecedor do Android (VTS, na sigla em inglês) é um conjunto de testes que funciona no nível da interface HIDL. Para mais informações sobre como usar o VTS, consulte Conjunto de testes de fornecedor.
Testes do conjunto de testes de compatibilidade (CTS)
Os testes do conjunto de testes de compatibilidade (CTS) da câmera do Android se concentram na compatibilidade do dispositivo. Para informações sobre como configurar um ambiente de teste, consulte Como configurar o CTS.
O caminho inicial para testes CTS da câmera é: platform/cts.
Ao executar o CTS da câmera para dispositivos que oferecem suporte a câmeras externas (como webcams USB), é necessário ter um dispositivo conectado ao executar o CTS. Caso contrário, os testes falharão automaticamente. Exemplos de câmeras externas incluem: Logitech HD Pro Webcam C920 e Microsoft LifeCam HD-3000.
Consulte a introdução do CTS e as subpáginas para instruções gerais sobre como executar o CTS.
Testes CTS para a API android.hardware.Camera
Encontre esses testes de câmera em cts/tests/tests/:
hardware/src/android/hardware/cts/CameraTest.javahardware/src/android/hardware/cts/CameraGLTest.javahardware/src/android/hardware/cts/Camera_SizeTest.javapermission/src/android/permission/cts/CameraPermissionTest.java
Testes CTS para a API android.hardware.camera2
Encontre esses testes de câmera em cts/tests/tests/:
hardware/src/android/hardware/camera2/cts/*permission/src/android/permission/cts/Camera2PermissionTest.java
Testes de câmera do CTS Verifier
Encontre esses testes de câmera em:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
Testes do conjunto de testes de imagem (ITS)
Os testes do conjunto de testes de imagem (ITS) da câmera se concentram na correção da imagem. Para realizar os testes, execute os scripts Python em uma estação de trabalho com o dispositivo Android conectado por USB.
A infraestrutura e os testes do ITS da câmera estão localizados no
cts/apps/CameraITS diretório.
Cada teste reside em um tests/scene# subdiretório.
Para mais informações sobre como configurar e executar os testes, consulte ITS da câmera.
Para descrições de cenas e testes, consulte Testes ITS da câmera.
Os testes ITS são aprovados ou reprovados. Todos os testes obrigatórios em cada pasta de cena precisam ser aprovados.
Os testes que não são obrigatórios podem falhar e ainda contar como uma aprovação em
CtsVerifier.
Os testes ITS testam cenários que não são testados no CTS e são um componente importante do plano de teste HAL 3.2.
Testes do Media Framework
Aprove todos os testes de mídia relacionados à câmera no MediaFrameworkTest. Esses testes exigem que o mediaframeworktest.apk seja instalado no dispositivo Android. Você precisará make mediaframeworktest e usar o adb para instalar o .apk resultante. Os comandos de exemplo estão incluídos abaixo.
O caminho inicial para testes de framework de mídia relacionados à câmera é:
platform/frameworks/base
Encontre o código-fonte dos testes aqui:
frameworks/base/media/tests/MediaFrameworkTest
Para configurar esses testes:
make mediaframeworktestadb install out/target/product/name/data/app/mediaframeworktest.apk
Em que a variável name representa o diretório que contém o produto do fornecedor.
Encontre todos os testes no diretório a seguir ou nos subdiretórios dele:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
Cada subdiretório representa uma classe de testes:
functional/integration/performance/power/stress/unit/
Executar testes do Media Framework
Para conferir todos os testes disponíveis:
adb shell pm list instrumentation
Isso vai gerar resultados semelhantes a:
instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner (target=com.android.mediaframeworktest)
Identifique e extraia o componente (entre instrumentation: e (target=com.android.mediaframeworktest) ) de cada linha de teste.
O componente é composto pelo nome do pacote de destino
(com.android.mediaframeworktest) e pelo nome do executor de teste
(MediaFramework).
Por exemplo:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Em seguida, transmita cada componente para adb shell am instrument desta forma:
adb shell am instrument -w component.name
Em que component.name é igual ao valor extraído
acima. Por exemplo:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Embora o caminho da classe seja o pacote Java + nome da classe, o pacote de instrumentação não é necessariamente o mesmo que o pacote Java. Use o pacote AndroidManifest.xml ao concatenar o nome do componente, não o pacote Java em que a classe do executor de teste reside.
Para executar uma única classe de testes, transmita o argumento -e class
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Para executar apenas um único método em uma classe de teste, anexe um sinal de libra (#) e o nome do método (neste caso, testConnectPro) ao nome da classe, desta forma:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Testes funcionais de configurações de mídia
Confira um exemplo de execução de um teste funcional. Esse teste verifica a funcionalidade básica de diferentes combinações de configurações de câmera. Ou seja, flash, exposição, WB, cena, tamanho da imagem e geotag.
Execute o comando de teste:
adb shell am instrument -w -r -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
Testes de integração de mídia
Confira um exemplo de execução de um teste de integração, neste caso mediaframeworktest/integration/CameraBinderTest.java e mediaframeworktest/CameraStressTestRunner.java:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
Se for bem-sucedido, isso resultará em uma saída semelhante a:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Testes de performance de mídia
Esse teste de memória de visualização vai abrir e liberar a visualização da câmera 200 vezes. Em cada 20 iterações, o snapshot do ps mediaserver será gravado e comparará o uso da memória diferente após 200 iterações. O teste vai falhar se a diferença for maior que 150kM.
Execute o comando de teste:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
Uma saída mais detalhada pode ser encontrada em:
/sdcard/mediaMemOutput.txt
Testes de unidade de mídia
Os comandos para executar testes de unidade são todos semelhantes. Por exemplo, para CameraMetadataTest.java, o comando seria:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
Testes de estresse de mídia
Esse teste é para estressar a captura de imagens da câmera e a gravação de vídeo.
Execute o comando de teste:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Todos os testes precisam ser aprovados.
Testes manuais da TestingCam
O app TestingCam precisa ser executado manualmente com as seguintes verificações.
A origem da TestingCam está aqui: pdk/apps/TestingCamera/
Foco infinito com inclinação da câmera
Inicie a TestingCam, ative a visualização e verifique se o modo de foco automático está definido como infinito. Usando o botão Tirar foto, capture fotos de objetos distantes (pelo menos 10 m de distância) com a câmera apontada horizontalmente, para cima (próximo ao vertical) e para baixo (próximo ao vertical). Um exemplo da foto para cima pode ser folhas/galhos altos de uma árvore por baixo, e um exemplo da foto para baixo pode ser a rua vista do telhado de um prédio. Em todos os casos, o objeto distante precisa estar nítido e em foco. Salve e visualize as fotos na visualização da galeria para que você possa aumentar o zoom e inspecionar a nitidez com mais facilidade.
Para que uma câmera com um atuador VCM passe nesse teste, ela vai exigir um sistema de controle AF de circuito fechado ou algum tipo de correção de SW com base no uso de dados do acelerômetro para determinar a orientação da câmera. Também será necessária uma calibragem de fábrica confiável da posição infinita da lente.
Testes manuais da TestingCam2
O app TestingCam2 precisa ser executado manualmente, com as seguintes verificações. A origem da TestingCam2 está aqui: pdk/apps/TestingCamera2/
Captura JPEG
Inicie a TestingCam2 e pressione o botão JPEG. A imagem que aparece à direita da imagem do visor precisa ser igual ao visor, incluindo a mesma orientação.