Checkliste für Kamera-HAL-Tests

Auf dieser Seite sind alle verfügbaren Tests zur Evaluierung der Android-Kamera-Hardware-Abstraktionsschicht (HAL) aufgeführt. Es richtet sich an Originalgerätehersteller (OEMs) und Anbieter von Anwendungsprozessoren (AP), damit diese eine ordnungsgemäße Implementierung des Kamera-HAL mit minimalen Fehlern gewährleisten können. Obwohl es sich hierbei um eine freiwillige Ergänzung der Android Compatibility Test Suite (CTS) handelt, erhöht sie die Kameratestabdeckung erheblich und wird mit Sicherheit potenzielle Fehler identifizieren.

Durch das Bestehen dieser Tests überprüfen OEMs, ob sie die Android Camera Hardware Abstraction Layer (HAL) 3-Schnittstellen ordnungsgemäß integriert haben. Wenn alle Elemente der Checkliste erfüllt sind, kann eine Geräteimplementierung in Bezug auf die HAL-Schnittstellen der Android-Kamera als vollständig betrachtet werden. Dadurch kann ein Gerät wiederum das Paket android.hardware.camera2 , auf dem Kamera-Apps aufbauen, ordnungsgemäß unterstützen.

Kamera HAL3-Spezifikation

Die Android-Kamera-HAL3- Spezifikation ist die maßgebliche Informationsquelle darüber, was Geräte erfüllen müssen. Auf dieser Seite finden Sie eine Zusammenfassung aller Tests, die als Checkliste verwendet werden können. Kamera-HAL-Implementierer (z. B. AP-Anbieter) sollten die Kamera-HAL3-Spezifikation Zeile für Zeile durchgehen und sicherstellen, dass ihre Geräte dieser 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:

Arten von Kameratests

Hier sind die wichtigsten Arten von Tests aufgeführt, die für die neueste Android-Kamera verfügbar sind, zusammen mit Verweisen auf die zugehörigen Anweisungen unten:

Alle diese Testtypen werden im Folgenden ausführlich beschrieben. Diese Tests werden in der chronologischen Reihenfolge dargestellt, in der OEMs sie voraussichtlich durchführen 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. Und wenn ein Gerät CTS nicht besteht, ist es wenig sinnvoll, mit der Image Test Suite (ITS) fortzufahren. Wir empfehlen, Fehler in jedem Testtyp zu beheben, bevor Sie mit der nächsten Testreihe 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 von VTS finden Sie unter Vendor Test Suite .

Tests der Compatibility Test Suite (CTS).

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 Kamera-CTS für Geräte ausführen, die externe Kameras unterstützen (z. B. USB-Webcams), muss beim Ausführen von CTS ein Gerät angeschlossen sein, sonst schlagen die Tests automatisch fehl. Beispiele für externe Kameras sind: Logitech HD Pro Webcam C920 und die Microsoft LifeCam HD-3000 .

Allgemeine Anweisungen zum Ausführen von CTS finden Sie in der CTS-Einführung und ihren 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 Verifier-Kameratests

Diese Kameratests finden Sie unter: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Image Test Suite (ITS)-Tests

Die Tests der Camera Image Test Suite (ITS) konzentrieren sich auf die Bildkorrektheit. Um die Tests durchzuführen, führen Sie die Python-Skripte auf einer Workstation aus, wobei das Android-Gerät über USB angeschlossen ist.

Die Camera ITS-Infrastruktur und -Tests befinden sich im Verzeichnis cts/apps/CameraITS . Jeder Test befindet sich im Unterverzeichnis tests/scene # .

Weitere Informationen zum Einrichten und Ausführen der Tests finden Sie unter Kamera-ITS .

Szenen- und Testbeschreibungen finden Sie unter Kamera-ITS-Tests .

ITS-Tests werden entweder bestanden oder nicht bestanden. Alle vorgeschriebenen Tests in jedem Szenenordner müssen bestanden werden. Tests, die nicht vorgeschrieben sind, können fehlschlagen und dennoch in CtsVerifier als bestanden gelten.

ITS testet Testszenarien, die nicht in CTS getestet werden und ein wichtiger Bestandteil des HAL 3.2-Testplans sind.

Media Framework-Tests

Bestehen Sie alle kamerabezogenen Medientests in MediaFrameworkTest. Bitte beachten Sie, dass für diese Tests die Datei mediaframeworktest.apk auf dem Android-Gerät installiert sein muss. 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 Kamera-bezogene Medien-Framework-Tests 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 stellt die name das Verzeichnis dar, das das Produkt des Anbieters enthält.

Finden Sie alle Tests im folgenden Verzeichnis oder seinen Unterverzeichnissen:

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest

