Kamera-HAL testen

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:

Kameratesttypen

Hier sind die wichtigsten Testtypen für die neueste Android-Kamera sowie Verweise auf die zugehörigen Anleitungen:

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.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

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 mediaframeworktest
adb 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 (MediaFrameworkTestRunner).

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“ so:

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.