Esta página lista todos os testes disponíveis para avaliar a câmera do Android camada de abstração de hardware (HAL). Ele é destinado ao equipamento original fabricantes de equipamentos e aplicativos os fornecedores de processadores de software (AP) podem assegurar a implementação correta da câmera HAL com defeitos mínimos. Embora essa seja uma adição voluntária aos recursos Teste de Compatibilidade do Android (CTS), aumenta muito a cobertura de teste da câmera e identificará possíveis bugs.
Ao serem aprovados nesses testes, os OEMs validam
se eles integraram corretamente
hardware da câmera
com três interfaces de camada de abstração (HAL, na sigla em inglês). Ao seguir todos os itens do
uma implementação de dispositivo pode ser considerada completa com relação
às interfaces HAL da câmera do Android. Isso permitirá que o dispositivo
oferecer suporte adequado aos
o pacote android.hardware.camera2
que
os apps de câmera se baseiam.
Especificação da câmera HAL3
Especificação da Android Camera HAL3 é a fonte autorizada informações sobre o que os dispositivos precisam satisfazer; esta página oferece um resumo de todos os testes que podem ser usados como uma lista de verificação. Implementadores de HAL da câmera (por exemplo, AP fornecedores) devem passar pela especificação da câmera HAL3 linha por linha e garantir que os dispositivos delas estejam em conformidade com ela.
A especificação atual da HAL é definida nesses arquivos do Kit de desenvolvimento da plataforma Android (PDK, na sigla em inglês) genérico 5.0 e mais recente:
- Interface e especificações da câmera HAL 3.x:
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ções do formato de pixel HAL:
system/core/libsystem/include/system/graphics.h
Tipos de teste da câmera
Estes são os principais tipos de teste disponíveis para a câmera do Android mais recente junto com referências às instruções associadas abaixo:
- Conjunto de testes de fornecedor (VTS):testes que testam diretamente o interface HAL da câmera
- Conjunto de teste de compatibilidade (CTS): Android padrão e automatizado para garantir a compatibilidade dos dispositivos. Para mais detalhes, consulte Conjunto de teste de compatibilidade e Trade Federation Visão geral.
- Image Test Suite (ITS):executado manualmente para garantir a precisão da imagem. Para mais detalhes, consulte Camera ITS.
- Testes manuais da câmera:
Executar da origem em
pdk/apps/TestingCamera/
- Teste manualCam2.1
testes:executar da origem em
pdk/apps/TestingCamera2/
Todos esses tipos de testes são descritos em detalhes abaixo. Esses testes são apresentados na ordem cronológica em que os OEMs devem ser executados para resolvê-los com rapidez.
Por exemplo, se um dispositivo falhar nos testes nativos, ele certamente vai falhar testes subsequentes do conjunto de teste de compatibilidade (CTS). E se um dispositivo falhar no CTS, há pouco uso em prosseguir para o Pacote de testes de imagem (ITS). Recomendamos resolver falhas em cada tipo de teste antes de prosseguir para o próximo conjunto de provas.
Testes do pacote de testes de fornecedor (VTS, na sigla em inglês)
O Android Vendor Test Suite (VTS) é um pacote de testes que funciona no nível da interface HIDL. Para mais informações sobre como usar o VTS, consulte Pacote de testes de fornecedor.
Testes do conjunto de teste de compatibilidade (CTS)
Os testes do conjunto de teste de compatibilidade do Android (CTS) da câmera focam no dispositivo compatibilidade. 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 compatíveis com câmeras externas (como webcams USB), é preciso ter um dispositivo conectado ao executar o CTS ou para os testes vai falhar automaticamente. Exemplos de câmeras externas: Logitech HD Pro Webcam C920 e a Microsoft LifeCam HD-3000.
Consulte a CTS introdução 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.java
hardware/src/android/hardware/cts/CameraGLTest.java
hardware/src/android/hardware/cts/Camera_SizeTest.java
permission/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 Image Test Suite (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 via USB.
A infraestrutura e os testes do Camera ITS estão localizados no
cts/apps/CameraITS
.
Cada teste reside 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 ITS são aprovados ou reprovados. Todos os testes obrigatórios em cada pasta de cena precisam ser aprovados.
Testes não obrigatórios podem falhar e ainda contar como aprovados.
CtsVerifier
:
Cenários de teste de ITS que não são testados no CTS e são uma do plano de testes da HAL 3.2.
Testes do Media Framework
Ser aprovado em todos os testes de mídia relacionados à câmera no MediaFrameworkTest. Não se esqueça
esses testes exigem que o mediaframeworktest.apk esteja instalado no Android
dispositivo. Você precisará make mediaframeworktest
e usar o adb
para instalar o .apk resultante. Confira alguns exemplos de comandos 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 mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
Em que a variável name representa o contendo o produto do fornecedor.
Encontre todos os testes no seguinte diretório ou subdiretórios:
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 ver 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)
para cada linha de teste.
O componente é composto pelo nome do pacote de destino.
(com.android.mediaframeworktest
) e o nome do executor de testes
MediaFramework
).
Por exemplo:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Você pode transmitir cada componente para adb shell am instrument
da seguinte forma
Portanto:
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
Enquanto o caminho da classe for o pacote Java + nome da classe, o não é necessariamente igual ao pacote Java. Marca use o pacote AndroidManifest.xml ao concatenar o componente , e não o pacote Java em que a classe do executor de testes reside.
Para executar uma única classe de testes, passe o argumento
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Para executar um único método em uma classe de teste, anexe um sinal de cerquilha (#) e o
nome do método (neste caso, testConnectPro
) ao nome da classe, da seguinte forma:
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
Este é um exemplo de execução de um teste funcional. Esse teste verifica os dados funcionalidade 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, que 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 bem-sucedido, o resultado será uma saída semelhante a:
----- 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 para 200 vezes. A cada 20 iterações, será gravado o snapshot de "ps mediaserver" e vai comparar o uso da memória de maneira diferente após 200 iterações. O teste vai falha se a diferença for maior que 150 kM.
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 tem como objetivo estressar a captura de imagem 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 devem ser aprovados.
Testes manuais da TestingCam
Execute o app TestingCam manualmente com as verificações a seguir.
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 confira se o modo de autofoco está definido como infinito. Use o botão Tirar foto para capturar imagens da 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 a imagem para cima poderia ser folhas/galhos altos de uma árvore por baixo e uma exemplo de uma cena em declive poderia ser a rua vista do telhado de um edifício. Em todos os casos, o objeto distante deve estar nítido e focado. Salvar e visualizar as imagens na visualização de galeria, para que você possa aumentar o zoom e inspecionar a nitidez com mais facilidade.
Para que uma câmera com um atuador VCM seja aprovada nesse teste, será necessário um sistema de controle AF de loop fechado ou precisará de algum tipo 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 de fábrica confiável da posição de infinito da lente.
Testes manuais do TestingCam2
O app TestingCam2 precisa ser executado manualmente, com as seguintes verificações
realizada. A fonte do TestingCam2 está aqui: pdk/apps/TestingCamera2/
Captura JPEG
Inicie o TestingCam2 e pressione o botão JPEG. A imagem que aparece à direita da imagem do visor deve ter a mesma aparência do com a mesma orientação.