Auf dieser Seite werden alle Tests aufgeführt, die zur Bewertung der Android-Kamera-Hardware-Abstraktionsschicht (HAL) verfügbar sind. Es ist für Originalgerätehersteller (OEMs) und Anbieter von Anwendungsprozessoren (APs) gedacht, damit sie für eine korrekte Implementierung des Kamera-HAL mit möglichst wenigen Fehlern sorgen können. Obwohl dies eine freiwillige Ergänzung der Android Compatibility Test Suite (CTS) ist, wird die Abdeckung der Kameratests dadurch erheblich erhöht und es werden mit Sicherheit potenzielle Fehler erkannt.
Durch Bestehen dieser Tests können OEMs überprüfen, ob sie die Schnittstellen der Android-Kamera-Hardwareabstraktionsschicht (HAL) 3 richtig integriert haben. Wenn alle Elemente in der Checkliste eingehalten werden, kann eine Geräteimplementierung in Bezug auf die Android Camera HAL-Schnittstellen als vollständig betrachtet werden. Dadurch kann ein Gerät das
android.hardware.camera2
-Paket, auf dem Kamera-Apps basieren, richtig unterstützen.
Camera HAL3-Spezifikation
Die Android Camera HAL3-Spezifikation ist die maßgebliche Quelle für Informationen dazu, welche Anforderungen 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 dafür sorgen, dass ihre Geräte ihr entsprechen.
Die aktuelle HAL-Spezifikation ist in diesen Dateien im generischen Android Platform Development Kit (PDK) für Android 5.0 und höher definiert:
- Camera HAL 3.x-Schnittstelle und ‑Spezifikation:
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Camera HAL 3.x metadata spec:
system/media/camera/docs/docs.html
- HAL-Schnittstelle und ‑Spezifikation für Pixelformat:
system/core/libsystem/include/system/graphics.h
Kameratesttypen
Hier sind die wichtigsten Arten von Tests, die für die aktuelle Android-Kamera verfügbar sind, zusammen mit Verweisen auf die zugehörigen Anleitungen unten:
- Vendor Test Suite (VTS):Tests, mit denen die Kamera-HAL-Schnittstelle direkt getestet wird
- Compatibility Test Suite (CTS): Standardisierte, automatisierte Android-Tests zur Gewährleistung der Gerätekompatibilität. Weitere Informationen finden Sie unter Compatibility Test Suite und Trade Federation – Übersicht.
- Image Test Suite (ITS):Führen Sie Tests manuell aus, um die Richtigkeit von Bildern zu gewährleisten. Weitere Informationen finden Sie unter Camera ITS.
- Manuelle Cam-Tests:Werden von der Quelle in
pdk/apps/TestingCamera/
aus ausgeführt. - Manuelle TestsCam2.1:Werden von der Quelle in
pdk/apps/TestingCamera2/
ausgeführt.
Alle diese Testtypen werden unten ausführlich beschrieben. Diese Tests werden in der chronologischen Reihenfolge präsentiert, in der OEMs sie ausführen sollen.
Wenn ein Gerät beispielsweise die nativen Tests nicht besteht, besteht es mit Sicherheit auch nicht die nachfolgenden CTS-Tests (Compatibility Test Suite). Wenn ein Gerät den CTS nicht besteht, ist es wenig sinnvoll, mit der Image Test Suite (ITS) fortzufahren. Wir empfehlen, Fehler in den einzelnen Testtypen zu beheben, bevor Sie mit den nächsten Tests fortfahren.
VTS-Tests (Vendor Test Suite)
Die Android Vendor Test Suite (VTS) ist eine Testsuite, die auf der HIDL-Schnittstellenebene funktioniert. Weitere Informationen zur Verwendung von VTS finden Sie unter Vendor Test Suite.
CTS-Tests (Compatibility Test Suite)
Die Tests der Camera Android Compatibility Test Suite (CTS) konzentrieren sich auf die Gerätekompatibilität. Informationen zum Einrichten einer Testumgebung finden Sie unter CTS einrichten.
Der Startpfad für Kamera-CTS-Tests ist: platform/cts
.
Wenn Sie den Kamera-CTS für Geräte ausführen, die externe Kameras (z. B. USB-Webcams) unterstützen, 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 von CTS finden Sie in der CTS-Einführung und den zugehörigen Unterseiten.
CTS-Tests für die android.hardware.Camera
API
Sie finden diese Kameratests unter 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-Tests für die android.hardware.camera2
API
Sie finden diese Kameratests unter cts/tests/tests/
:
hardware/src/android/hardware/camera2/cts/*
permission/src/android/permission/cts/Camera2PermissionTest.java
CTS‑Prüfung – Kameratests
Sie finden diese Kameratests unter:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
ITS-Tests (Image Test Suite)
Die Tests der Camera Image Test Suite (ITS) konzentrieren sich auf die Richtigkeit von Bildern. Führen Sie die Python-Skripts auf einer Workstation aus, auf der das Android-Gerät über USB angeschlossen ist, um die Tests durchzuführen.
Die Camera ITS-Infrastruktur und -Tests befinden sich im Verzeichnis
cts/apps/CameraITS
.
Jeder Test befindet sich in einem tests/scene#
-Unterverzeichnis.
Weitere Informationen zum Einrichten und Ausführen der Tests finden Sie unter Camera ITS.
Beschreibungen von Szenen und Tests finden Sie unter Camera ITS Tests.
ITS-Tests bestehen oder schlagen fehl. Alle vorgeschriebenen Tests in jedem Szenenordner müssen bestanden werden.
Tests, die nicht vorgeschrieben sind, können fehlschlagen und trotzdem als bestanden in CtsVerifier
gelten.
In ITS-Tests werden Szenarien getestet, die im CTS nicht getestet werden. Sie sind ein wichtiger Bestandteil des HAL 3.2-Testplans.
Media Framework-Tests
Alle kamerabezogenen Medientests in MediaFrameworkTest bestehen. Für diese Tests muss die Datei „mediaframeworktest.apk“ auf dem Android-Gerät installiert sein. Sie müssen make mediaframeworktest
und dann adb verwenden, um die resultierende APK-Datei zu installieren. Beispielbefehle finden Sie unten.
Der Startpfad für Tests des Media Framework für Kameras 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 mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
Dabei steht die Variable name 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/
Media Framework-Tests ausführen
So rufen Sie alle verfügbaren Tests auf:
adb shell pm list instrumentation
Die Ergebnisse sollten in etwa so aussehen:
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)
Identifiziere und extrahiere die Komponente (zwischen instrumentation:
und (target=com.android.mediaframeworktest)
) aus jeder Testzeile.
Die Komponente besteht aus dem Namen des Zielpakets (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
Anschließend können Sie jede Komponente 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 muss jedoch nicht mit dem Java-Paket übereinstimmen. Achten Sie darauf, dass Sie beim Verketten des Komponentennamens das AndroidManifest.xml-Paket verwenden und nicht das Java-Paket, in dem sich die Test-Ausführer-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 einzelne Methode in einer Testklasse ausführen möchten, hängen Sie dem Klassennamen ein Rautezeichen (#) und den Methodennamen (in diesem Fall testConnectPro
) an, z. B.:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Funktionstests für Media-Einstellungen
Hier sehen Sie ein Beispiel für einen funktionalen Testlauf. Mit diesem Test wird die grundlegende Funktionalität verschiedener Kombinationen von Kameraeinstellungen überprüft. (z. B. Blitz, Belichtung, Weißabgleich, Szene, Bildgröße und Geotag)
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 der Medienintegration
Hier sehen Sie ein Beispiel für die Ausführung eines Integrationstests, in diesem Fall 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 Media-Leistung
Bei diesem Test wird die Kameravorschau 200-mal geöffnet und geschlossen. In jeder 20. Iteration wird der Snapshot des ps mediaserver aufgezeichnet und die Arbeitsspeichernutzung nach 200 Iteration verglichen. Der Test schlägt fehl, wenn die Differenz größer als 150 km ist.
Führen Sie den Testbefehl aus:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
Ausführlichere Informationen finden Sie unter:
/sdcard/mediaMemOutput.txt
Mediaeinheitentests
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'
Media-Stresstests
Mit diesem Test werden die Bildaufnahme und Videoaufzeichnung der Kamera auf die Probe gestellt.
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 TestingCam-Tests
Die TestingCam App muss manuell ausgeführt werden. Dabei sind die folgenden Prüfungen durchzuführen.
Den Quellcode für TestingCam finden Sie hier: pdk/apps/TestingCamera/
Unendlichfokus mit Kameraneigung
Starten Sie TestingCam, aktivieren Sie die Vorschau und achten Sie darauf, dass der Autofokusmodus auf „Unendlich“ eingestellt ist. Nehmen Sie mit der Schaltfläche Bild aufnehmen Aufnahmen von entfernten Motiven (mindestens 10 Meter entfernt) auf. Richten Sie die Kamera dabei horizontal, nach oben (fast vertikal) und nach unten (fast vertikal) aus. Ein Beispiel für die Aufnahme nach oben könnten hohe Blätter/Äste eines Baums von unten sein und ein Beispiel für die Aufnahme nach unten die Straße, wie sie vom Dach eines Gebäudes aus zu sehen ist. In jedem Fall sollte das entfernte Motiv scharf und im Fokus sein. Speichere die Aufnahmen und sieh sie dir in der Galerie an. Dort kannst du sie vergrößern und die Schärfe besser beurteilen.
Damit eine Kamera mit einem VCM-Aktuator diesen Test besteht, ist entweder ein AF-Regelungssystem mit geschlossenem Regelkreis oder eine Art Softwarekorrektur erforderlich, die auf der Verwendung von Beschleunigungsmesserdaten zur Bestimmung der Kameraausrichtung basiert. Außerdem ist eine zuverlässige werkseitige Kalibrierung der Unendlichkeitsposition des Objektivs erforderlich.
Manuelle TestingCam2-Tests
Die App „TestingCam2“ muss manuell ausgeführt werden. Dabei sind die folgenden Prüfungen durchzuführen. Die Quelle für TestingCam2 finden Sie hier: pdk/apps/TestingCamera2/
JPEG-Aufnahme
Starte TestingCam2 und drücke die Schaltfläche JPEG. Das Bild rechts neben dem Sucherbild sollte genauso aussehen wie das Sucherbild, einschließlich der Ausrichtung.