Este documento lista todos os testes disponíveis para avaliar a camada de abstração de hardware da câmera do Android (HAL). Ele se destina a fabricantes de equipamento original (OEMs) e fornecedores de processadores de aplicativos (AP) para que possam garantir a implementação adequada do HAL da câmera com o mínimo de defeitos. Embora seja um acréscimo voluntário ao Android Compatibility Test Suite (CTS), ele aumenta muito a cobertura do teste da câmera e certamente identificará possíveis bugs.
Ao passar nesses testes, os OEMs validam se integraram adequadamente as interfaces da camada de abstração de hardware (HAL) 3 da câmera Android. Ao estar 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 Android. Isso, por sua vez, permitirá que um dispositivo suporte adequadamente o pacote android.hardware.camera2
no qual os aplicativos de câmera se baseiam.
Especificação da câmera HAL3
A especificação Android Camera HAL3 é a fonte oficial de informações sobre quais dispositivos devem atender; esta página fornece um resumo de todos os testes que podem ser usados como uma lista de verificação. Implementadores de HAL de câmera (por exemplo, fornecedores de AP) devem seguir a especificação de HAL3 de câmera linha por linha e garantir que seus dispositivos estejam em conformidade com ela.
A especificação HAL atual é definida nestes arquivos no Android 5.0 e posterior Android Platform Development Kit (PDK) genérico:
- Interface e especificações do HAL 3.x da câmera :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Especificações de metadados do Camera HAL 3.x :
system/media/camera/docs/docs.html
- Interface e especificações de formato de pixel HAL :
system/core/libsystem/include/system/graphics.h
Tipos de teste de câmera
Aqui estão os principais tipos de testes disponíveis para a câmera Android mais recente, juntamente com referências às instruções associadas abaixo:
- Vendor Test Suite (VTS) : Testes que testam diretamente a interface HAL da câmera
- Compatibility Test Suite (CTS) : Testes Android padrão e automatizados para garantir a compatibilidade do dispositivo - consulte a introdução do CTS e a Visão geral da Federação de Comércio
- Conjunto de teste de imagem (ITS) : execute testes manualmente para garantir a correção da imagem - consulte os arquivos
README
nível superior e específicos de teste etutorial.py
para obter instruções de configuração - Testes manuais do TestingCam : execute a partir da fonte em
pdk/apps/TestingCamera/
- Testes manuais TestingCam2.1 : execute a partir da fonte 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 se espera que os OEMs os executem.
Por exemplo, se um dispositivo falhar nos testes nativos, ele certamente falhará nos testes subsequentes do Compatibility Test Suite (CTS). E se um dispositivo falhar no CTS, haverá pouca utilidade em prosseguir para o Image Test Suite (ITS). Recomendamos abordar as falhas em cada tipo de teste antes de prosseguir para o próximo conjunto de testes.
Testes do Vendor Test Suite (VTS)
O Android Vendor Test Suite (VTS) é um conjunto de testes que funciona no nível da interface HIDL. Para obter mais informações sobre como usar o VTS, consulte Vendor Test Suite .
Testes do Compatibility Test Suite (CTS)
Os testes do Camera Android Compatibility Test Suite (CTS) se concentram na compatibilidade do dispositivo. Para obter informações sobre como configurar um ambiente de teste, consulte Configurando o CTS .
O caminho inicial para testes de câmera CTS é: platform/cts
.
Ao executar o CTS da câmera para dispositivos que suportam câmeras externas (como webcams USB), você deve ter um dispositivo conectado ao executar o CTS ou os testes falharão automaticamente. Exemplos de câmeras externas incluem: Logitech HD Pro Webcam C920 e a Microsoft LifeCam HD-3000 .
Consulte a introdução do CTS e suas subpáginas para obter 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 verificador CTS
Encontre esses testes de câmera em: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
Testes de conjunto de teste de imagem (ITS)
Os testes do Camera Image Test Suite (ITS) 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 via USB.
A infraestrutura e os testes de ITS da câmera estão localizados no diretório cts/apps/CameraITS
. Cada teste reside em um subdiretório tests/scene #
.
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r CtsVerifier.apk
cd CameraITS
source build/envsetup.sh
Para obter mais informações sobre como configurar e executar os testes, consulte o arquivo PDF CameraITS
em cts/apps/CameraITS
. Consulte tutorial.py
no subdiretório de tests
para obter um guia sobre como usar os scripts.
Os testes estáticos ITS (cenas 0-5) podem ser executados com qualquer sistema operacional com o ambiente Python 2.7 necessário. No entanto, o teste sensor_fusion
com a Sensor Fusion Box deve ser executado com o sistema operacional Linux.
A configuração recomendada para as cenas 0-4 é descrita em Câmera ITS-in-a-box . A configuração recomendada para a cena sensor_fusion é descrita no Guia de início rápido da Sensor Fusion Box .
Para executar o ITS manualmente, prepare um ambiente físico simples com um alvo específico e reutilizável, como uma parede branca, um cartão cinza e uma luminária de mesa. Monte o dispositivo Android em um tripé e execute os scripts para testar as funções da câmera. A maioria dos testes passa ou falha, mas alguns oferecem métricas.
Esses scripts 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.
Os testes de ITS são aprovados ou reprovados. Todos os testes obrigatórios em cada pasta de cena devem ser aprovados. Os testes que não são obrigatórios podem falhar e ainda contar como uma aprovação no CtsVerifier
.
Testes de cena 0 a cena 4
Essas cenas representam uma grande parte dos testes de ITS e são incluídas como arquivos PDF na pasta de scene
. Para automatizar esses testes, use o sistema Camera ITS-in-a-box .
- Cena 0: não requer configuração.
- Cena 1: requer um cartão cinza.
- Cena 2: requer uma cena de rosto.
- Cena 3: gráfico ISO12233.
- Cena 4: cena personalizada com um círculo dentro de um quadrado.
Testes de cena 5
Os testes da cena 5 exigem que um difusor seja colocado na parte superior da câmera.
Testes de fusão de sensor
Os testes de fusão de sensor requerem um movimento específico da câmera para testar a diferença do carimbo de data / hora entre a câmera e o giroscópio para aplicações de AR e VR. Este teste é ignorado se nenhum giroscópio for incluído ou se o parâmetro REALTIME
não estiver habilitado. O teste sensor_fusion
pode ser automatizado com a Sensor Fusion Box .
Testes de estrutura de mídia
Passe em todos os testes de mídia relacionados à câmera no MediaFrameworkTest. Observe que esses testes exigem que o mediaframeworktest.apk seja instalado no dispositivo Android. Você precisará make mediaframeworktest
e então usar adb para instalar o .apk resultante. Comandos de exemplo estão incluídos abaixo.
O caminho inicial para os testes de framework de mídia relacionados a câmeras é: 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
Onde a variável de name representa o diretório que contém 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/
Execução de testes do Media Framework
Para ver todos os testes disponíveis:
adb shell pm list instrumentation
Isso produzirá 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 MediaFramework TestRunner
teste ( MediaFramework TestRunner
MediaFramework TestRunner
).
Por exemplo:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Você pode então passar cada componente para adb shell am instrument
assim:
adb shell am instrument -w component.name
Onde component.name
é igual ao valor extraído acima. Por exemplo:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Observe que, embora o caminho da classe seja o pacote Java + o nome da classe, o pacote de instrumentação não é necessariamente o mesmo que o pacote Java. Certifique-se de usar o pacote AndroidManifest.xml ao concatenar o nome do componente, não o pacote Java no qual reside a classe do executor de teste.
Para executar uma única classe de testes, passe na classe -e
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 testConnectPro
(#) e o nome do método (neste caso, testConnectPro
) ao nome da classe, assim:
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
Aqui está um exemplo de execução de um teste funcional. Este teste verifica a funcionalidade básica de diferentes combinações de configurações da 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
Aqui está 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 desempenho de mídia
Este teste de memória de visualização será aberto e liberará a visualização da câmera 200 vezes. A cada 20 iterações, o snapshot do ps mediaserver será gravado e ele irá comparar o uso de memória diferente após 200 iterações. O teste 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
Este teste é para estressar a captura de imagem da câmera e 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 passar.
Testes manuais do TestingCam
O aplicativo TestingCam deve ser executado manualmente com as seguintes verificações realizadas. A fonte para 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 para o infinito. Usando o botão Tirar foto , capture fotos de assuntos distantes (pelo menos 10m de distância) com a câmera apontada horizontalmente, para cima (perto da vertical) e para baixo (perto da vertical); um exemplo do plano para cima pode ser folhas / galhos altos de uma árvore por baixo e um exemplo do plano para baixo pode ser a rua vista do telhado de um edifício. Em todos os casos, o assunto distante deve 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.
Observe que para uma câmera com um atuador VCM passar neste 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. A calibração confiável de fábrica da posição infinita da lente também será necessária.
Testes manuais TestingCam2
O aplicativo TestingCam2 deve ser executado manualmente, com as seguintes verificações realizadas. A fonte para 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 visor, inclusive com a mesma orientação.