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:
- 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 für das HAL-Pixelformat :
system/core/libsystem/include/system/graphics.h
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:
- Vendor Test Suite (VTS) : Tests, die die HAL-Schnittstelle der Kamera direkt testen
- Compatibility Test Suite (CTS) : Standardisierte, automatisierte Android-Tests zur Sicherstellung der Gerätekompatibilität. Weitere Einzelheiten finden Sie unter Übersicht über die Kompatibilitätstestsuite und den Handelsverband .
- Image Test Suite (ITS) : Führen Sie manuell Tests durch, um die Bildkorrektheit sicherzustellen. Weitere Einzelheiten finden Sie unter Kamera ITS .
- Manuelle TestingCam-Tests : Von der Quelle in
pdk/apps/TestingCamera/
ausführen - Manuelle TestingCam2.1-Tests : Von der Quelle in
pdk/apps/TestingCamera2/
ausführen
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
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.