Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Liste de contrôle du test 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), cela augmente considérablement la couverture des tests de caméra et identifiera certainement les bogues potentiels.

En réussissant ces tests, les OEM vérifient 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 par rapport aux interfaces HAL de la caméra Android. Cela permettra à son tour à un appareil de prendre en charge correctement le package android.hardware.camera2 sur lequel les applications de caméra s'appuient.

Spécifications 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 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 Android (PDK) générique Android 5.0 et ultérieur:

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 assurément aux tests CTS (Compatibility Test Suite) suivants. Et si un appareil échoue à CTS, il est peu utile de passer à 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 Vendor Test Suite (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 des tests CTS caméra est: platform/cts .

Lorsque vous exécutez la caméra CTS pour des périphériques prenant en charge des caméras externes (telles que des webcams USB), vous devez avoir un périphérique branché lors de l'exécution de CTS, sinon les tests échoueront automatiquement. Voici quelques exemples de caméras externes: la webcam Logitech HD Pro C920 et la 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 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

Tests CTS pour l'API android.hardware.camera2

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'image (ITS)

Les tests de 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 de 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 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 l'utilisation des scripts.

Les tests statiques ITS (scènes 0-5) peuvent s'exécuter avec n'importe quel système d'exploitation doté de l'environnement Python 2.7 requis. Cependant, le test sensor_fusion avec Sensor Fusion Box doit être exécuté avec le système d'exploitation Linux.

La configuration recommandée pour les scènes 0-4 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 réussissent ou échouent, mais certains offrent des mesures.

Ces scripts testent des scénarios qui ne sont pas testés dans CTS et constituent 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 obligatoires peuvent échouer et compter toujours comme une réussite dans CtsVerifier .

Tests de la scène 0 à la scène 4

Ces scènes représentent une grande partie des tests ITS et sont incluses sous forme de fichiers PDF dans le dossier des scene . Pour automatiser ces tests, utilisez le système Camera ITS-in-a-box .

  • Scène 0: ne nécessite aucune configuration.
  • Scène 1: nécessite une carte grise.
  • Scène 2: nécessite une scène de visage.
  • Scène 3: graphique ISO12233.
  • Scène 4: Scène personnalisée avec un cercle à l'intérieur d'un carré.

Tests de la scène 5

Les tests de la scène 5 nécessitent qu'un diffuseur soit placé sur le dessus de la caméra.

Tests de fusion de capteurs

Les tests de fusion de capteur nécessitent un mouvement de caméra spécifique pour tester la différence d'horodatage entre la caméra et le gyroscope pour les applications AR et VR. Ce test est ignoré si aucun gyroscope n'est inclus ou si le paramètre REALTIME n'est pas activé. Le test sensor_fusion peut être automatisé avec la Sensor Fusion Box .

Tests de Media Framework

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

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

Trouvez 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 de 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 l' 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 MediaFramework TestRunner ( 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 à l' 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 si le chemin de la 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 lanceur de test.

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 de support

Voici un exemple d'exécution d'un test fonctionnel. Ce test vérifie les fonctionnalités 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 multimédia

Voici un exemple de 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 libérera 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 à 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

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

Tests unitaires de 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 vise à souligner 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 manuels TestingCam

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 , prenez des photos de sujets éloignés (à au moins 10 m) avec l'appareil photo pointé horizontalement, vers le haut (près de la verticale) et vers le bas (près de la verticale); un exemple de la prise de vue vers le haut pourrait être les feuilles / branches hautes d'un arbre par dessous et un exemple de la 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 photos 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 fiable en usine de la position infinie 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 à celle du viseur, y compris avoir la même orientation.