Kamera-HAL-Testprüfliste

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:

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:

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

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 -e class an:

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.