Tester la couche d'abstraction matérielle de la caméra

Cette page liste tous les tests disponibles pour évaluer la couche d'abstraction matérielle (HAL, Hardware Abstraction Layer) de l'appareil photo Android. Il est destiné aux fabricants d'équipement d'origine (OEM) et aux fournisseurs de processeurs d'application (AP) afin qu'ils puissent s'assurer de la bonne implémentation de la HAL de l'appareil photo 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 l'appareil photo et permettra certainement d'identifier les bugs potentiels.

En réussissant ces tests, les OEM valident l'intégration correcte des interfaces de la couche d'abstraction matérielle (HAL) 3 de l'appareil photo Android. Lorsqu'une implémentation d'appareil est conforme à tous les éléments de la checklist, elle peut être considérée comme complète en ce qui concerne les interfaces Android Camera HAL. Cela permettra à un appareil de prendre correctement en charge le package android.hardware.camera2 sur lequel les applications d'appareil photo sont basées.

Spécifications de la caméra HAL3

La spécification Android Camera HAL3 est la source d'informations de référence sur les exigences que les appareils doivent respecter. Cette page fournit un récapitulatif de tous les tests qui peuvent être utilisés comme checklist. Les implémenteurs de l'HAL de l'appareil photo (par exemple, les fournisseurs d'AP) doivent examiner la spécification HAL3 de l'appareil photo ligne par ligne et s'assurer que leurs appareils y sont conformes.

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

Types de tests de caméras

Voici les principaux types de tests disponibles pour la dernière caméra Android, ainsi que des 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 CTS (Compatibility Test Suite) suivants. Si un appareil échoue au CTS, il est inutile de passer à la suite de tests d'image (ITS). Nous vous recommandons de résoudre les échecs de chaque type de test avant de passer à la série de tests suivante.

Tests VTS (Vendor Test Suite)

La suite de tests du fournisseur Android (VTS) est une suite de tests qui fonctionne au niveau de l'interface HIDL. Pour en savoir plus sur l'utilisation de VTS, consultez Vendor Test Suite.

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

Les tests de la suite de tests de compatibilité (CTS) Android pour l'appareil photo sont axés sur la compatibilité des appareils. Pour savoir comment configurer un environnement de test, consultez Configurer CTS.

Le chemin de démarrage des tests CTS de l'appareil photo est le suivant : platform/cts.

Lorsque vous exécutez le CTS de l'appareil photo pour les appareils compatibles avec les caméras externes (telles que les webcams USB), vous devez brancher un appareil lorsque vous exécutez le CTS, sinon les tests échoueront automatiquement. Voici quelques exemples de caméras externes : Logitech HD Pro Webcam C920 et Microsoft LifeCam HD-3000.

Consultez l'introduction au CTS et ses sous-pages pour obtenir des instructions générales sur l'exécution du CTS.

Tests CTS pour l'API android.hardware.Camera

Vous trouverez ces tests de caméras 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

Vous trouverez ces tests de caméras sous cts/tests/tests/ :

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

Tests de l'appareil photo CTS Verifier

Vous trouverez ces tests de caméras sous : cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

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

Les tests de la suite de tests d'image de l'appareil photo (ITS) se concentrent sur la correction des images. Pour effectuer les tests, exécutez les scripts Python sur une station de travail avec l'appareil Android connecté via USB.

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

Pour savoir comment configurer et exécuter les tests, consultez ITS de la caméra.

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

Les tests ITS sont soit réussis, soit échoués. Tous les tests obligatoires dans chaque dossier de scène doivent réussir. Les tests non obligatoires peuvent échouer et être quand même considérés comme réussis 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 framework multimédia

Réussissez tous les tests multimédias liés à l'appareil photo dans MediaFrameworkTest. Veuillez noter que ces tests nécessitent l'installation de mediaframeworktest.apk sur l'appareil Android. Vous devrez make mediaframeworktest, puis utiliser adb pour installer le fichier .apk obtenu. Des exemples de commandes sont inclus ci-dessous.

Le chemin de départ pour les tests du framework multimédia lié à l'appareil photo est le suivant : platform/frameworks/base

Vous trouverez 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 name représente le répertoire contenant le produit du fournisseur.

Recherchez 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écuter des tests Media Framework

Pour afficher tous les tests disponibles :

adb shell pm list instrumentation

Vous obtiendrez des résultats semblables à ceux-ci :

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 lanceur de test (MediaFrameworkTestRunner).

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 suit :

adb shell am instrument -w component.name

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

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

Veuillez noter que, bien que le chemin de classe soit le nom du 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 lorsque vous concaténez le nom du composant, et non le package Java dans lequel réside la classe du lanceur de test.

Pour exécuter une seule classe de tests, transmettez l'argument -e class , comme suit :

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

Pour n'exécuter qu'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 suit :

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 le fonctionnement de base de différentes combinaisons de paramètres de l'appareil photo. (par exemple, flash, exposition, balance des blancs, scène, taille de l'image et géolocalisation)

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 de contenu multimédia

Voici un exemple d'exécution d'un test d'intégration, en l'occurrence mediaframeworktest/integration/CameraBinderTest.java et mediaframeworktest/CameraStressTestRunner.java :

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

Si l'opération réussit, le résultat est semblable à celui-ci :

-----

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

OK (11 tests)

-----

Tests de performances multimédias

Ce test de mémoire d'aperçu ouvre et libère l'aperçu de la caméra 200 fois. À chaque série de 20 itérations, le snapshot de ps mediaserver sera enregistré et la différence d'utilisation de la mémoire sera comparée après 200 itérations. Le test échouera si la différence est supérieure à 150 km.

Exécutez la commande de test :

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

Vous trouverez des informations plus détaillées dans : /sdcard/mediaMemOutput.txt

Tests unitaires des blocs média

Les commandes permettant d'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 contrainte des contenus multimédias

Ce test vise à solliciter la capture d'images et l'enregistrement vidéo de l'appareil photo.

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 manuels des caméras

L'application TestingCam doit être exécutée manuellement et les vérifications suivantes doivent être effectuées. La source de TestingCam est disponible 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 autofocus est défini sur l'infini. À l'aide du bouton Prendre une photo, prenez des photos de sujets éloignés (à au moins 10 mètres) avec l'appareil photo pointé horizontalement, vers le haut (presque à la verticale) et vers le bas (presque à la verticale). Par exemple, vous pouvez prendre en photo les feuilles ou les branches d'un arbre vues d'en dessous, ou la rue vue du toit d'un bâtiment. Dans tous les cas, le sujet distant doit être net et mis au point. Enregistrez et affichez les photos dans la galerie pour pouvoir faire un zoom avant et examiner plus facilement la netteté.

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

Tests manuels Cam2

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

Capture JPEG

Démarrez TestingCam2, puis appuyez sur le bouton JPEG. L'image qui s'affiche à droite de l'image du viseur doit être identique à celle du viseur, y compris en termes d'orientation.