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:
- Kamera HAL 3.x Schnittstelle und Spezifikation :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Kamera-HAL 3.x-Metadatenspezifikation :
system/media/camera/docs/docs.html
- Schnittstelle und Spezifikation des HAL-Pixelformats :
system/core/libsystem/include/system/graphics.h
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:
- Vendor Test Suite (VTS) : Tests, die die HAL-Schnittstelle der Kamera direkt testen
- Compatibility Test Suite (CTS) : Automatische Standard-Android-Tests zur Sicherstellung der Gerätekompatibilität – siehe CTS-Einführung und Trade Federation Overview
- Image Test Suite (ITS) : Führen Sie Tests manuell aus, um die Korrektheit des Bildes sicherzustellen – siehe die README-Dateien der obersten Ebene und die
README
-Dateien undtutorial.py
für Setup-Anweisungen - Manuelle TestingCam-Tests : Ausführen von der Quelle in
pdk/apps/TestingCamera/
- Manuelle TestingCam2.1-Tests : Ausführen von der Quelle in
pdk/apps/TestingCamera2/
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 #
.
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
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.