Auf dieser Seite sind alle Tests aufgeführt, die zur Bewertung der Android-Hardwareabstraktionsschicht (HAL) für die Kamera verfügbar sind. Sie richtet sich an OEMs (Original Equipment Manufacturers) und Anbieter von Anwendungsprozessoren (Application Processors, APs), damit sie die korrekte Implementierung der Kamera-HAL mit möglichst wenigen Fehlern gewährleisten können. Obwohl es sich um eine optionale Ergänzung der Android Compatibility Test Suite (CTS) handelt, erhöht sie die Testabdeckung für die Kamera erheblich und hilft, potenzielle Fehler zu identifizieren.
Durch das Bestehen dieser Tests können OEMs bestätigen, dass sie die Schnittstellen der Android-HAL (Hardware Abstraction Layer) 3 für die Kamera ordnungsgemäß integriert haben. Wenn alle Punkte in der Checkliste erfüllt sind, kann eine Geräteimplementierung in Bezug auf die Android-Kamera-HAL-Schnittstellen als vollständig betrachtet werden. Dadurch kann ein Gerät das
Paket
android.hardware.camera2 ordnungsgemäß unterstützen, auf dem
Kamera-Apps aufbauen.
Spezifikation der Kamera-HAL3
Die Android-Kamera-HAL3-Spezifikation ist die maßgebliche Informationsquelle für die Anforderungen, die Geräte erfüllen müssen. Auf dieser Seite finden Sie eine Zusammenfassung aller Tests, die als Checkliste verwendet werden können. Implementierer der Kamera-HAL (z.B. AP-Anbieter) sollten die Spezifikation der Kamera-HAL3 Zeile für Zeile durchgehen und prüfen, ob ihre Geräte den Anforderungen entsprechen.
Die aktuelle HAL-Spezifikation ist in den folgenden Dateien im generischen Android Platform Development Kit (PDK) für Android 5.0 und höher definiert:
- Schnittstelle und Spezifikation der Kamera-HAL 3.x:
hardware/libhardware/include/hardware/camera3.h,hardware/libhardware/include/hardware/camera_common.h - Metadatenspezifikation der Kamera-HAL 3.x:
system/media/camera/docs/docs.html - Schnittstelle und Spezifikation des HAL-Pixelformats:
system/core/libsystem/include/system/graphics.h
Kameratesttypen
Hier sind die wichtigsten Testtypen für die neueste Android-Kamera sowie Verweise auf die zugehörigen Anleitungen:
- _Vendor Test Suite (VTS)_: Tests, mit denen die Kamera-HAL-Schnittstelle direkt getestet wird
- Compatibility Test Suite (CTS): Standardmäßige, automatisierte Android Tests, um die Gerätekompatibilität zu gewährleisten. Weitere Informationen finden Sie unter Compatibility Test Suite und Trade Federation Overview.
- _Image Test Suite (ITS)_: Manuell ausgeführte Tests, um die Bildkorrektheit zu gewährleisten. Weitere Informationen finden Sie unter Camera ITS.
- Manuelle Tests – Kameratests:
Aus der Quelle in
pdk/apps/TestingCamera/ausführen - Manuelle Tests – Cam2.1
Tests: Aus der Quelle in
pdk/apps/TestingCamera2/ausführen
Alle diese Testtypen werden unten ausführlich beschrieben. Die Tests werden in der chronologischen Reihenfolge dargestellt, in der OEMs sie ausführen sollten.
Wenn ein Gerät beispielsweise die nativen Tests nicht besteht, wird es mit Sicherheit auch die nachfolgenden Tests der Compatibility Test Suite (CTS) nicht bestehen. Und wenn ein Gerät die CTS nicht besteht, ist es wenig sinnvoll, mit der Image Test Suite (ITS) fortzufahren. Wir empfehlen, Fehler bei jedem Testtyp zu beheben, bevor Sie mit den nächsten Tests fortfahren.
Tests der Vendor Test Suite (VTS)
Die Android Vendor Test Suite (VTS) ist eine Testsuite, die auf der HIDL-Schnittstellenebene funktioniert. Weitere Informationen zur Verwendung der VTS finden Sie unter Vendor Test Suite.
Tests der Compatibility Test Suite (CTS)
Bei den Tests der Android Compatibility Test Suite (CTS) für die Kamera liegt der Schwerpunkt auf der Gerätekompatibilität. Informationen zum Einrichten einer Testumgebung finden Sie unter CTS einrichten.
Der Startpfad für CTS-Tests der Kamera ist platform/cts.
Wenn Sie die CTS für die Kamera auf Geräten ausführen, die externe Kameras unterstützen (z. B. USB-Webcams), muss ein Gerät angeschlossen sein. Andernfalls schlagen die Tests automatisch fehl. Beispiele für externe Kameras sind die Logitech HD Pro Webcam C920 und die Microsoft LifeCam HD-3000.
Eine allgemeine Anleitung zum Ausführen der CTS finden Sie in der CTS Einführung und auf den zugehörigen Unterseiten.
CTS-Tests für die android.hardware.Camera-API
Diese Kameratests finden Sie unter cts/tests/tests/:
hardware/src/android/hardware/cts/CameraTest.javahardware/src/android/hardware/cts/CameraGLTest.javahardware/src/android/hardware/cts/Camera_SizeTest.javapermission/src/android/permission/cts/CameraPermissionTest.java
CTS-Tests für die android.hardware.camera2-API
Diese Kameratests finden Sie unter cts/tests/tests/:
hardware/src/android/hardware/camera2/cts/*permission/src/android/permission/cts/Camera2PermissionTest.java
CTS‑Prüfung – Kameratests
Diese Kameratests finden Sie unter cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*.
Tests der Image Test Suite (ITS)
Bei den Tests der Camera Image Test Suite (ITS) liegt der Schwerpunkt auf der Bildkorrektheit. Führen Sie die Tests aus, indem Sie die Python-Skripts auf einer Workstation ausführen, auf der das Android-Gerät über USB angeschlossen ist.
Die Camera ITS-Infrastruktur und -Tests befinden sich im
cts/apps/CameraITS Verzeichnis.
Jeder Test befindet sich in einem tests/scene# Unterverzeichnis.
Weitere Informationen zum Einrichten und Ausführen der Tests finden Sie unter Camera ITS.
Beschreibungen der Szenen und Tests finden Sie unter Camera ITS Tests.
ITS-Tests sind entweder erfolgreich oder nicht. Alle vorgeschriebenen Tests in jedem Szenenordner müssen erfolgreich sein.
Tests, die nicht vorgeschrieben sind, können fehlschlagen und trotzdem in
CtsVerifier als erfolgreich gewertet werden.
Bei ITS-Tests werden Szenarien getestet, die in der CTS nicht getestet werden. Sie sind ein wichtiger Bestandteil des Testplans für HAL 3.2.
Tests des Media Framework
Alle kamerabezogenen Medientests in MediaFrameworkTest müssen erfolgreich sein. Für diese Tests muss die Datei „mediaframeworktest.apk“ auf dem Android-Gerät installiert sein. Sie müssen make mediaframeworktest ausführen und dann die resultierende APK-Datei mit adb installieren. Beispielbefehle finden Sie unten.
Der Startpfad für kamerabezogene Tests des Media Framework ist platform/frameworks/base.
Den Quellcode für die Tests finden Sie hier: frameworks/base/media/tests/MediaFrameworkTest.
So richten Sie diese Tests ein:
make mediaframeworktestadb install out/target/product/name/data/app/mediaframeworktest.apk
Dabei steht die name Variable für das Verzeichnis, das das Produkt des Anbieters enthält.
Alle Tests finden Sie im folgenden Verzeichnis oder in seinen Unterverzeichnissen:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
Jedes Unterverzeichnis steht für eine Testklasse:
functional/integration/performance/power/stress/unit/
Tests des Media Framework ausführen
So rufen Sie alle verfügbaren Tests auf:
adb shell pm list instrumentation
Die Ergebnisse sehen in etwa so aus:
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)
Identifizieren und extrahieren Sie die Komponente (zwischen instrumentation: und (target=com.android.mediaframeworktest) ) aus jeder Testzeile.
Die Komponente besteht aus dem Zielpaketnamen
(com.android.mediaframeworktest) und dem Namen des Test-Runners
(MediaFramework).
Beispiel:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Sie können jede Komponente dann so an adb shell am instrument übergeben:
adb shell am instrument -w component.name
Dabei entspricht component.name dem oben extrahierten Wert. Beispiel:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Der Klassenpfad ist der Java-Paketname + Klassenname. Das Instrumentierungspaket ist jedoch nicht unbedingt dasselbe wie das Java-Paket. Verwenden Sie beim Verketten des Komponentennamens das AndroidManifest.xml-Paket und nicht das Java-Paket, in dem sich die Test-Runner-Klasse befindet.
Wenn Sie nur eine Testklasse ausführen möchten, übergeben Sie das Argument „-e class“
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Wenn Sie nur eine Methode in einer Testklasse ausführen möchten, hängen Sie ein Rautezeichen (#) und den Methodennamen (in diesem Fall testConnectPro) an den Klassennamen an:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Funktionstests für Medieneinstellungen
Hier sehen Sie ein Beispiel für die Ausführung eines Funktionstests. Bei diesem Test wird die grundlegende Funktionalität verschiedener Kombinationen von Kameraeinstellungen überprüft. Dazu gehören Blitz, Belichtung, Weißabgleich, Szene, Bildgröße und Geotagging.
Führen Sie den Testbefehl aus:
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 zur Medienintegration
Hier sehen Sie ein Beispiel für die Ausführung eines Integrationstests, in diesem Fall für „mediaframeworktest/integration/CameraBinderTest.java“ und „mediaframeworktest/CameraStressTestRunner.java“:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
Bei Erfolg sieht die Ausgabe etwa so aus:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Tests zur Medienleistung
Bei diesem Test des Vorschauspeichers wird die Kameravorschau 200 Mal geöffnet und geschlossen. Nach jeweils 20 Iterationen wird eine Momentaufnahme von „ps mediaserver“ aufgezeichnet und die Arbeitsspeichernutzung nach 200 Iterationen verglichen. Der Test schlägt fehl, wenn die Differenz mehr als 150 KB beträgt.
Führen Sie den Testbefehl aus:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
Eine detailliertere Ausgabe finden Sie unter /sdcard/mediaMemOutput.txt.
Medien-Einheitentests
Die Befehle zum Ausführen von Einheitentests sind alle ähnlich. Für „CameraMetadataTest.java“ lautet der Befehl beispielsweise:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
Medien-Stresstests
Bei diesem Test werden die Bildaufnahme und Videoaufzeichnung der Kamera stark beansprucht.
Führen Sie den Testbefehl aus:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Alle Tests sollten erfolgreich sein.
Manuelle Tests – TestingCam
Die TestingCam-App sollte manuell ausgeführt werden. Dabei müssen die folgenden Prüfungen durchgeführt werden.
Die Quelle für TestingCam finden Sie hier: pdk/apps/TestingCamera/.
Unendlichfokus bei geneigter Kamera
Starten Sie TestingCam, aktivieren Sie die Vorschau und prüfen Sie, ob der Autofokusmodus auf „Unendlich“ eingestellt ist. Nehmen Sie mit der Schaltfläche Bild aufnehmen Aufnahmen von weit entfernten Objekten (mindestens 10 m entfernt) auf. Die Kamera sollte dabei horizontal, nach oben (fast vertikal) und nach unten (fast vertikal) gerichtet sein. Ein Beispiel für eine Aufnahme nach oben sind hohe Blätter/Äste eines Baumes von unten und ein Beispiel für eine Aufnahme nach unten ist die Straße vom Dach eines Gebäudes aus. In allen Fällen sollte das entfernte Objekt scharf und fokussiert sein. Speichern Sie die Aufnahmen und sehen Sie sie in der Galerieansicht an, damit Sie hineinzoomen und die Schärfe leichter überprüfen können.
Damit eine Kamera mit einem VCM-Aktuator diesen Test besteht, ist entweder ein geschlossenes AF-Regelungssystem erforderlich oder eine Art Softwarekorrektur, die auf Beschleunigungsmesserdaten basiert, um die Kameraausrichtung zu bestimmen. Außerdem ist eine zuverlässige Werkskalibrierung der Unendlichposition des Objektivs erforderlich.
Manuelle Tests – TestingCam2
Die TestingCam2-App sollte manuell ausgeführt werden. Dabei müssen die folgenden Prüfungen durchgeführt werden. Die Quelle für TestingCam2 finden Sie hier: pdk/apps/TestingCamera2/.
JPEG-Aufnahme
Starten Sie TestingCam2 und drücken Sie die Schaltfläche JPEG. Das Bild, das rechts neben dem Sucherbild angezeigt wird, sollte mit dem Sucherbild übereinstimmen, einschließlich der Ausrichtung.