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 (HAL) da câmera Android. Destina-se a fabricantes de equipamentos originais (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 esta seja uma adição voluntária ao Android Compatibility Test Suite (CTS), ela aumenta muito a cobertura do teste de câmera e certamente identificará possíveis bugs.

Ao passar nesses testes, os OEMs validam se integraram corretamente as interfaces de camada de abstração de hardware (HAL) 3 da câmera Android. Ao atender a todos os itens da lista de verificação, a implementação de um dispositivo pode ser considerada completa com relação às interfaces Android Camera HAL. 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 o que os dispositivos devem satisfazer; esta página fornece um resumo de todos os testes que podem ser usados ​​como uma lista de verificação. Os implementadores de Camera HAL (por exemplo, fornecedores de AP) devem seguir a especificação Camera HAL3 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:

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:

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, há 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 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 Conjunto de Testes de Compatibilidade (CTS)

Os testes do Camera Android Compatibility Test Suite (CTS) concentram-se 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 CTS da câmera é: 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 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 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) concentram-se 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 diretório cts/apps/CameraITS . Cada teste reside em um subdiretório tests/scene # .

Para obter mais informações sobre como configurar e executar os testes, consulte Câmera ITS .

Para obter descrições de cenas e testes, consulte Testes ITS da câmera .

Os testes ITS passam ou falham. 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 contar como aprovados no 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

Passe em 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 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 à 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.

Encontre 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/

Executar 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 (between instrumentation: and (target=com.android.mediaframeworktest) de cada linha de teste. O componente é composto pelo nome do pacote de destino ( com.android.mediaframeworktest ) e o nome do executor de 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 da seguinte 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 igual ao 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 executora de teste.

Para executar uma única classe de testes, passe a 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 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 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 abrirá e liberará a visualização da câmera 200 vezes. A 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 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 da 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 manuaisTestes de câmera

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 como infinito. Usando o botão Tirar foto , capture fotos de assuntos distantes (pelo menos 10 m de distância) com a câmera apontada horizontalmente, para cima (próximo da vertical) e para baixo (próximo da vertical); um exemplo de tomada para cima pode ser folhas / galhos altos de uma árvore por baixo e um exemplo de tomada para baixo pode ser a rua vista do telhado de um prédio. Em todos os casos, o objeto distante deve estar nítido e em foco. Salve e visualize as fotos na visualização da galeria para que você possa ampliar e inspecionar a nitidez com mais facilidade.

Observe que, para uma câmera com um atuador VCM passar neste teste, será necessário 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 calibração confiável de fábrica da posição infinita da lente.

Testes manuaisCam2 testes

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 TestingCam2 e pressione o botão JPEG . A imagem que aparece à direita da imagem do visor deve aparecer igual ao visor, inclusive com a mesma orientação.

,

Este documento lista todos os testes disponíveis para avaliar a camada de abstração de hardware (HAL) da câmera Android. Destina-se a fabricantes de equipamentos originais (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 esta seja uma adição voluntária ao Android Compatibility Test Suite (CTS), ela aumenta muito a cobertura do teste de câmera e certamente identificará possíveis bugs.

Ao passar nesses testes, os OEMs validam se integraram corretamente as interfaces de camada de abstração de hardware (HAL) 3 da câmera Android. Ao atender a todos os itens da lista de verificação, a implementação de um dispositivo pode ser considerada completa com relação às interfaces Android Camera HAL. 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 o que os dispositivos devem satisfazer; esta página fornece um resumo de todos os testes que podem ser usados ​​como uma lista de verificação. Os implementadores de Camera HAL (por exemplo, fornecedores de AP) devem seguir a especificação Camera HAL3 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:

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:

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, há 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 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 Conjunto de Testes de Compatibilidade (CTS)

Os testes do Camera Android Compatibility Test Suite (CTS) concentram-se 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 CTS da câmera é: 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 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 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) concentram-se 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 diretório cts/apps/CameraITS . Cada teste reside em um subdiretório tests/scene # .

Para obter mais informações sobre como configurar e executar os testes, consulte Câmera ITS .

Para obter descrições de cenas e testes, consulte Testes ITS da câmera .

Os testes ITS passam ou falham. 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 contar como aprovados no 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

Passe em todos os testes de mídia relacionados à câmera em MediaFrameworkTest. Observe que esses testes exigem que o mediaframeworktest.apk esteja instalado no dispositivo Android. Você precisará make mediaframeworktest e 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 à 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.

Encontre 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/

Executar 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 (between instrumentation: and (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 do 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 da seguinte 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 igual ao 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 executora de teste.

Para executar uma única classe de testes, passe a 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 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 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 abrirá e liberará a visualização da câmera 200 vezes. A 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 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 da 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 manuaisTestes de câmera

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 como infinito. Usando o botão Tirar foto , tire fotos de objetos distantes (pelo menos 10 m de distância) com a câmera apontada horizontalmente, para cima (próximo da vertical) e para baixo (próximo da vertical); um exemplo de tomada para cima pode ser folhas / galhos altos de uma árvore por baixo e um exemplo de tomada para baixo pode ser a rua vista do telhado de um prédio. Em todos os casos, o objeto distante deve estar nítido e em foco. Salve e visualize as fotos na visualização da galeria para que você possa ampliar e inspecionar a nitidez com mais facilidade.

Observe que, para uma câmera com um atuador VCM passar neste teste, será necessário 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 infinita da lente.

Testes manuaisCam2 testes

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 TestingCam2 e pressione o botão JPEG . A imagem que aparece à direita da imagem do visor deve aparecer igual ao visor, inclusive com a mesma orientação.