Esta página lista todos os testes disponíveis para avaliar a camada de abstração de hardware da câmera do Android (HAL). Ele é destinado a fabricantes de equipamentos originais (OEMs) e fornecedores de processadores de aplicativos (APs) para garantir a implementação adequada do HAL da câmera com o mínimo de defeitos. Embora essa seja uma adição voluntária ao Teste de compatibilidade do Android (CTS, na sigla em inglês), ela aumenta muito a cobertura do teste da câmera e certamente identificará possíveis bugs.
Ao serem aprovados nesses testes, os OEMs verificam
se integraram corretamente as interfaces da
camada de abstração de hardware (HAL)
da câmera Android 3. Quando em conformidade com todos os itens da
lista de verificação, uma implementação de dispositivo pode ser considerada completa em relação
às interfaces HAL da câmera do Android. Isso permite que o dispositivo
seja compatível com o pacote
android.hardware.camera2
usado pelos
apps de câmera.
Especificação da Camera HAL3
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 fornece 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 passar pela especificação da câmera HAL3 linha por linha e garantir que os dispositivos estejam em conformidade com ela.
A especificação atual da HAL é definida nestes arquivos no kit de desenvolvimento da plataforma Android (PDK, na sigla em inglês) genérico do Android 5.0 e versões mais recentes:
- Especificação e interface da HAL 3.x da câmera:
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Especificação de metadados da HAL 3.x da câmera:
system/media/camera/docs/docs.html
- Especificação e interface do formato de pixel HAL:
system/core/libsystem/include/system/graphics.h
Tipos de teste da câmera
Confira os principais tipos de testes disponíveis para a câmera mais recente do Android e as referências às instruções associadas abaixo:
- Conjunto de teste de fornecedor (VTS):testes que testam diretamente a interface HAL da câmera.
- Conjunto de teste de compatibilidade (CTS): testes padrão e automatizados do Android para garantir a compatibilidade do dispositivo. Para mais detalhes, consulte o conjunto de teste de compatibilidade e a visão geral da Trade Federation.
- Pacote de teste de imagem (ITS, na sigla em inglês):execute testes manualmente para garantir a correção da imagem. Para mais detalhes, consulte ITS da câmera.
- Testes manuais da Câmera de teste:
execute a partir da origem em
pdk/apps/TestingCamera/
- Testes manuais da
Câmera 2.1: execute a partir da 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 devem executá-los.
Por exemplo, se um dispositivo for reprovado nos testes nativos, ele vai falhar nos testes subsequentes do conjunto de teste de compatibilidade (CTS). E se um dispositivo falhar no CTS, não há muito uso para prosseguir para o conjunto de testes de imagem (ITS). Recomendamos resolver falhas em cada tipo de teste antes de passar para o próximo conjunto de testes.
Testes do pacote de teste de fornecedor (VTS)
O Conjunto de teste de fornecedor do Android (VTS, na sigla em inglês) é um pacote de testes que funciona no nível da interface HIDL. Para mais informações sobre o uso do VTS, consulte Conjunto de teste de fornecedor.
Testes do conjunto de teste de compatibilidade (CTS)
Os testes do conjunto de teste de compatibilidade do Android (CTS) da câmera 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 de CTS da câmera é: platform/cts
.
Ao executar o CTS de câmera para dispositivos com 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 do CTS para
a API android.hardware.Camera
Encontre esses testes de câmera em cts/tests/tests/
:
hardware/src/android/hardware/cts/CameraTest.java
hardware/src/android/hardware/cts/CameraGLTest.java
hardware/src/android/hardware/cts/Camera_SizeTest.java
permission/src/android/permission/cts/CameraPermissionTest.java
Testes do 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 pacote de testes de imagem (ITS)
Os testes do Camera Image Test Suite (ITS) se concentram na exatidã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
diretório
cts/apps/CameraITS
.
Cada teste fica em um subdiretório tests/scene#
.
Para mais informações sobre como configurar e executar os testes, consulte Camera ITS.
Para descrições de cenas e testes, consulte Testes de ITS da câmera.
Os testes do 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 ser reprovados e ainda contar como uma aprovação em
CtsVerifier
.
Os testes do ITS testam cenários que não são testados no CTS e são um componente importante do plano de teste do HAL 3.2.
Testes do Media Framework
Aprovação de todos os testes de mídia relacionados à câmera no MediaFrameworkTest.
Esses testes exigem que o mediaframeworktest.apk esteja instalado no dispositivo
Android. Será necessário make mediaframeworktest
e usar o adb
para instalar o .apk resultante. Confira alguns exemplos de comandos abaixo.
O caminho inicial para os testes do framework de mídia relacionado à câmera é:
platform/frameworks/base
Encontre o código-fonte dos testes aqui:
frameworks/base/media/tests/MediaFrameworkTest
Para configurar esses testes:
make mediaframeworktest
adb 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 de Media Framework
Para conferir todos os testes disponíveis:
adb shell pm list instrumentation
Isso vai gerar resultados parecidos com:
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 de execução de teste está armazenada.
Para executar uma única classe de testes, transmita o argumento
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Para executar apenas um método em uma classe de teste, anexe um sinal de número (#) e o
nome do método (neste caso, testConnectPro
) ao nome da classe, como este:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Testes funcionais das 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 da câmera. (por exemplo, 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
Este é 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, o resultado será semelhante a este:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Testes de desempenho de mídia
Este 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 vai comparar o uso de memória de forma diferente após 200 iterações. O teste vai falhar se a diferença for maior que 150 mil.
Execute o comando de teste:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
Confira uma saída mais detalhada em:
/sdcard/mediaMemOutput.txt
Testes de unidade de mídia
Os comandos para executar testes de unidade são 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
O objetivo do teste é sobrecarregar 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
Execute o app TestingCam manualmente com as seguintes verificações.
A origem do TestingCam está aqui: pdk/apps/TestingCamera/
Foco infinito com inclinação da câmera
Inicie o 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 imagens de objetos distantes (a pelo menos 10 m de distância) com a câmera apontada horizontalmente, para cima (perto da vertical) e para baixo (perto da vertical). Um exemplo de foto para cima pode ser folhas/ramos altos de uma árvore por baixo e um exemplo de foto de baixo, como a rua vista do telhado de um edifício. Em todos os casos, o objeto distante precisa estar nítido e em foco. Salve e confira as imagens na visualização de galeria para aumentar o zoom e inspecionar a nitidez com mais facilidade.
Para que uma câmera com um atuador VCM seja aprovada nesse teste, ela exigirá um sistema de controle de 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 calibração confiável de fábrica da posição de infinito da lente.
Testes manuais da Cam2
O app TestingCam2 precisa ser executado manualmente, com as seguintes verificações
realizadas. A origem do TestingCam2 está aqui: pdk/apps/TestingCamera2/
Captura de JPEG
Inicie o TestingCam2 e pressione o botão JPEG. A imagem que aparece à direita do visor precisa ser igual ao visor, inclusive com a mesma orientação.