Checkliste für Kamera-HAL-Tests

Dieses Dokument listet alle Tests auf, die zur Bewertung der Hardware-Abstraktionsschicht (HAL) der Android-Kamera verfügbar sind. Es ist für Originalgerätehersteller (OEMs) und Anbieter von Anwendungsprozessoren (AP) gedacht, damit sie eine ordnungsgemäße Implementierung der Kamera-HAL mit minimalen Fehlern sicherstellen können. Obwohl dies eine freiwillige Ergänzung der Android Compatibility Test Suite (CTS) ist, erhöht es die Abdeckung der Kameratests erheblich und wird mit Sicherheit potenzielle Fehler identifizieren.

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

HAL3-Spezifikation der Kamera

Die Android Camera HAL3- Spezifikation ist die maßgebliche Informationsquelle darüber, was Geräte erfüllen müssen. Diese Seite bietet 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) von Android 5.0 und höher definiert:

Arten von Kameratests

Hier sind die wichtigsten Arten von Tests, 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 detailliert beschrieben. Diese Tests werden in der chronologischen Reihenfolge dargestellt, in der OEMs sie voraussichtlich durchführen werden.

Wenn beispielsweise ein Gerät die nativen Tests nicht besteht, wird es die nachfolgenden Tests der Compatibility Test Suite (CTS) mit Sicherheit nicht bestehen. Und wenn ein Gerät CTS nicht besteht, macht es wenig Sinn, zur Image Test Suite (ITS) zu gehen. Wir empfehlen, Fehler in jedem Testtyp zu beheben, bevor Sie mit der nächsten Testreihe fortfahren.

Vendor Test Suite (VTS)-Tests

Die Android Vendor Test Suite (VTS) ist eine Testsuite, die auf der HIDL-Schnittstellenebene arbeitet. Weitere Informationen zur Verwendung von VTS finden Sie unter Vendor Test Suite .

Compatibility Test Suite (CTS)-Tests

Die Tests der Camera Android Compatibility Test Suite (CTS) konzentrieren sich auf die Gerätekompatibilität. Informationen zum Einrichten einer Testumgebung finden Sie unter Einrichten von CTS .

Der Startpfad für Kamera-CTS-Tests lautet: platform/cts .

Wenn Sie Kamera-CTS für Geräte ausführen, die externe Kameras unterstützen (z. B. USB-Webcams), müssen Sie ein Gerät angeschlossen haben, wenn Sie CTS ausführen, oder die Tests schlagen 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 den 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. Führen Sie zur Durchführung der Tests die Python-Skripts auf einer Workstation aus, an der das Android-Gerät über USB angeschlossen ist.

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

Führen Sie zum Einrichten der Testumgebung Folgendes aus:
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh

Weitere Informationen zum Einrichten und Ausführen der Tests finden Sie in der CameraITS PDF-Datei in cts/apps/CameraITS . Eine Anleitung zur Verwendung der Skripte finden Sie unter tutorial.py im Unterverzeichnis tests .

Die ITS-Tests erfordern eine Linux-Umgebung. Einzelheiten zu den spezifischen Python-Versionen, die zum Ausführen der ITS-Tests erforderlich sind, finden Sie in der CameraITS PDF-Datei für die Version oder auch in den Android 12 -Versionshinweisen für Android 12.

Die empfohlene Einrichtung für statische Szenen ist in Camera ITS-in-a-box beschrieben. Das empfohlene Setup für die Szene „sensor_fusion“ ist in der Schnellstartanleitung für die Sensor Fusion Box beschrieben.

Um ITS manuell auszuführen, bereiten Sie eine einfache physische Umgebung mit einem bestimmten, wiederverwendbaren Ziel wie einer weißen Wand, einer grauen Karte und einer Schreibtischlampe vor. Montieren Sie das Android-Gerät auf einem Stativ und führen Sie die Skripte aus, um die Kamerafunktionen zu testen. Die meisten Tests sind bestanden oder nicht bestanden, aber einige bieten Metriken.

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

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 in CtsVerifier dennoch als bestanden gewertet werden.

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

Media Framework-Tests

Bestehen Sie alle kamerabezogenen Medientests in MediaFrameworkTest. Bitte beachten Sie, dass für diese Tests die mediaframeworktest.apk auf dem Android-Gerät installiert sein muss. Sie müssen make mediaframeworktest und dann adb verwenden, um die resultierende .apk zu installieren. Beispielbefehle sind unten enthalten.

Der Startpfad für kamerabezogene 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

Wobei die name das Verzeichnis darstellt, 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 repräsentiert eine Klasse von Tests:

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

Ausführen von Media Framework-Tests

So sehen Sie alle verfügbaren Tests:

adb shell pm list instrumentation

Dies führt zu Ergebnissen wie:

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 Test-Runners ( MediaFramework TestRunner MediaFramework TestRunner ).

Zum Beispiel:

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

Sie können dann 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 das Java-Paket + Klassenname ist, das Instrumentierungspaket jedoch nicht unbedingt mit dem Java-Paket identisch ist. Stellen Sie sicher, dass Sie das AndroidManifest.xml-Paket verwenden, wenn Sie den Komponentennamen verketten, und nicht das Java-Paket, in dem sich die Test Runner-Klasse 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 ) wie folgt an den Klassennamen an:

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

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'

Wenn dies erfolgreich ist, führt dies zu einer Ausgabe, die der folgenden ähnelt:

-----

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

OK (11 tests)

-----

Medienleistungstests

Dieser Vorschauspeichertest öffnet und gibt die Kameravorschau 200 Mal frei. In allen 20 Iterationen wird der Snapshot von ps mediaserver aufgezeichnet und die Speichernutzung nach 200 Iterationen 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

Eine detailliertere Ausgabe finden Sie in: /sdcard/mediaMemOutput.txt

Medieneinheitstests

Die Befehle zum Ausführen von Komponententests 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 soll die Bildaufnahme der Kamera und die Videoaufzeichnung 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 bestehen.

Manuelle TestingCam-Tests

Die TestingCam-App sollte manuell ausgeführt werden, wobei die folgenden Überprüfungen durchgeführt werden. Die Quelle für TestingCam ist hier: pdk/apps/TestingCamera/

Unendlicher Fokus mit Kameraneigung

Starten Sie TestingCam, aktivieren Sie die Vorschau und vergewissern Sie sich, dass der Autofokusmodus auf unendlich eingestellt ist. Nehmen Sie mit der Schaltfläche Bild aufnehmen Aufnahmen von entfernten Motiven (mindestens 10 m entfernt) auf, wobei die Kamera horizontal, nach oben (nahezu vertikal) und nach unten (nahezu vertikal) gerichtet ist; ein Beispiel für den Aufwärtsschuss könnten hohe Blätter/Zweige eines Baums von unten sein, und ein Beispiel für den Abwärtsschuss könnte die Straße vom Dach eines Gebäudes aus gesehen sein. In allen Fällen sollte das entfernte Motiv scharf und fokussiert sein. Speichern und sehen Sie sich die Aufnahmen in der Galerieansicht an, damit Sie hineinzoomen und die Schärfe einfacher überprüfen können.

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

Manuelles TestenCam2-Tests

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

JPEG-Aufnahme

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