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:
- Interface et spécifications de la caméra HAL 3.x :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Spécification des métadonnées Camera HAL 3.x :
system/media/camera/docs/docs.html
- Interface et spécification du format de pixel HAL :
system/core/libsystem/include/system/graphics.h
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:
- Vendor Test Suite (VTS) : tests qui testent directement l'interface HAL de la caméra
- Suite de tests de compatibilité (CTS) : tests Android standard et automatisés pour garantir la compatibilité des appareils - voir l' introduction de CTS et l' aperçu de la fédération commerciale
- Image Test Suite (ITS) : exécutez manuellement des tests pour garantir l'exactitude de l'image - voir les fichiers
README
niveau supérieur et spécifiques au test ettutorial.py
pour les instructions de configuration - Tests manuels TestingCam : exécutez à partir de la source dans
pdk/apps/TestingCamera/
- Tests manuels TestingCam2.1 : exécutés à partir de la source dans
pdk/apps/TestingCamera2/
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 #
.
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
Où 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
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.