Liste de contrôle des tests HAL de la caméra

Ce document répertorie tous les tests disponibles pour évaluer la couche d'abstraction matérielle (HAL) de la caméra Android. Il est destiné aux fabricants d'équipement d'origine (OEM) et aux fournisseurs de processeurs d'application (AP) afin qu'ils puissent garantir une mise en œuvre correcte de la caméra HAL avec un minimum de défauts. Bien qu'il s'agisse d'un ajout volontaire à la suite de tests de compatibilité Android (CTS), il augmente considérablement la couverture des tests de caméra et identifiera certainement les bogues potentiels.

En réussissant ces tests, les OEM valident s'ils ont correctement intégré les interfaces de la couche d'abstraction matérielle (HAL) 3 de la caméra Android. Lorsqu'elle est conforme à tous les éléments de la liste de contrôle, une implémentation de périphérique peut être considérée comme complète en ce qui concerne les interfaces Android Camera HAL. Cela permettra à son tour à un appareil de prendre correctement en charge le package android.hardware.camera2 sur lequel les applications de caméra s'appuient.

Spécification de la caméra HAL3

La spécification Android Camera HAL3 est la source d'informations faisant autorité sur ce que les appareils doivent satisfaire. cette page fournit un résumé de tous les tests qui peuvent être utilisés comme liste de contrôle. Les implémenteurs de Camera HAL (par exemple, les fournisseurs d'AP) doivent parcourir la spécification Camera HAL3 ligne par ligne et s'assurer que leurs appareils s'y conforment.

La spécification HAL actuelle est définie dans ces fichiers dans le kit de développement de plate-forme Android générique Android 5.0 et versions ultérieures :

Types de test de caméra

Voici les principaux types de tests disponibles pour la dernière caméra Android ainsi que les références aux instructions associées ci-dessous :

Tous ces types de tests sont décrits en détail ci-dessous. Ces tests sont présentés dans l'ordre chronologique dans lequel les OEM sont censés les exécuter.

Par exemple, si un appareil échoue aux tests natifs, il échouera certainement aux tests suivants de la suite de tests de compatibilité (CTS). Et si un appareil échoue au CTS, il est peu utile de passer à l'Image Test Suite (ITS). Nous vous recommandons de traiter les échecs dans chaque type de test avant de passer à la prochaine série de tests.

Tests de la suite de tests du fournisseur (VTS)

L'Android Vendor Test Suite (VTS) est une suite de tests qui fonctionne au niveau de l'interface HIDL. Pour plus d'informations sur l'utilisation de VTS, consultez Vendor Test Suite .

Tests de la suite de tests de compatibilité (CTS)

Les tests Camera Android Compatibility Test Suite (CTS) se concentrent sur la compatibilité des appareils. Pour plus d'informations sur la configuration d'un environnement de test, voir Configuration de CTS .

Le chemin de départ pour les tests CTS de la caméra est : platform/cts .

Lors de l'exécution de la caméra CTS pour les appareils prenant en charge les caméras externes (telles que les webcams USB), vous devez avoir un appareil branché lors de l'exécution de CTS, sinon les tests échoueront automatiquement. Voici des exemples de caméras externes : Logitech HD Pro Webcam C920 et Microsoft LifeCam HD-3000 .

Voir l' introduction de CTS et ses sous-pages pour des instructions générales sur l'exécution de CTS.

Tests CTS pour l'API android.hardware.Camera

Retrouvez ces tests caméra sous 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

Tests CTS pour l'API android.hardware.camera2

Retrouvez ces tests caméra sous cts/tests/tests/ :

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

Tests de la caméra CTS Verifier

Retrouvez ces tests de caméra sous : cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Tests de la suite de tests d'images (ITS)

Les tests Camera Image Test Suite (ITS) se concentrent sur l'exactitude de l'image. Pour effectuer les tests, exécutez les scripts Python sur un poste de travail avec l'appareil Android connecté via USB.

L'infrastructure et les tests Camera ITS se trouvent dans le répertoire cts/apps/CameraITS . Chaque test réside dans un sous-répertoire tests/scene # .

Pour configurer l'environnement de test, exécutez :
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh

Pour plus d'informations sur la configuration et l'exécution des tests, consultez le fichier PDF CameraITS dans cts/apps/CameraITS . Voir tutorial.py dans le sous-répertoire tests pour un guide sur la façon d'utiliser les scripts.

Les tests ITS nécessitent un environnement Linux. Pour plus de détails sur les versions Python spécifiques requises pour exécuter les tests ITS, consultez le fichier PDF CameraITS de la version ou également les notes de version Android 12 pour Android 12.

La configuration recommandée pour les scènes statiques est décrite dans Camera ITS-in-a-box . La configuration recommandée pour la scène sensor_fusion est décrite dans le Guide de démarrage rapide de Sensor Fusion Box .

Pour exécuter ITS manuellement, préparez un environnement physique simple avec une cible spécifique et réutilisable telle qu'un mur blanc, une carte grise et une lampe de bureau. Montez l'appareil Android sur un trépied et exécutez les scripts pour tester les fonctions de l'appareil photo. La plupart des tests sont réussis ou échoués, mais certains offrent des métriques.

Ces scripts testent des scénarios qui ne sont pas testés dans CTS et constituent un élément important du plan de test HAL 3.2.

Les tests ITS réussissent ou échouent. Tous les tests obligatoires dans chaque dossier de scène doivent réussir. Les tests qui ne sont pas obligatoires peuvent échouer et compter toujours comme une réussite dans CtsVerifier .

