Auf dieser Seite sind alle Tests aufgeführt, die zur Bewertung der Android-Hardware-Abstraktionsschicht (HAL) für Kameras verfügbar sind. Es richtet sich an Erstausrüster (Original Equipment Manufacturers, OEMs) und Application Processor (AP), damit diese die ordnungsgemäße Implementierung des Kamera-HAL mit minimalen Mängeln sicherstellen können. Dieser Test ist zwar freiwillig und wird nicht von der Android Compatibility Test Suite (CTS) unterstützt, er erhöht jedoch die Abdeckung der Kameratests erheblich und wird mit Sicherheit potenzielle Fehler aufdecken.
Wenn OEMs diese Tests bestehen, bestätigen sie, dass sie die HAL 3-Schnittstellen (Hardware Abstraction Layer) der Android-Kamera richtig integriert haben. Wenn alle Punkte auf der Checkliste erfüllt sind, kann eine Geräteimplementierung im Hinblick auf die Android Camera HAL-Schnittstellen als vollständig betrachtet werden. Dadurch kann ein Gerät das Paket
android.hardware.camera2
, auf dem Kamera-Apps basieren, ordnungsgemäß unterstützen.
Camera HAL3 specification
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 von Kamera-HALs (z.B. AP-Anbieter) sollten die Kamera-HAL3-Spezifikation Zeile für Zeile durchgehen und dafür sorgen, dass ihre Geräte dieser entsprechen.
Die aktuelle HAL-Spezifikation ist in diesen Dateien im generischen Android-Plattform-Entwicklungskit (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-Metadatenspezifikation:
system/media/camera/docs/docs.html
- HAL-Pixelformat-Schnittstelle und ‑Spezifikation:
system/core/libsystem/include/system/graphics.h
Kameratesttypen
Im Folgenden finden Sie die wichtigsten Arten von Tests, die für die neueste Android-Kamera verfügbar sind, sowie Verweise auf die zugehörigen Anleitungen:
- Vendor Test Suite (VTS):Tests, die direkt die HAL-Schnittstelle der Kamera testen
- Compatibility Test Suite (CTS): Standardmäßige, automatisierte Android-Tests zur Gerätekompatibilität. Weitere Informationen finden Sie unter Compatibility Test Suite und Trade Federation – Übersicht.
- Image Test Suite (ITS):Hier können Sie manuelle Tests ausführen, um die Richtigkeit von Bildern zu prüfen. Weitere Informationen finden Sie unter Kamera-ITS.
- Manuelle TestingCam-Tests:Aus der Quelle in
pdk/apps/TestingCamera/
ausführen - Manuelle TestsCam2.1-Tests:Aus der Quelle in
pdk/apps/TestingCamera2/
ausführen
Alle diese Testtypen werden unten ausführlich beschrieben. Die Tests werden in chronologischer Reihenfolge dargestellt, in der sie vom OEM voraussichtlich ausgeführt werden.
Wenn ein Gerät beispielsweise die nativen Tests nicht besteht, wird es mit Sicherheit auch die nachfolgenden CTS-Tests (Compatibility Test Suite) nicht bestehen. 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 dem nächsten Test fortfahren.
Vendor Test Suite (VTS)-Tests
Die Android Vendor Test Suite (VTS) ist eine Testsuite, die auf HIDL-Schnittstellenebene funktioniert. Weitere Informationen zur Verwendung von VTS finden Sie unter Vendor Test Suite.
Compatibility Test Suite (CTS)-Tests
Bei den CTS-Tests für Kameras liegt der Schwerpunkt auf der Gerätekompatibilität. Informationen zum Einrichten einer Testumgebung finden Sie unter CTS einrichten.
Der Startpfad für CTS-Tests für Kameras lautet: platform/cts
.
Wenn Sie die Kamera-CTS für Geräte ausführen, die externe Kameras unterstützen (z. B. USB-Webcams), muss beim Ausführen der CTS ein Gerät angeschlossen sein, da die Tests sonst automatisch fehlschlagen. Beispiele für externe Kameras: Logitech HD Pro Webcam C920 und 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 Verifier-Kameratests
Sie finden diese Kameratests unter:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
ITS-Tests (Image Test Suite)
Bei den Tests der Kamerabild-Testsuite (ITS) liegt der Schwerpunkt auf der Bildrichtigkeit. Führen Sie die Tests aus, indem Sie die Python-Scripts auf einer Workstation ausführen, die über USB mit dem Android-Gerät verbunden ist.
Die ITS-Infrastruktur und die Tests für Kameras 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 Kamera-ITS.
Beschreibungen von Szenen und Tests finden Sie unter ITS-Tests für Kameras.
ITS-Tests können nur bestanden oder nicht bestanden werden. Alle vorgeschriebenen Tests in jedem Szenenordner müssen bestanden werden.
Nicht vorgeschriebene Tests können fehlschlagen und trotzdem als bestanden in CtsVerifier
gezählt werden.
ITS-Tests testen Szenarien, die nicht in CTS getestet werden, und 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 sind unten aufgeführt.
Der Startpfad für kamerabezogene Media Framework-Tests lautet:
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 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 Namen des Zielpakets (com.android.mediaframeworktest
) und dem Namen des Testlauf-Managers (MediaFramework
).
Beispiel:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Sie können dann 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 besteht aus dem Java-Paket und dem Klassennamen. Das Instrumentationspaket muss nicht mit dem Java-Paket identisch sein. Verwenden Sie beim Zusammenführen des Komponentennamens das AndroidManifest.xml-Paket und nicht das Java-Paket, in dem sich die Test-Ausführer-Klasse befindet.
Wenn Sie eine einzelne Testklasse ausführen möchten, geben Sie das Argument
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 an den Klassennamen ein Rautezeichen (#) und den Methodennamen (in diesem Fall testConnectPro
) an:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Funktionstests für Medieneinstellungen
Hier ein Beispiel für einen Funktionstest. Mit diesem Test wird die grundlegende Funktionalität verschiedener Kombinationen von Kameraeinstellungen überprüft. (z. B. Flash, Belichtung, WB, 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 für die Medienintegration
Hier ist 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 in etwa so aus:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Tests zur Medienleistung
Bei diesem Test wird die Kameravorschau 200 Mal geöffnet und wieder geschlossen. Alle 20 Iterationen wird ein Snapshot von ps mediaserver aufgezeichnet und die Arbeitsspeichernutzung nach 200 Iterationen verglichen. Der Test schlägt fehl, wenn der Unterschied 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
Eine detailliertere Ausgabe finden Sie unter:
/sdcard/mediaMemOutput.txt
Tests für Mediaeinheiten
Die Befehle zum Ausführen von Unit-Tests ähneln sich. 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
Dieser Test dient dazu, die Bild- und Videoaufzeichnung der Kamera zu belasten.
Führen Sie den Testbefehl aus:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Alle Tests sollten bestanden werden.
Manuelle TestingCam-Tests
Die TestingCam App sollte manuell ausgeführt werden, wobei die folgenden Prüfungen durchgeführt werden.
Die Quelle für TestingCam finden Sie hier: pdk/apps/TestingCamera/
Unendlicher Fokus bei Kameraneigung
Starten Sie TestingCam, aktivieren Sie die Vorschau und achten Sie darauf, dass der Autofokus auf „Unendlich“ eingestellt ist. Verwenden Sie die Schaltfläche Foto aufnehmen, um Aufnahmen von entfernten Objekten (mindestens 10 Meter entfernt) zu machen, wobei die Kamera horizontal, nach oben (nahezu vertikal) und nach unten (nahezu vertikal) gerichtet ist. Ein Beispiel für eine Aufnahme nach oben sind hohe Blätter/Äste eines Baums von unten und ein Beispiel für eine Aufnahme nach unten ist die Straße vom Dach eines Gebäudes aus. Das entfernte Motiv sollte in jedem Fall scharf und im Fokus sein. Speichern und ansehen Sie sich die Aufnahmen in der Galerieansicht an, damit Sie heranzoomen und die Schärfe leichter prüfen können.
Damit eine Kamera mit einem VCM-Antrieb diesen Test besteht, ist entweder ein AF-Steuerungssystem mit geschlossenem Regelkreis oder eine Art Softwarekorrektur erforderlich, die die Kameraorientierung anhand von Beschleunigungsmesserdaten bestimmt. Außerdem ist eine zuverlässige Werkskalibrierung der Unendlichkeitseinstellung des Objektivs erforderlich.
Manuelle TestsCam2-Tests
Die TestingCam2-Anwendung sollte manuell mit den folgenden Prüfungen ausgeführt werden. Die Quelle für TestingCam2 finden Sie hier: pdk/apps/TestingCamera2/
JPEG-Aufnahme
Starten Sie TestingCam2 und klicken Sie auf die Schaltfläche JPEG. Das Bild rechts neben dem Bild im Sucher sollte mit dem Bild im Sucher identisch sein und auch dieselbe Ausrichtung haben.