Jedes Unterverzeichnis stellt eine Klasse von Tests dar:

  • functional/
  • integration/
  • performance/
  • power/
  • stress/
  • unit/

Führen Sie Media Framework-Tests aus

Um alle verfügbaren Tests anzuzeigen:

adb shell pm list instrumentation

Dies führt zu Ergebnissen wie den folgenden:

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 Testläufers ( MediaFramework TestRunner MediaFramework TestRunner ).

Zum Beispiel:

com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner

Anschließend können Sie jede Komponente wie folgt an adb shell am instrument übergeben:

adb shell am instrument -w component.name

Wobei component.name dem oben extrahierten Wert entspricht. Zum Beispiel:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Bitte beachten Sie, dass der Klassenpfad zwar aus dem Java-Paket und dem Klassennamen besteht, das Instrumentierungspaket jedoch nicht unbedingt mit dem Java-Paket identisch ist. Stellen Sie sicher, dass Sie beim Verketten des Komponentennamens das Paket AndroidManifest.xml verwenden, nicht das Java-Paket, in dem sich die Testläuferklasse befindet.

Um eine einzelne Testklasse auszuführen, übergeben Sie die Klasse -e Argument, etwa so:

adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Um nur eine einzelne Methode in einer Testklasse auszuführen, hängen Sie ein Nummernzeichen (#) und den Methodennamen (in diesem Fall testConnectPro ) an den Klassennamen an, etwa so:

adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Funktionstests der Medieneinstellungen

Hier ist ein Beispiellauf eines Funktionstests. Dieser Test überprüft die grundlegende Funktionalität verschiedener Kombinationen von Kameraeinstellungen. (d. h. 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

Medienintegrationstests

Hier ist ein Beispiellauf 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 führt dies zu einer Ausgabe, die etwa der folgenden ähnelt:

-----

com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328

OK (11 tests)

-----

Medienleistungstests

Bei diesem Vorschauspeichertest wird die Kameravorschau 200 Mal geöffnet und freigegeben. In jeweils 20 Iterationen wird der Snapshot von ps mediaserver aufgezeichnet und die Speichernutzung nach 200 Iterationen verglichen. Der Test schlägt fehl, wenn die Differenz mehr als 150 km 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

Tests der Medieneinheit

Die Befehle zum Ausführen von Unit-Tests sind alle ähnlich. Für CameraMetadataTest.java wäre der Befehl beispielsweise:

adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'

Medienstresstests

Dieser Test dient dazu, die Bilderfassung 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 und die folgenden Prüfungen durchgeführt werden. Die Quelle für TestingCam ist hier: pdk/apps/TestingCamera/

Unendlicher Fokus mit Kameraneigung

Starten Sie TestingCam, schalten Sie die Vorschau ein und stellen Sie sicher, dass der Autofokusmodus auf Unendlich eingestellt ist. Mit der Schaltfläche „Bild aufnehmen“ können Sie Aufnahmen von entfernten Motiven (mindestens 10 m entfernt) machen, wobei die Kamera horizontal, nach oben (nahe der Vertikale) und nach unten (nahe der Vertikale) gerichtet ist. Ein Beispiel für die Aufnahme nach oben könnten hohe Blätter/Äste eines Baumes von unten sein, und ein Beispiel für die Aufnahme nach unten könnte die Straße sein, wie sie vom Dach eines Gebäudes aus gesehen wird. In jedem Fall sollte das entfernte Motiv scharf und scharf sein. Speichern Sie die Aufnahmen und betrachten Sie sie in der Galerieansicht, damit Sie sie einfacher vergrößern und die Schärfe überprüfen können.

Beachten Sie, dass eine Kamera mit einem VCM-Aktuator, um diesen Test zu bestehen, entweder ein AF-Steuerungssystem mit geschlossenem Regelkreis oder eine Art SW-Korrektur benötigt, die auf der Verwendung von Beschleunigungsmesserdaten zur Bestimmung der Kameraausrichtung basiert. Außerdem ist eine zuverlässige Werkskalibrierung der Unendlichkeitsposition des Objektivs erforderlich.

Manuelle TestingCam2-Tests

Die TestingCam2-App sollte manuell ausgeführt werden, wobei die folgenden Prüfungen durchgeführt werden sollten. Die Quelle für TestingCam2 ist hier: pdk/apps/TestingCamera2/

JPEG-Aufnahme

Starten Sie TestingCam2 und drücken Sie die JPEG- Taste. Das Bild, das rechts neben dem Sucherbild erscheint, sollte genauso aussehen wie der Sucher, einschließlich der gleichen Ausrichtung.