Pour les descriptions de scènes et de tests, voir Tests ITS de la caméra .

Tests du cadre multimédia

Passez tous les tests multimédias liés à la caméra dans MediaFrameworkTest. Veuillez noter que ces tests nécessitent que mediaframeworktest.apk soit installé sur l'appareil Android. Vous devrez make mediaframeworktest puis utiliser adb pour installer le .apk résultant. Des exemples de commandes sont inclus ci-dessous.

Le chemin de départ pour les tests de framework multimédia liés à la caméra est : platform/frameworks/base

Retrouvez le code source des tests ici : frameworks/base/media/tests/MediaFrameworkTest

Pour configurer ces tests :

make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk

Où la variable de name représente le répertoire contenant le produit du fournisseur.

Retrouvez tous les tests dans le répertoire suivant ou ses sous-répertoires :

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest

Chaque sous-répertoire représente une classe de tests :

  • functional/
  • integration/
  • performance/
  • power/
  • stress/
  • unit/

Exécution des tests de Media Framework

Pour voir tous les tests disponibles :

adb shell pm list instrumentation

Cela donnera des résultats ressemblant à :

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)

Identifiez et extrayez le composant (entre instrumentation: et (target=com.android.mediaframeworktest) de chaque ligne de test. Le composant est composé du nom du package cible ( com.android.mediaframeworktest ) et du nom du testeur ( MediaFramework TestRunner MediaFramework TestRunner ).

Par exemple:

com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner

Vous pouvez ensuite passer chaque composant à adb shell am instrument comme ceci :

adb shell am instrument -w component.name

component.name est égal à la valeur extraite ci-dessus. Par exemple:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Veuillez noter que bien que le chemin de classe soit le package Java + le nom de la classe, le package d'instrumentation n'est pas nécessairement le même que le package Java. Assurez-vous d'utiliser le package AndroidManifest.xml lors de la concaténation du nom du composant, et non le package Java dans lequel réside la classe Test Runner.

Pour exécuter une seule classe de tests, passez la classe -e argumentation, comme ceci :

adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Pour exécuter une seule méthode dans une classe de test, ajoutez un signe dièse (#) et le nom de la méthode (dans ce cas, testConnectPro ) au nom de la classe, comme ceci :

adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Tests fonctionnels des paramètres multimédias

Voici un exemple d'exécution d'un test fonctionnel. Ce test vérifie la fonctionnalité de base de différentes combinaisons de paramètres de caméra. (c.-à-d. Flash, exposition, WB, scène, taille de l'image et géoTag)

Exécutez la commande de 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

Tests d'intégration multimédia

Voici un exemple d'exécution d'un test d'intégration, dans ce cas mediaframeworktest/integration/CameraBinderTest.java et mediaframeworktest/CameraStressTestRunner.java :

adb  shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'

En cas de succès, cela se traduit par une sortie ressemblant à :

-----

com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328

OK (11 tests)

-----

Tests de performance des médias

Ce test de mémoire de prévisualisation ouvrira et publiera la prévisualisation de la caméra 200 fois. Dans chaque 20 itérations, l'instantané de ps mediaserver sera enregistré et il comparera l'utilisation de la mémoire différente après 200 itérations. Le test échouera si la différence est supérieure à 150kM.

Exécutez la commande de test :

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

Une sortie plus détaillée peut être trouvée dans : /sdcard/mediaMemOutput.txt

Tests unitaires des médias

Les commandes pour exécuter des tests unitaires sont toutes similaires. Par exemple, pour CameraMetadataTest.java, la commande serait :

adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'

Tests de résistance des médias

Ce test consiste à stresser la capture d'image de la caméra et l'enregistrement vidéo.

Exécutez la commande de test :

adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner

Tous les tests doivent réussir.

Tests manuelsTests de la caméra

L'application TestingCam doit être exécutée manuellement avec les vérifications suivantes effectuées. La source de TestingCam est ici : pdk/apps/TestingCamera/

Mise au point à l'infini avec inclinaison de la caméra

Démarrez TestingCam, activez l'aperçu et assurez-vous que le mode de mise au point automatique est réglé sur l'infini. À l'aide du bouton Prendre une photo , capturez des photos de sujets distants (à au moins 10 m) avec l'appareil photo pointé horizontalement, vers le haut (proche de la verticale) et vers le bas (proche de la verticale) ; un exemple de prise de vue vers le haut pourrait être les feuilles/branches hautes d'un arbre vues du dessous et un exemple de prise de vue vers le bas pourrait être la rue vue depuis le toit d'un immeuble. Dans tous les cas, le sujet éloigné doit être net et net. Enregistrez et visualisez les prises de vue dans la galerie afin de pouvoir zoomer et inspecter la netteté plus facilement.

Notez que pour qu'une caméra avec un actionneur VCM réussisse ce test, elle nécessitera soit un système de contrôle AF en boucle fermée, soit une sorte de correction SW basée sur l'utilisation des données de l'accéléromètre pour déterminer l'orientation de la caméra. Un étalonnage fiable en usine de la position à l'infini de l'objectif sera également nécessaire.

Tests manuels TestingCam2

L'application TestingCam2 doit être exécutée manuellement, avec les vérifications suivantes effectuées. La source de TestingCam2 est ici : pdk/apps/TestingCamera2/

Capture JPEG

Démarrez TestingCam2 et appuyez sur le bouton JPEG . L'image qui apparaît à droite de l'image du viseur doit être identique au viseur, y compris avoir la même orientation.