Liste de contrôle pour les tests HAL de la caméra

Cette page 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 du HAL de la caméra 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 bugs 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, la mise en œuvre d'un appareil 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 en charge correctement le package android.hardware.camera2 sur lequel les applications d'appareil photo 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 pouvant être utilisés comme liste de contrôle. Les responsables de la mise en œuvre de Camera HAL (par exemple les fournisseurs de points d'accès) 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 générique de développement de plate-forme Android (PDK) Android 5.0 et versions ultérieures :

Types de tests 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 constructeurs OEM sont censés les exécuter.

Par exemple, si un appareil échoue aux tests natifs, il échouera assurément aux tests CTS (Compatibility Test Suite) suivants. Et si un appareil échoue au CTS, il est inutile de passer à l'Image Test Suite (ITS). Nous vous recommandons de remédier aux échecs dans chaque type de test avant de passer à la série de tests suivante.

Tests de la suite de tests des fournisseurs (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 CTS (Camera Android Compatibility Test Suite) 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 .

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

Consultez l' introduction de CTS et ses sous-pages pour obtenir 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 plus d'informations sur la configuration et l'exécution des tests, voir Camera ITS .

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

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 être quand même considérés comme une réussite dans CtsVerifier .

Les tests ITS 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.

Tests du cadre multimédia

Réussissez 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 mettre en place ces tests :

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

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

Retrouvez l'ensemble des 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écuter des tests 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 de l'exécuteur de test ( 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 transmettre 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 même si le chemin de classe est 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 du programme d'exécution de tests.

Pour exécuter une seule classe de tests, passez la classe -e argument, 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'est-à-dire Flash, exposition, WB, scène, taille de l'image et géoTag)

Exécutez la commande 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 mé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 donne un résultat ressemblant à :

-----

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

OK (11 tests)

-----

Tests de performances des médias

Ce test de mémoire d'aperçu s'ouvrira et publiera l'aperçu de la caméra 200 fois. Toutes les 20 itérations, l'instantané de ps mediaserver sera enregistré et comparera l'utilisation de la mémoire différente après 200 itérations. Le test échouera si la différence est supérieure à 150 km.

Exécutez la commande test :

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

Des résultats plus détaillés peuvent être trouvés 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 à mettre l'accent sur la capture d'image de la caméra et l'enregistrement vidéo.

Exécutez la commande test :

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

Tous les tests devraient réussir.

Tests manuelsTests de 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 infinie 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 éloignés (à 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 de hautes feuilles/branches d'un arbre vues de 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 affichez les photos dans la vue Galerie afin de pouvoir zoomer et inspecter la netteté plus facilement.

Notez que pour qu'un appareil photo équipé d'un actionneur VCM réussisse ce test, il faudra soit un système de contrôle AF en boucle fermée, soit une sorte de correction logicielle basée sur l'utilisation des données de l'accéléromètre pour déterminer l'orientation de l'appareil photo. Un étalonnage fiable en usine de la position infinie de l’objectif sera également nécessaire.

Tests manuelsTests Cam2

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 apparaître de la même manière que le viseur, notamment en ayant la même orientation.