O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Lista de verificação de teste HAL da câmera

Este documento lista todos os testes disponíveis para avaliar a camada de abstração de hardware da câmera (HAL) da câmera Android. Destina-se a fabricantes de equipamentos originais (OEMs) e fornecedores de processadores de aplicativos (AP), para que eles possam garantir a implementação adequada da câmera HAL com defeitos mínimos. Embora seja uma adição voluntária ao Android Compatibility Test Suite (CTS), ele aumenta bastante a cobertura dos testes da câmera e certamente identificará possíveis erros.

Ao passar nesses testes, os OEMs validam se integraram adequadamente as interfaces da camada de abstração de hardware da câmera (HAL) 3 da câmera Android. Ao obedecer a 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. Por sua vez, isso permitirá que um dispositivo ofereça suporte adequado ao pacote android.hardware.camera2 que os aplicativos de câmera utilizam.

Especificação da câmera HAL3

A especificação da câmera Android HAL3 é a fonte autorizada 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. Os implementadores de câmera HAL (por exemplo, fornecedores de AP) devem passar pela especificação de câmera HAL3 linha por linha e garantir que seus dispositivos estejam em conformidade.

A especificação HAL atual é definida nesses arquivos no Android 5.0 e posterior Android Platform Development Kit (PDK) genérico:

Tipos de teste da câmera

Aqui estão os principais tipos de testes disponíveis para a câmera Android mais recente, além de referências às instruções associadas abaixo:

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 falhar nos testes nativos, 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 falhas em cada tipo de teste antes de prosseguir para o próximo conjunto de testes.

Testes do VTS (Vendor Test Suite)

O Android Vendor Test Suite (VTS) é um conjunto de testes que funciona no nível da interface HIDL. Para obter mais informações sobre o uso do VTS, consulte Vendor Test Suite .

Testes de Compatibility Test Suite (CTS)

Os testes do CTS (Camera Compatibility Test Suite) da câmera 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 os testes de câmera CTS é: platform/cts .

Ao executar o Camera CTS para dispositivos compatíveis com 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 Microsoft LifeCam HD-3000 .

Consulte a introdução do CTS e suas subpáginas para obter instruções gerais sobre a execução do CTS.

Testes CTS para a API android.hardware.Camera

Encontre estes 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 estes testes de câmera em cts/tests/tests/ :

  • hardware/src/android/hardware/camera2/cts/*
  • permission/src/android/permission/cts/Camera2PermissionTest.java

Testes da câmera do Verificador CTS

Encontre estes testes de câmera em: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Testes do Image Test Suite (ITS)

Os testes do ITS (Camera Image Test Suite) concentram-se na correção da imagem. Para executar 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 diretório cts/apps/CameraITS . Cada teste reside em um subdiretório tests/scene # .

Para configurar o ambiente de teste, execute:
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 do CameraITS em cts/apps/CameraITS . Consulte tutorial.py no subdiretório tests para obter um guia sobre como usar os scripts.

Os testes estáticos do 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 o 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 está descrita no Guia de início rápido da caixa de fusão do sensor .

Para executar o ITS manualmente, prepare um ambiente físico simples com um destino específico e reutilizável, como uma parede branca, um cartão cinza e uma lâmpada 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 é aprovada ou reprovada, 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 ITS são aprovados ou reprovados. Todos os testes obrigatórios em cada pasta de cena devem passar. Os testes que não são obrigatórios podem falhar e ainda contam como aprovação no CtsVerifier .

Testes da cena 0 à cena 4

Essas cenas representam grande parte dos testes 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.

Cena 5 testes

Os testes da cena 5 exigem que um difusor seja colocado em cima da câmera.

Testes de fusão de sensores

Os testes de fusão do sensor requerem movimento específico da câmera para testar a diferença de carimbo de data e hora entre a câmera e o giroscópio para aplicativos de AR e VR. Este teste é ignorado se nenhum giroscópio estiver incluído ou se o parâmetro REALTIME não estiver ativado. O teste sensor_fusion pode ser automatizado com a caixa de fusão do sensor .

Testes do Media Framework

Passe todos os testes de mídia relacionados à câmera no MediaFrameworkTest. Observe que esses testes exigem que o mediaframeworktest.apk esteja 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 os testes de estrutura de mídia relacionados à câmera é: platform/frameworks/base

Encontre o código fonte para os 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 name representa o diretório que contém o produto do fornecedor.

Localize todos os testes no seguinte diretório ou em seus 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/

Executando 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 MediaFramework TestRunner 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 o adb shell am instrument forma:

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 + 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 a classe do executor de teste reside.

Para executar uma única classe de testes, passe na classe -e argumento, assim:

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 (nesse caso, testConnectPro ) ao nome da classe, da seguinte maneira:

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. (por exemplo, Flash, exposição, WB, cena, tamanho da imagem e marca geográfica)

Execute o comando test:

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 resulta 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 por 200 vezes. Em cada 20 iterações, o instantâneo do ps mediaserver será gravado e 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 test:

adb shell am instrument -w -r  -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner

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 enfatizar 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 passar.

Testes manuaisCam tests

O aplicativo TestingCam deve ser executado manualmente, com as seguintes verificações. A fonte 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 fotos de assuntos distantes (a pelo menos 10 m de distância) com a câmera apontada horizontalmente, para cima (próximo à vertical) e para baixo (próximo à vertical); um exemplo do tiro para cima pode ser folhas / galhos altos de uma árvore por baixo e um exemplo do tiro 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 focado. Salve e visualize as fotos na galeria para poder ampliar e inspecionar a nitidez com mais facilidade.

Observe que, para que uma câmera com um atuador VCM seja aprovada neste teste, será necessário um sistema de controle AF de loop fechado ou será necessário algum tipo de correção do 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 infinita da lente.

Testes manuaisCam2 tests

O aplicativo TestingCam2 deve ser executado manualmente, com as seguintes verificações realizadas. 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 no visor deve ser igual à do visor, incluindo a mesma orientação.