Auf dieser Seite finden Sie eine umfassende Liste der Tests der Camera Image Test Suite (ITS), die Teil des Android Compatibility Test Suite (CTS) Verifier ist. Bei ITS-Tests handelt es sich um Funktionstests, das heißt, sie messen nicht die Bildqualität, sondern prüfen, ob alle beworbenen Kamerafunktionen wie erwartet funktionieren. In diesem Dokument können Entwickler und Tester verstehen, was die einzelnen Tests bewirken und wie Testfehler behoben werden können.
Kamera-ITS-Gates-Tests nach erforderlichen Kameraeigenschaften, API-Ebene und Medienleistungsklassenebene (MPC). Für die API-Ebene verwendet ITS ro.product.first_api_level
, um in einer bestimmten API-Ebene hinzugefügte Tests zu steuern, die auf negative Benutzererfahrungen für die Funktionalität in niedrigeren API-Ebenen testen. ITS verwendet ro.vendor.api_level
, um Tests für Funktionen durchzuführen, die in einer bestimmten API-Ebene hinzugefügt wurden und neue Hardwarefunktionen erfordern. Wenn ro.odm.build.media_performance_class
für ein Gerät definiert ist, erfordert ITS die Ausführung spezifischer Tests abhängig von der MPC-Ebene.
Die Tests sind nach Szene wie folgt gruppiert:
- scene0 : Erfassen Sie Metadaten, Jitter, Gyroskop und Vibration
- Szene 1 : Belichtung, Empfindlichkeit, EV-Korrektur, YUV vs. JPEG/RAW
- Szene 2 : Gesichtserkennung, Tests, die Farbszenen oder völlige Dunkelheit erfordern
- Szene 3 : Kantenverstärkung, Linsenbewegung
- Szene4 : Seitenverhältnis, Zuschnitt, Sichtfeld
- Szene 5 : Linsenabschattung
- Szene 6 : Zoom
- scene_extensions : Kameraerweiterungen
- sensor_fusion : Kamera-/Gyroskop-Timing-Offset
Eine Beschreibung jeder Szene finden Sie in den einzelnen Abschnitten.
Szene0
Für Scene0-Tests sind keine spezifischen Szeneninformationen erforderlich. Für Gyroskop- und Vibrationstests muss das Telefon jedoch stationär sein.
test_burst_capture
Überprüft, ob die gesamte Capture-Pipeline mit der Geschwindigkeit der Fullsize-Capture und der CPU-Zeit mithalten kann.
Getestete APIs:
Bestanden: Nimmt eine Reihe von Bildern in voller Größe auf und die Kamera ist schnell genug, um eine Zeitüberschreitung zu vermeiden.
test_capture_result_dump
Testet, ob ein Erfassungsergebnis von einer manuellen Erfassung zurückgegeben wird, und gibt es dann aus.
Getestete APIs:
Bestanden: Schließt die Erfassung ab und gibt die Erfassungsergebnisse aus.
test_gyro_bias
Testet, ob der Kreisel einen stabilen Ausgang hat, wenn das Gerät stationär ist. Die Daten werden als Durchschnitt von 20 Datenpunkten dargestellt.
Getestete APIs:
Bestanden: Das Delta des Kreiselmesswerts beträgt über die Zeit weniger als 0,01.
test_gyro_bias_plot.png
test_jitter
Misst Jitter in Kamera-Zeitstempeln.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Bestanden: Zwischen den Frames liegt ein Abstand von mindestens 30 ms.
test_jitter_plot.png (Beachten Sie den kleinen Y-Achsenbereich. Jitter ist in diesem Diagramm tatsächlich gering.)
test_metadata
Testet die Gültigkeit von Metadateneinträgen. Betrachtet die Aufnahmeergebnisse und die Kameraeigenschaften von Objekten. Dieser Test verwendet auto_capture_request
Belichtungs- und Verstärkungswerte, da der Bildinhalt nicht wichtig ist.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Bestanden: Hardware-Level, rollingShutterSkew
, frameDuration
Tags, timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, FoV und Hyperfokalabstand sind vorhanden und haben gültige Werte.
test_param_sensitivity_burst
Testet, ob der Parameter android.sensor.sensitivity
im Burst ordnungsgemäß angewendet wird. Überprüft nur die Ausgabemetadaten.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Bestanden: Ausgabedaten haben eine Fehlertoleranz von weniger als 0,2 %.
test_read_write
Testet, ob das Gerät die richtigen Belichtungs- und Verstärkungswerte schreibt, indem es die Erfassungsmetadaten zurückliest.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Bestanden: Lese- und Schreibwerte stimmen über alle Schüsse hinweg überein.
test_sensor_events
Testet, dass das Gerät Sensorereignisse für Geräte abfragt und ausgibt, die die Unterstützung der Sensorfusion ankündigen. Die erwarteten Sensoren sind Beschleunigungsmesser, Gyroskop und Magnetometer. Dieser Test funktioniert nur, wenn der Bildschirm eingeschaltet ist, das Gerät sich also nicht im Standby-Modus befindet.
Getestete APIs:
Bestanden: Es werden Ereignisse für jeden Sensor empfangen.
test_solid_color_test_pattern
Testet, ob einfarbige Testmuster ordnungsgemäß für die Stummschaltung der Kamera generiert werden. Wenn die Stummschaltung der Kamera unterstützt wird, müssen einfarbige Testmuster unterstützt werden. Wenn die Stummschaltung der Kamera nicht unterstützt wird, werden einfarbige Testmuster nur getestet, wenn die Funktion angekündigt wird.
Wenn RAW-Bilder unterstützt werden, wird auch die Farbzuordnung getestet. Die getesteten Farben sind Schwarz, Weiß, Rot, Blau und Grün. Bei Kameras, die keine RAW-Bilder unterstützen, wird nur Schwarz getestet.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Bestanden: Die unterstützten Volltonmuster haben die richtige Farbe und die Abweichung im Bild ist gering.
test_test_pattern
Testet den Parameter android.sensor.testPatternMode
, um Frames für jedes gültige Testmuster zu erfassen, und prüft, ob die Frames für Volltonfarben und Farbbalken korrekt generiert werden. Dieser Test umfasst die folgenden Schritte:
- Erfasst Bilder für alle unterstützten Testmuster.
- Führt eine einfache Korrektheitsprüfung für Volltontestmuster und Farbbalken durch.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Bestanden: Unterstützte Testmuster werden korrekt generiert.
test_test_patterns_2.jpg
test_tonemap_curve
Testet die Konvertierung des Testmusters von RAW in YUV mit linearer Tonemap. Dieser Test erfordert android.sensor.testPatternMode = 2
(COLOR_BARS), um ein perfektes Bildmuster für die Tonemap-Konvertierung zu generieren. Stellt sicher, dass die Pipeline ordnungsgemäße Farbausgaben mit linearer Tonemap und idealer Bildeingabe hat (basiert auf test_test_patterns
).
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Passen: YUV und RAW sehen einander ähnlich aus.
test_tonemap_curve_raw_2.jpg
test_tonemap_curve_yuv_2.jpg
test_unified_timestamp
Testet, ob Bild- und Bewegungssensorereignisse im selben Zeitbereich liegen.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.hardware.Sensor#TYPE_GYROSCOPE
Bestanden: Bewegungszeitstempel liegen zwischen den beiden Bildzeitstempeln.
test_vibration_restriction
Testet, ob die Vibration des Geräts wie erwartet funktioniert.
Getestete APIs:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.os.Vibrator
-
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Bestanden: Das Gerät vibriert nicht, wenn es durch die Audiobeschränkungs-API der Kamera stummgeschaltet wird.
Szene 1
Szene1 ist ein graues Diagramm. Die graue Karte muss die mittleren 30 % des Sichtfelds der Kamera abdecken. Es wird erwartet, dass die Graukarte 3A (automatische Belichtung, automatischer Weißabgleich, Autofokus) mäßig herausfordert, da der mittlere Bereich keine Funktionen aufweist. Die Erfassungsanforderung gibt jedoch die gesamte Szene an, die ausreichende Merkmale für die Konvergenz von 3A enthält.
RFoV-Kameras können im WFoV oder im RFoV-Teststand getestet werden. Wenn eine RFoV-Kamera im WFoV-Teststand getestet wird, wird das Diagramm um ⅔ skaliert, um einige Grenzen für das Graudiagramm im FoV sicherzustellen, um die 3A-Konvergenz zu unterstützen. Ausführlichere Beschreibungen der Kameraprüfstände finden Sie unter Kamera ITS-in-a-box .
Szene 1: Diagramm in voller Größe (links). ⅔ skaliertes Diagramm (rechts).
test_3a
Testet die Konvergenz von 3A mit einem mäßig anspruchsvollen Ziel.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Bestanden: 3A konvergiert und die zurückgegebenen 3A-Werte sind gültig.
test_ae_af
Testet die 3A-Algorithmen für automatische Belichtung (AE) und Autofokus (AF) einzeln.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Bestanden: 3A konvergiert und die zurückgegebenen 3A-Werte sind zulässig.
test_ae_precapture_trigger
Testet die AE-Zustandsmaschine bei Verwendung des Precapture-Triggers. Erfasst fünf manuelle Anfragen mit deaktivierter AE. Die letzte Anfrage hat einen AE-Precapture-Trigger, der ignoriert werden sollte, da AE deaktiviert ist.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Pass: AE konvergiert.
test_auto_vs_manual
Tests, bei denen automatische und manuelle Aufnahmen gemacht wurden, sehen gleich aus.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Bestanden: Die in jedem Aufnahmeergebnis gemeldeten manuellen Weißabgleichsgewinne und -transformationen stimmen mit der estimate
des automatischen Weißabgleichs aus dem 3A-Algorithmus der Kamera überein.
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
test_black_white
Testet, ob das Gerät vollständige Schwarzweißbilder erzeugt. Macht zwei Aufnahmen, die erste mit extrem geringer Verstärkung und kurzer Belichtung, was zu einem schwarzen Foto führt, und die zweite mit extrem hoher Verstärkung und langer Belichtung, was zu einem weißen Foto führt.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: Erzeugt Schwarzweißbilder. Gesättigte Kanäle von Weißbildern haben RGB-Werte von [255, 255, 255] mit einer Fehlertoleranz von weniger als 1 % Differenz.
![]() | ![]() | |
test_black_white_black.jpg | test_black_white_white.jpg |
test_black_white_plot_means.png
test_burst_sameness_manual
Nimmt 5 Serien mit je 50 Bildern mit manueller Aufnahmeeinstellung auf und prüft, ob alle identisch sind. Mit diesem Test kann festgestellt werden, ob es sporadische Frames gibt, die unterschiedlich verarbeitet werden oder Artefakte aufweisen.
Getestete APIs:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
-
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Bestanden: Bilder sind optisch und in RGB-Werten identisch.
Fehlschlag: Zeigt einen Anstieg oder Abfall des RGB-Durchschnittsdiagramms zu Beginn jedes Bursts an
- Die Toleranz beträgt 3 % für
first_API_level
< 30 - Die Toleranz beträgt 2 % für
first_API_level
>= 30
test_burst_sameness_manual_mean.jpg
test_burst_sameness_manual_plot_means.png
test_capture_result
Testet, ob gültige Daten in CaptureResult
Objekten zurückkommen. Führt eine automatische, manuelle und automatische Erfassung durch.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Bestanden: Metadaten sind für alle Aufnahmen gültig und die manuellen Einstellungen dringen nicht in die zweite automatische Aufnahme ein. Stellt die Korrektur der Linsenschattierung für die Aufnahmen dar.
test_capture_result_plot_lsc_auto_ch0.png
test_crop_region_raw
Testet, dass die RAW-Streams nicht zugeschnitten werden können.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Bestanden: YUV-Bilder werden mittig beschnitten, RAW-Bilder jedoch nicht.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
Testet, ob Anbauregionen funktionieren. Nimmt ein vollständiges Bild auf und erstellt Patches aus 5 verschiedenen Regionen (Ecken und Mitte). Nimmt Bilder mit einem für die 5 Regionen festgelegten Zuschnitt auf. Vergleicht die Patch- und Zuschneidebildwerte.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Bestanden: Das Bild des zugeschnittenen Bereichs entspricht dem Patch, der dem zugeschnittenen Bild entspricht.
test_dng_noise_model
Überprüft, ob die DNG-Rohmodellparameter korrekt sind. Das Diagramm zeigt die gemessene Varianz eines mittleren Bereichs der Graukarte in Rohaufnahmen, die über einen Bereich von Empfindlichkeiten aufgenommen wurden, und vergleicht diese Werte mit der Varianz, die bei jeder Empfindlichkeit vom DNG-Rauschmodell im Kamera-HAL erwartet wird (basierend auf O,S-Parameter, die in den Capture-Ergebnisobjekten zurückgegeben werden). Für weitere Einzelheiten zum DNG-Lärmmodell laden Sie das folgende Dokument zum DNG-Lärmmodell herunter.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Bestanden: DNG-Rohmodellparameter sind korrekt. Die erwarteten RGB-Werte stimmen mit den tatsächlich gemessenen RGB-Werten überein.
test_dng_noise_model_plog.png
test_ev_compensation_advanced
Testet, ob die Belichtungswertkorrektur (EV) angewendet wird. Der Test erhöht die Belichtung in acht Schritten und vergleicht die gemessene Helligkeit mit der erwarteten Helligkeit. Die erwarteten Werte werden aus der Bildhelligkeit des Bildes ohne angewendete EV-Kompensation berechnet und der erwartete Wert wird gesättigt, wenn die berechneten Werte den tatsächlichen Bildwertebereich überschreiten. Der Test schlägt fehl, wenn die erwarteten Werte und die gemessenen Werte nicht übereinstimmen oder Bilder innerhalb von fünf Schritten überbelichtet sind.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Bestanden: Bilder zeigen eine zunehmende Belichtung ohne Überbelichtung innerhalb von fünf Schritten.
test_ev_compensation_advanced_plot_means.png
test_ev_compensation_basic
Testet, ob die EV-Kompensation mithilfe eines mit CONTROL_AE_COMPENSATION_STEP
erstellten Bereichs angewendet wird. Bei jedem Kompensationswert werden acht Bilder erfasst.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Passen: Die Luma-Werte der Aufnahmen nehmen mit erhöhter EV-Kompensationseinstellung zu, und die acht Bilder, die für jede EV-Kompensationseinstellung aufgenommen wurden, weisen stabile Luma-Werte auf.
test_ev_compensation_basic.png
test_exposure
Testet, ob eine konstante Belichtung erreicht wird, da ISO und Belichtungszeit variieren. Nimmt eine Reihe von Aufnahmen auf, bei denen ISO und Belichtungszeit aufeinander abgestimmt sind. Die Ergebnisse sollten die gleiche Helligkeit haben, aber im Laufe der Sequenz sollte das Bild verrauschter werden. Überprüft, ob die Mittelwerte der Stichprobenpixel nahe beieinander liegen. Stellt sicher, dass die Bilder nicht auf 0 oder 1 beschränkt sind (wodurch sie wie flache Linien aussehen würden). Der Test kann auch mit RAW-Bildern ausgeführt werden, indem Sie das debug
Flag in Ihrer Konfigurationsdatei setzen.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Bestanden: Bilder haben die gleiche Helligkeit, werden aber mit höherem ISO-Wert stärker verrauscht. RGB-Ebenen sind flach, wenn der Wert von ISO*Belichtung über den getesteten Verstärkungsraum konstant ist.
test_exposure_plot_means.png
![]() | ![]() | |
test_exposure_mult=1.00.jpg | test_exposure_mult=64.00.jpg |
test_jpeg
Tests, bei denen YUV-Bilder und Geräte-JPEG-Bilder konvertiert wurden, sehen gleich aus. Der Test nimmt die mittleren 10 % des Bildes, berechnet den RGB-Wert und überprüft, ob sie übereinstimmen.
Getestete APIs:
Bestanden: Der durchschnittliche RGB-Unterschied zwischen den einzelnen Bildern beträgt weniger als 3 %.
![]() | ![]() | |
test_jpeg_fmt=jpg.jpg | test_jpeg=fmt=yuv.jpg |
test_latching
Testet, ob die Einstellungen (Belichtung und Verstärkung) für FULL
und LEVEL_3
Kameras im richtigen Bild einrasten. Nimmt eine Reihe von Aufnahmen mit aufeinanderfolgenden Anfragen auf und variiert die Parameter der Aufnahmeanfrage zwischen den Aufnahmen. Überprüft, ob die Bilder die erwarteten Eigenschaften haben.
Getestete APIs:
Bestanden: Bilder [2, 3, 6, 8, 10, 12, 13] haben einen erhöhten ISO-Wert oder eine erhöhte Belichtung und werden mit höheren RGB-Mittelwerten auf test_latching_plot_means.png
angezeigt.
![]() | ![]() | ![]() | |
test_latching_i=00.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
![]() | |||
test_latching_i=12.jpg |
test_latching_plot_means.png
test_linearität
Testet, ob die Geräteverarbeitung in lineare Pixel invertiert werden kann. Erfasst eine Folge von Schüssen, wobei das Gerät auf ein einheitliches Ziel gerichtet ist.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Bestanden: R-, G- und B-Werte müssen mit zunehmender Empfindlichkeit linear ansteigen.
test_linearity_plot_means.png
test_locked_burst
Testet 3A-Sperre und YUV-Burst (mit automatischer Einstellung). Dieser Test ist so konzipiert, dass er auch auf eingeschränkten Geräten besteht, die nicht über MANUAL_SENSOR
oder PER_FRAME_CONTROLS
verfügen. Der Test prüft die YUV-Bildkonsistenz, während die Bildratenprüfung in CTS erfolgt.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Bestanden: Die Aufnahmen sehen konsistent aus.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
test_param_color_correction
Testet, ob die android.colorCorrection.*
Parameter angewendet werden, wenn sie festgelegt sind. Nimmt Aufnahmen mit unterschiedlichen Transformations- und Verstärkungswerten auf und prüft, ob sie entsprechend unterschiedlich aussehen. Die Transformation und die Verstärkungen werden so gewählt, dass die Ausgabe zunehmend rot oder blau wird. Verwendet eine lineare Tonemap. Tone Mapping ist eine Technik, die in der Bildverarbeitung verwendet wird, um einen Farbsatz einem anderen zuzuordnen, um das Erscheinungsbild von Bildern mit hohem Dynamikumfang in einem Medium mit einem begrenzteren Dynamikumfang anzunähern.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Bestanden: R- und B-Werte erhöhen sich entsprechend der Transformation.
test_param_color_correction_plot_means.png
*Die x-Achse stellt die Erfassungsanforderungen dar: 0 = Einheit, 1 = roter Boost, 2 = blauer Boost
test_param_color_correction_req=0.jpg
test_param_color_correctness_req=1.jpg (R-Boost)
test_param_color_correction_req=2.jpg (B-Boost)
test_param_exposure_time
Testet, ob der Parameter android.sensor.exposureTime
angewendet wird.
Getestete APIs:
Pass: Jeder Schuss ist heller als der vorherige Schuss.
test_param_exposure_time_frame0.jpg
test_param_exposure_time_plot.png
test_param_flash_mode
Testet, ob der Parameter android.flash.mode
angewendet wird. Stellt die Belichtung manuell auf die dunkle Seite ein, sodass klar ist, ob der Blitz ausgelöst wurde oder nicht, und verwendet eine lineare Tontabelle. Überprüft die Mitte des Kachelbilds, um festzustellen, ob ein großer Farbverlauf erstellt wurde, um zu überprüfen, ob der Blitz ausgelöst wurde.
Getestete APIs:
Bestanden: Die Mitte des Kachelbildes weist einen großen Farbverlauf auf, was bedeutet, dass der Blitz ausgelöst wurde.
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
test_param_noise_reduction
Testet, ob der Parameter android.noiseReduction.mode
korrekt angewendet wird, wenn er festgelegt ist. Nimmt Bilder mit schwach beleuchteter Kamera auf. Verwendet eine hohe analoge Verstärkung, um sicherzustellen, dass das aufgenommene Bild verrauscht ist. Nimmt drei Bilder auf: NR aus, „schnell“ und „hohe Qualität“. Erfasst außerdem ein Bild mit geringer Verstärkung und ausgeschalteter Rauschunterdrückung und verwendet dessen Varianz als Basislinie. Je höher das SNR (Signal-Rausch-Verhältnis) ist, desto besser ist die Bildqualität.
Getestete APIs:
Bestanden: SNR variiert je nach Rauschunterdrückungsmodus und verhält sich ähnlich wie in der folgenden Grafik.
test_param_noise_reduction_plot_SNRs.png
0: AUS, 1: SCHNELL, 2: HQ, 3: MIN, 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_sensitivity
Testet, ob der Parameter android.sensor.sensitivity
angewendet wird. Der Test erhöht die Empfindlichkeit in 5 Stufen mit fester Belichtung für jede Aufnahme.
Getestete APIs:
Bestanden: RGB bedeutet, dass die Mitte 10 % mit erhöhter Empfindlichkeit heller wird.
test_param_sensitivity_iso=0055.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
test_param_shading_mode
Testet, ob der Parameter android.shading.mode
angewendet wird.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Bestanden: Die Schattierungsmodi werden umgeschaltet und die Linsenschattierungskarten werden wie erwartet geändert.
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
Testet, ob der Parameter android.tonemap.mode angewendet wird. Wendet unterschiedliche Tonemap-Kurven auf jeden R-, G- und B-Kanal an und prüft, ob die Ausgabebilder wie erwartet geändert werden. Dieser Test besteht aus zwei Tests, test1 und test2.
Getestete APIs:
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Passieren:
- test1: Beide Bilder haben eine lineare Tonemap, aber n=1 hat einen steileren Farbverlauf. Der G-Kanal (grün) ist für das n=1-Bild heller.
- test2: Gleiche Tonkarte, aber unterschiedliche Länge. Bilder sind gleich.
![]() | ![]() | |
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
test_post_raw_sensitivity_boost
Überprüft die Erhöhung der RAW-Empfindlichkeit. Erfasst eine Reihe von RAW- und YUV-Bildern mit unterschiedlicher Empfindlichkeit, veröffentlicht die Kombination zur Erhöhung der RAW-Empfindlichkeit und prüft, ob der Ausgabepixelmittelwert mit den Anforderungseinstellungen übereinstimmt.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Passen: RAW-Bilder werden mit zunehmender Verstärkung dunkler, während YUV-Bilder in der Helligkeit konstant bleiben
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
Erfasst eine Reihe von Rohbildern mit zunehmender Verstärkung und misst das Rauschen. Nimmt nur Rohdaten in einer Serie auf.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Pass: Jeder Schuss ist lauter als der vorherige Schuss, da die Verstärkung zunimmt.
Verwendet die Varianz der mittleren Statistik-Rasterzelle.
test_raw_burst_sensitivity_variance.png
test_raw_exposure
Erfasst eine Reihe von Rohbildern mit zunehmender Belichtungszeit und misst die Pixelwerte.
Getestete APIs:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Passen: Durch Erhöhen der ISO (Verstärkung) werden die Pixel lichtempfindlicher, sodass sich die Darstellung nach links verschiebt.
test_raw_exposure_s=55.png
(10⁰ ist 1 ms, 10¹ ist 10 ms, 10⁻¹ ist 0,1 ms)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_raw_sensitivity
Erfasst eine Reihe von Rohbildern mit zunehmender Empfindlichkeit und misst das Rauschen (Varianz) in den mittleren 10 % des Bildes. Testet, ob jeder Schuss lauter ist als der vorherige.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Pass: Die Varianz nimmt mit jedem Schuss zu.
test_raw_sensitivity_variance.png
test_reprocess_noise_reduction
Testet, ob android.noiseReduction.mode
auf Wiederverarbeitungsanforderungen angewendet wird. Erfasst erneut verarbeitete Bilder bei schwach beleuchteter Kamera. Verwendet eine hohe analoge Verstärkung, um sicherzustellen, dass das Aufnahmebild verrauscht ist. Erfasst drei neu verarbeitete Bilder: NR aus, „schnell“ und „hohe Qualität“. Erfasst ein erneut verarbeitetes Bild mit geringer Verstärkung und deaktivierter Rauschunterdrückung und verwendet dessen Varianz als Basislinie.
Getestete APIs:
Pass: FAST >= OFF, HQ >= FAST, HQ >> OFF
Typisches SNR-gegen-NR_MODE-Diagramm
test_tonemap_sequence
Testet eine Folge von Aufnahmen mit unterschiedlichen Tonemap-Kurven. Erfasst 3 manuelle Aufnahmen mit einer linearen Tonemap. Erfasst 3 manuelle Aufnahmen mit Standard-Tonemap. Berechnet das Delta zwischen jedem aufeinanderfolgenden Frame-Paar.
Getestete APIs:
Bestanden: Es gibt 3 identische Frames, gefolgt von einem anderen Satz von 3 identischen Frames.
test_tonemap_sequence_i=0.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
Testet, ob alle gemeldeten Größen und Formate für die Bilderfassung funktionieren. Verwendet eine manuelle Anfrage mit einer linearen Tonemap, sodass YUV und JPEG bei der Konvertierung durch das Modul image_processing_utils
gleich aussehen. Bilder werden nicht standardmäßig gespeichert, können aber durch Aktivieren von debug_mode
gespeichert werden.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Bestanden: Alle Bildzentren weisen einen maximalen RMS-Unterschied (Root-Mean-Square-Wert eines Signals) in RGB-konvertierten Bildern mit 3 % des YUV-Bildes mit der höchsten Auflösung auf.
test_yuv_jpeg_all.png
test_yuv_plus_dng
Testet, ob die angegebenen Größen und Formate für die Bilderfassung funktionieren.
Getestete APIs:
Bestanden: Der Test wird abgeschlossen und die angeforderten Bilder werden zurückgegeben.
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
Testet die Erfassung eines einzelnen Frames sowohl als YUV- als auch als JPEG-Ausgabe. Verwendet eine manuelle Anfrage mit einer linearen Tonemap, sodass YUV und JPEG bei der Konvertierung durch das Modul image_processing_utils
gleich aussehen.
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Bestanden: YUV- und JPEG-Bilder sind ähnlich und weisen einen RMS-Unterschied (Effektivwert eines Signals) von weniger als 1 % auf.
![]() | ![]() | |
test_yuv_plus_jpg_jpg.jpg | test_yuv_plus_jpeg_yuv.jpg |
test_yuv_plus_raw
Testet die Erfassung eines einzelnen Frames als RAW/RAW10/RAW12- und YUV-Ausgabe, sofern unterstützt. Verwendet eine manuelle Anfrage mit linearer Tonemap, sodass Roh- und YUV voraussichtlich gleich sind. Vergleicht die mittleren 10 %-RGB-Werte von RGB-konvertierten Bildern. Protokolliert android.shading.mode
.
Getestete APIs:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW10
-
android.hardware.graphics.ImageFormat#RAW12
Bestanden: YUV- und Rohbilder sind ähnlich und weisen einen RMS-Unterschied (Effektivwert eines Signals) von weniger als 3,5 % auf.
![]() | ![]() | |
test_yuv_plus_raw_shading=1_raw.jpg | test_yuv_plus_raw_shading=1_yuv.jpg |
scene2_a
scene2_a hat drei Gesichter mit grauem Hintergrund und neutraler Kleidung. Die Gesichter sind so ausgewählt, dass sie eine breite Palette an Hauttönen aufweisen. Damit die Gesichtserkennung optimal funktioniert, muss das Diagramm die richtige Ausrichtung haben.
scene2_a
test_auto_flash
Testet, ob der automatische Blitz in einer dunklen Szene ausgelöst wird. Überprüft, ob der automatische Blitz ausgelöst wird, indem überprüft wird, ob die Mitte des Kachelbilds einen großen Farbverlauf aufweist. Um den automatischen Blitz auszulösen, müssen das Tablet und die Lichter im Prüfstand ausgeschaltet sein. Das Tablet wird durch den Test ausgeschaltet und die Lichter können mit dem Arduino-Controller automatisch ausgeschaltet werden. Damit der Test ordnungsgemäß funktioniert, muss die Szene vollständig dunkel sein. Daher muss die hintere Tablet-Öffnung vollständig vom Szenen-Tablet abgedeckt werden und die vordere Öffnung muss von einer Blende und dem DUT-Telefon abgedeckt werden, um das Eindringen von Streulicht in das Rig zu verhindern.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Bestanden: Die Mitte des Kachelbildes weist einen großen Farbverlauf auf, was bedeutet, dass der automatische Blitz ausgelöst wurde.
test_autoframing
Testet das Autoframing-Verhalten des Kamerageräts. Führt einen großen Zoom durch, sodass keines der Gesichter in der Szene sichtbar ist, aktiviert den Autoframing-Modus, indem AUTOFRAMING
in CaptureRequest
auf True
gesetzt wird, und überprüft, ob alle Gesichter in der Originalszene erkannt werden können, wenn der Zustand konvergiert (d. h. wann AUTOFRAMING_STATE
in CaptureResult
ist auf AUTOFRAMING_STATE_CONVERGED
gesetzt.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
Bestanden: Alle drei Gesichter werden erkannt.
test_display_p3
Tests zeigen die P3 -Aufnahme in JPEG mithilfe der ColorSpaceProfiles
API an. Testet, ob das erfasste JPEG im Header ein geeignetes ICC-Profil aufweist und dass das Bild Farben außerhalb des sRGB-Farbraums enthält.
Getestete APIs:
-
android.hardware.camera2.params.ColorSpaceProfiles
-
android.hardware.camera2.params.SessionConfiguration#setColorSpace
Bestanden: Das JPEG enthält ein Display P3 ICC-Profil und Farben außerhalb des sRGB-Farbraums.
test_effekte
Erfasst Frames für unterstützte Kameraeffekte und prüft, ob diese korrekt generiert werden. Der Test überprüft nur die Effekte OFF
und MONO
, speichert aber Bilder für alle unterstützten Effekte.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
-
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Pass: Erfasst das Szenenbild mit OFF
Effekten und ein monochromes Bild mit auf MONO
eingestellten Effekten.
test_effects_MONO.jpg
test_format_combos
Testet verschiedene Kombinationen von Ausgabeformaten.
Getestete APIs:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
Bestanden: Alle Kombinationen wurden erfolgreich erfasst.
test_jpeg_quality
Testet die JPEG-Komprimierungsqualität der Kamera. Schritten Sie JPEG-Qualitäten durch android.jpeg.quality
und stellen Sie sicher, dass sich die Quantisierungstabellen korrekt ändern.
Getestete APIs:
Bestanden: Die Quantisierungsmatrix nimmt mit steigender Qualität ab. (Matrix stellt den Teilungsfaktor dar.)
Luma/Chroma-DQT-Matrix-Durchschnitt der Pixel 4-Rückkamera im Vergleich zur JPEG-Qualität
Beispiel für einen fehlgeschlagenen Test
Beachten Sie, dass es bei Bildern mit sehr geringer Qualität (jpeg.quality < 50) zu keiner Erhöhung der Komprimierung in der Quantisierungsmatrix kommt.
test_num_faces
Testet die Gesichtserkennung.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Passen: Findet drei Gesichter.
test_num_faces_fd_mode_1.jpg
test_preview_min_frame_rate
Testet, ob die Vorschaubildrate in einer dunklen Szene korrekt abnimmt. Damit dieser Test ordnungsgemäß funktioniert, müssen die Lichter im Prüfstand durch die Steuerung oder manuell durch den Prüfer ausgeschaltet werden.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
-
android.media.CamcorderProfile
-
android.media.MediaRecorder
Bestanden: Die Vorschaubildrate liegt am Minimum des angeforderten Bildratenbereichs und die Abweichung zwischen den Bildern ist geringer als die im Test festgelegte absolute Toleranz.
test_reprocess_uv_swap
Testet, dass bei der YUV-Wiederverarbeitung die U- und V-Ebenen nicht vertauscht werden. Dies wird durch die Berechnung der Summe der absoluten Differenzen (SAD) zwischen dem erneut verarbeiteten Bild und einer nicht erneut verarbeiteten Aufnahme erkannt. Wenn das Vertauschen der U- und V-Ausgabeebenen der erneut verarbeiteten Erfassung zu einem erhöhten SAD führt, wird davon ausgegangen, dass die Ausgabe die richtigen U- und V-Ebenen aufweist.
Getestete APIs:
-
android.hardware.camera2.CameraDevice#createCaptureSession
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Bestanden: Die U- und V-Ebenen werden nicht vertauscht.
test_reprocess_uv_swap.png
scene2_b
test_num_faces
Testet die Gesichtserkennung mit erhöhter Hauttonvielfalt in Gesichtsszenen.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Bestanden: Findet 3 Gesichter.
test_num_faces_fd_mode_1.jpg
test_yuv_jpeg_capture_sameness
Erfasst zwei Bilder mit den größten gängigen YUV- und JPEG-Formaten mit demselben Seitenverhältnis wie das größte JPEG-Format und einer Auflösung von nicht mehr als 1920 x 1440. Setzt jpeg.quality
auf 100 und erfasst eine Dual-Surface-Anfrage. Konvertiert beide Bilder in RGB-Arrays und berechnet die 3D-Effektivwertdifferenz (RMS) zwischen den beiden Bildern.
Getestete APIs:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
-
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
-
android.graphics.ImageFormat#JPEG
Bestanden: YUV- und JPEG-Bilder sind ähnlich und weisen einen RMS-Unterschied (Effektivwert eines Signals) von weniger als 1 % auf.
scene2_c
test_num_faces
Testet die Gesichtserkennung mit erhöhter Hauttonvielfalt in Gesichtsszenen.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Bestanden: Findet 3 Gesichter.
test_num_faces_fd_mode_1.jpg
test_jpeg_capture_perf_class
Testet die JPEG-Aufnahmelatenz für die S-Leistungsklasse, wie in Abschnitt 2.2.7.2 Kamera im CDD angegeben.
Bestanden: Die JPEG-Aufnahmelatenz von Kamera2 MUSS bei 1080p-Auflösung < 1000 ms betragen, gemessen durch den CTS-Kamera-PerformanceTest unter ITS-Lichtbedingungen (3000 K) für beide Primärkameras.
test_camera_launch_perf_class
Testet die Kamerastartlatenz für die S-Leistungsklasse gemäß Abschnitt 2.2.7.2 Kamera im CDD.
Bestanden: Die Startlatenz von Kamera2 (geöffnete Kamera bis zum ersten Vorschaubild) muss < 600 ms betragen, gemessen durch den CTS-Kamera-PerformanceTest unter ITS-Lichtbedingungen (3000 K) für beide Primärkameras.
scene2_d
test_num_faces
Testet die Gesichtserkennung mit erhöhter Hauttonvielfalt in Gesichtsszenen.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Bestanden: Findet 3 Gesichter.
scene2_e
test_continuous_picture
50 Frames mit VGA-Auflösung werden mit der ersten Einstellung der Aufnahmeanforderung android.control.afMode = 4 (CONTINUOUS_PICTURE).
Getestete APIs:
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Bestanden: 3A-System beruhigt sich am Ende einer 50-Frame-Aufnahme.
test_num_faces
Testet die Gesichtserkennung mit erhöhter Hauttonvielfalt in Gesichtsszenen.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Bestanden: Findet 3 Gesichter.
scene2_f
scene2_f hat drei Gesichter mit weißem Hintergrund und weißer Kleidung. Die Gesichter haben eine breite Palette an Hauttönen und einen hohen Kontrast zum Hintergrund.
scene2_f
test_num_faces
Testet die Gesichtserkennung mit erhöhter Hauttonvielfalt in Gesichtsszenen.
Getestete APIs:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Bestanden: Findet 3 Gesichter.
test_num_faces_fd_mode_1.jpg
Szene3
Scene3 uses the ISO12233 chart, and most tests use a chart extractor method to find the chart in the scene. For this reason, most of the saved images don't have borders like the images for scenes 1, 2 or 4, but only the chart. The chart must be in the correct orientation for the chart finder to work optimally.
test_3a_consistency
Tests for 3A consistency.
APIs tested:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Pass: 3A converges for exposure, gain, awb (auto white balance), and fd (focus distance) three times within tolerance.
test_edge_enhancement
Tests that the android.edge.mode
parameter is applied correctly. Captures non-reprocess images for each edge mode and returns sharpness of the output image and the capture result metadata. Processes a capture request with a given edge mode, sensitivity, exposure time, focus distance, and output surface parameter.
Pass: HQ
mode (2) sharper than OFF
mode (0). FAST
mode (1) sharper than OFF
mode. HQ
mode sharper or equal to FAST
mode.
APIs tested:
Impacted camera parameters:
-
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (fast mode)
test_edge_enhancement_edge=2.jpg (high quality mode)
test_flip_mirror
Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .
Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.
Pass: Image isn't flipped, mirrored or rotated.
test_flip_mirror_scene_patch.jpg
test_landscape_to_portrait
Tests if the landscape to portrait override functions correctly for landscape-oriented sensors.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
-
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
-
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Pass: The test is able to locate a chart with the expected rotation (0 degrees when the landscape to portrait override is disabled, 90 degrees when enabled).
test_landscape_to_portrait.png
test_lens_movement_reporting
Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilizes as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first few frames with the lens stationary at optimum focal distance, and the final few frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass: Lens movement flag is True
in the frame with sharpness change.
Fail mechanisms:
-
lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) intest_log.DEBUG
is asserted only in frames where sharpness isn't changing. - Frames with
lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) intest_log.DEBUG
has a sharpness difference compared to the first few frames at optimum focal distance or the last few frames at minimum focus distance.
test_reprocess_edge_enhancement
Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.
APIs tested:
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Pass: Sharpness for the different edge modes is correct. HQ
(mode 2) is sharper than OFF
(mode 0), and improvement between different modes is similar.
test_reprocess_edge_enhancement_plot.png
scene4
Scene4 consists of a black circle on a white background inside a square.
scene4
test_aspect_ratio_and_crop
Tests if images are distorted or cropped unexpectedly in the image pipeline. Takes pictures of a circle over all formats. Verifies the circle isn't distorted, the circle doesn't move from the center of image, and the circle doesn't change size incorrectly with different aspect ratios or resolutions.
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
Fail mechanisms:
- The circle in the captured image is distorted by the processing pipeline.
- Lower resolution image is double cropped in the image pipeline creating different FoV between high and low resolution images.
- The circle in the captured image is cropped due to an extreme aspect ratio capture request reducing the height or width of the image.
- The circle in the captured image has a reflection in the center and doesn't appear fully filled.
test_multi_camera_alignment
Tests the camera calibration parameters related to camera positioning for multi-camera systems. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Pass: Circle centers and sizes are as expected in projected images compared to captured images using camera calibration data and focal lengths.
Fail mechanisms:
-
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
, orLENS_POSE_ROTATION
are design values and not actual calibration data. - The camera system isn't appropriate for the test setup. For example, testing a wide and an ultra-wide camera system with the RFoV test rig. For more information, see Camera ITS-in-a-box FAQ1 .
test_preview_aspect_ratio_and_crop
Similar to the test_aspect_ratio_and_crop test for still captures, this test checks the supported preview formats to ensure the preview frames aren't stretched or cropped inappropriately. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center of the frame, and the circle size doesn't change for a constant format or with different resolutions (field of view check).
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
test_preview_stabilization_fov
Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON
, and another with preview stabilization OFF
. A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%.
test_video_aspect_ratio_and_crop
Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
scene5
Scene5 requires a uniformly lit gray scene. This is accomplished by a diffuser placed over the camera lens. We recommend the following diffuser: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
To prepare the scene, attach a diffuser in front of the camera and point the camera to a lighting source of around 2000 lux. Images captured for scene5 require diffuse lighting with no features evident. The following is a sample image:
scene5 capture
test_lens_shading_and_color_uniformity
Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.
scene6
Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.
scene6
test_in_sensor_zoom
Tests the behavior of the camera in-sensor zoom feature, which produces cropped RAW images.
With the stream use case set to CROPPED_RAW
, the test takes two captures over the zoom range, a full field of view (FoV) RAW image and a cropped RAW image. The test converts the images to RGB arrays, downscales the full-sized cropped RAW image to the size reported by SCALER_RAW_CROP_REGION
, and calculates the 3D root mean square (RMS) difference between the two images.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Pass: The 3D root mean square (RMS) difference between the downscaled cropped RAW image and the full FoV RAW image is less than 1%.
test_zoom
Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.
test_zoom to find the contour of the circle closest to the center.
test_low_latency_zoom
Tests the camera low latency zoom behavior. Takes captures over the zoom range with android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
, and checks if the circles in the output images match the zoom ratios in the capture metadata.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Pass: Relative size of captured circle is accurate against the zoom ratio result metadata.
test_preview_video_zoom_match
Tests that while recording and zooming, video preview and video output display and record the same output. Calculates the size of the circle closest to the center at different zoom ratios and checks whether the size of the circle increases as the zoom ratio increases.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio in video and preview.
VGA_640x480_key_frame.png (before zoom)
preview_640x480_key_frame.png (before zoom)
VGA_640x480_key_frame.png (after zoom)
preview_640x480_key_frame.png (after zoom)
scene_extensions
The scene_extensions
tests are for camera extensions and must use Camera ITS-in-a-Box , as they require precise control of the testing environment.
scene_hdr
The scene_hdr
scene consists of a portrait on the left and a low-contrast QR code on the right.
scene_hdr
test_hdr_extension
Tests the HDR extension . Takes captures with and without the extension enabled, and checks if the extension makes the QR code more detectable.
APIs tested:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Pass: The HDR extension reduces the number of contrast changes needed to detect the QR code or reduces the gradient across the QR code.
scene_night
The scene_night
scene consists of a white circle with four smaller circles inside of it, all against a black background. The smaller circle in the top right corner is darker than the others to indicate orientation.
scene_night
test_night_extension
Tests the Night extension . Takes captures with and without the extension enabled, and checks for the following:
- The capture with the Night extension enabled takes longer.
- The capture with the Night extension enabled is brighter or has scene artifacts with an improved appearance.
APIs tested:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Pass: Compared to a capture without the Night extension enabled, a capture with the Night extension enabled takes at least 0.5 seconds longer. The capture must be at least 10% brighter, or the gray dots in the scene must be 20 pixel values lower than the surrounding circle's center.
sensor_fusion
Sensor fusion tests require specific phone movement in front of a checkerboard pattern. For optimum results, ensure the test chart is mounted flat. Charts that aren't flat affect the rotation calculations for many of the tests. The sensor_fusion
tests can be automated with the Sensor Fusion Box .
Image of checkerboard
test_multi_camera_frame_sync
Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.
test_preview_stabilization
Tests that stabilized preview video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_sensor_fusion
Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME
parameter is not enabled.
The test_sensor_fusion
test generates a number of plots. The two most important plots for debugging are:
test_sensor_fusion_gyro_events
: Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.test_sensor_fusion_plot_rotations
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_FACING
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .
Fail mechanisms:
- Offset error: The camera-gyroscope offset isn't correctly calibrated to within +/-1 ms.
- Frame drops: The pipeline isn't fast enough to capture 200 frames consecutively.
- Socket errors:
adb
can't reliably connect to the DUT long enough to execute the test. - The chart isn't mounted flat. The plot
test_sensor_fusion_plot_rotations
has frames where the gyroscope and camera rotation vary considerably as the camera rotates through the parts of the chart that aren't flat. - The camera isn't mounted flat. The plot
test_sensor_fusion_gyro_events
shows movement in the X and Y planes. This failure is more common in front-facing cameras as the rear camera often has a raised bump to the rest of the phone body, creating a tilt when mounting the rear of the phone to the mounting plate.
test_video_stabilization
Tests that stabilized video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_led_snapshot
Tests that the LED snapshots don't saturate or tint the image.
This test adds a lighting controller to the sensor fusion box to control the lights. With the lights set to OFF
, the test takes a capture with the AUTO_FLASH
mode set to ON
. During this capture, the test runs a precapture sequence with the aePrecapture
trigger set to START
, and sets the capture intent to Preview
to take the capture with flash.
Because the capture has a distinctive hotspot due to flash, the test computes the flash image mean of the entire capture and verifies whether the value is within the (68, 102) range. To check if the image is reasonably white-balanced, the test calculates the R/G and B/G ratios and verifies whether the ratios are within 0.95 and 1.05.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass: The R/G and B/G ratios are within 0.95 and 1.05. The flash image mean is within the (68, 102) range.