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 des caméras Android. Il est conforme à tous les éléments de la liste de contrôle, une mise en œuvre du dispositif peut être considéré complet par rapport aux interfaces HAL caméra Android. Ce sera à son tour permet un dispositif pour soutenir correctement le android.hardware.camera2 package que les applications caméra construire.

Spécification de la caméra HAL3

La caméra Android HAL3 spécification est la source d'informations sur les périphériques doivent satisfaire; cette page fournit un résumé de tous les tests qui peuvent ê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 passer en revue 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 (PDK) Android 5.0 et versions ultérieures génériques :

Types de test de caméra

Voici les principaux types de tests disponibles pour le dernier appareil photo 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 assurément aux tests suivants de la suite de tests de compatibilité (CTS). Et si un appareil échoue CTS, il est peu utile de procéder à 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 des fournisseurs (VTS)

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 VTS, voir Vendor Test Suite .

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

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

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

Lors de l'exécution de la caméra CTS pour les appareils qui prennent en charge les caméras externes (comme les webcams USB), vous devez avoir un appareil branché lors de l'exécution de CTS ou les tests échoueront automatiquement. Des exemples de caméras externes comprennent: Logitech HD Pro Webcam C920 et le HD-3000 LifeCam Microsoft .

Voir la mise en place CTS et ses sous - pages pour obtenir des instructions générales sur l' exécution CTS.

CTS teste la android.hardware.Camera API

Retrouvez ces tests de 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

CTS teste la android.hardware.camera2 API

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

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

Tests de 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.

La caméra de l'infrastructure et des tests sont situés dans le cts/apps/CameraITS répertoire. Chaque test réside dans un des tests/scene # sous - répertoire.

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 façon de mettre en place et exécuter les tests, consultez le CameraITS fichier PDF dans cts/apps/CameraITS . Voir tutorial.py dans les tests sous - répertoire 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 spécifiques Python nécessaires pour exécuter les essais ITS, consultez le CameraITS fichier PDF pour la libération ou encore les notes de version Android 12 pour Android 12.

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

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 sont un composant 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 mandatées peuvent échouer et comptent toujours comme un laissez - passer en CtsVerifier .

Pour obtenir une description de la scène et de test, voir Caméra ses tests .

Tests du cadre média

Réussissez tous les tests multimédias liés à la caméra 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 .apk résultant. Des exemples de commandes sont inclus ci-dessous.

Le chemin à partir des tests cadres de médias liés à l' appareil photo est: platform/frameworks/base - platform/frameworks/base

Trouver le code source pour les 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

Lorsque le name variable 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)

Identifier et extraire le composant (entre instrumentation: et (target=com.android.mediaframeworktest) à partir de chaque ligne de test Le composant est composé du nom du paquet cible (. com.android.mediaframeworktest ) et le nom de canal 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 alors passer chaque composant à adb shell am instrument comme ceci:

adb shell am instrument -w component.name

component.name est égale à 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 + nom de 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 de testeur.

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 dièse (#) signe 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 des mé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 geoTag)

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 des médias

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 performances des médias

Ce test de mémoire d'aperçu ouvrira et publiera l'aperçu 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 à 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

Plus sortie détaillée se trouve dans: /sdcard/mediaMemOutput.txt

Tests unitaires médias

Les commandes pour exécuter les 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 devraient réussir.

Tests manuels 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. Utilisation de la touche d'images Take, plans de capture de sujets éloignés (au moins 10 m) avec l'appareil photo vers l' horizontale, 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 hautes feuilles/branches d'un arbre vu du dessous et un exemple de prise de vue vers le bas pourrait être la rue vue depuis le toit d'un bâtiment. Dans tous les cas, le sujet éloigné doit être net et net. Enregistrez et affichez les prises de vue dans la vue 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 d'usine fiable de la position à l'infini de l'objectif sera également nécessaire.

Tests manuels de la 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émarrer TestingCam2, puis 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.