Kamera-HAL testen

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:

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:

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

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 , wie hier gezeigt:

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.