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 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 en ce qui concerne les interfaces Android Camera HAL. Cela permettra à son tour à un appareil de prendre correctement en charge le package android.hardware.camera2
sur lequel les applications de caméra 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 qui peuvent être utilisés comme liste de contrôle. Les implémenteurs de Camera HAL (par exemple, les fournisseurs d'AP) 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 de développement de plate-forme Android générique Android 5.0 et versions ultérieures :
- 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 de la caméra HAL 3.x :
system/media/camera/docs/docs.html
- Interface et spécifications 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
- Compatibility Test Suite (CTS) : tests Android standard et automatisés pour garantir la compatibilité des appareils. Pour plus de détails, consultez Suite de tests de compatibilité et Présentation de la fédération commerciale .
- Image Test Suite (ITS) : exécutez manuellement des tests pour garantir l'exactitude de l'image. Pour plus de détails, voir Caméra ITS .
- Tests manuels de TestingCam : exécutés à partir de la source dans
pdk/apps/TestingCamera/
- Tests manuels de 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 certainement aux tests suivants de la suite de tests de compatibilité (CTS). Et si un appareil échoue au CTS, il est peu utile de passer à 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 du fournisseur (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 Camera Android Compatibility Test Suite (CTS) 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
.
Lors de l'exécution de la caméra CTS pour les appareils prenant en charge les caméras externes (telles que les webcams USB), vous devez avoir un appareil branché lors de l'exécution de CTS, sinon les tests échoueront automatiquement. Voici des exemples de caméras externes : Logitech HD Pro Webcam C920 et 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 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, consultez Camera ITS .
Pour les descriptions de scènes et de 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 compter toujours comme une réussite dans CtsVerifier
.
ITS teste des scénarios de test 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
Passez 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 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.
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)
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 testeur ( 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 à 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 bien que le chemin de classe soit 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 Test Runner.
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 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.-à-d. Flash, exposition, WB, scène, taille de l'image et géoTag)
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 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 performance des médias
Ce test de mémoire de prévisualisation ouvrira et publiera 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 à 150kM.
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 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 à 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 doivent réussir.
Tests manuelsTests 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. À l'aide du bouton Prendre une photo , capturez des photos de sujets distants (à 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 les feuilles/branches hautes d'un arbre vues du 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 visualisez les prises de vue dans la 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 à l'infini 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 au viseur, y compris avoir la même orientation.