Kamera-ITS-Tests

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_gyro_bias_plot.png

test_jitter

Misst Jitter in Kamera-Zeitstempeln.

Getestete APIs:

Bestanden: Zwischen den Frames liegt ein Abstand von mindestens 30 ms.

test_jitter_plot.png

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:

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:

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:

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:

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:

  1. Erfasst Bilder für alle unterstützten Testmuster.
  2. Führt eine einfache Korrektheitsprüfung für Volltontestmuster und Farbbalken durch.

Getestete APIs:

Bestanden: Unterstützte Testmuster werden korrekt generiert.

test_test_patterns_2

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:

Passen: YUV und RAW sehen einander ähnlich aus.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

Testet, ob Bild- und Bewegungssensorereignisse im selben Zeitbereich liegen.

Getestete APIs:

Bestanden: Bewegungszeitstempel liegen zwischen den beiden Bildzeitstempeln.

test_vibration_restriction

Testet, ob die Vibration des Geräts wie erwartet funktioniert.

Getestete APIs:

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

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:

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:

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:

Pass: AE konvergiert.

test_auto_vs_manual

Tests, bei denen automatische und manuelle Aufnahmen gemacht wurden, sehen gleich aus.

Getestete APIs:

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

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

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:

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_blacktest_black_white_black
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

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:

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

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

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:

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

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Testet, dass die RAW-Streams nicht zugeschnitten werden können.

Getestete APIs:

Bestanden: YUV-Bilder werden mittig beschnitten, RAW-Bilder jedoch nicht.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

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:

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:

Bestanden: DNG-Rohmodellparameter sind korrekt. Die erwarteten RGB-Werte stimmen mit den tatsächlich gemessenen RGB-Werten überein.

test_dng_noise_model_plog

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:

Bestanden: Bilder zeigen eine zunehmende Belichtung ohne Überbelichtung innerhalb von fünf Schritten.

test_ev_compensation_advanced_plot_means

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:

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

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:

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

test_exposure_plot_means.png

test_exposure_mult=1,00test_exposure_mult=64,00
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.jpgtest_jpeg=fmt=yuv.jpg
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.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

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:

Bestanden: R-, G- und B-Werte müssen mit zunehmender Empfindlichkeit linear ansteigen.

test_linearity_plot_means

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:

Bestanden: Die Aufnahmen sehen konsistent aus.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

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:

Bestanden: R- und B-Werte erhöhen sich entsprechend der Transformation.

test_param_color_correction_plot_means

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

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (R-Boost)

test_param_color_correction_req=2

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

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

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

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

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

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

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

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

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

Testet, ob der Parameter android.shading.mode angewendet wird.

Getestete APIs:

Bestanden: Die Schattierungsmodi werden umgeschaltet und die Linsenschattierungskarten werden wie erwartet geändert.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

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:

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.jpgtest_param_tonemap_mode_n=1.jpg
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:

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

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

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:

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

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Erfasst eine Reihe von Rohbildern mit zunehmender Belichtungszeit und misst die Pixelwerte.

Getestete APIs:

Passen: Durch Erhöhen der ISO (Verstärkung) werden die Pixel lichtempfindlicher, sodass sich die Darstellung nach links verschiebt.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ ist 1 ms, 10¹ ist 10 ms, 10⁻¹ ist 0,1 ms)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

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:

Pass: Die Varianz nimmt mit jedem Schuss zu.

test_raw_sensitivity_variance

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

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

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

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:

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

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

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:

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.jpgtest_yuv_plus_jpeg_yuv.jpg
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:

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.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
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

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:

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:

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:

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:

Pass: Erfasst das Szenenbild mit OFF Effekten und ein monochromes Bild mit auf MONO eingestellten Effekten.

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

Testet verschiedene Kombinationen von Ausgabeformaten.

Getestete APIs:

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

test_jpeg_quality

Luma/Chroma-DQT-Matrix-Durchschnitt der Pixel 4-Rückkamera im Vergleich zur JPEG-Qualität

test_jpeg_quality ist fehlgeschlagen

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:

Passen: Findet drei Gesichter.

test_num_faces_fd_mode_1

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:

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:

Bestanden: Die U- und V-Ebenen werden nicht vertauscht.

test_reprocess_uv_swap

test_reprocess_uv_swap.png

scene2_b

test_num_faces

Testet die Gesichtserkennung mit erhöhter Hauttonvielfalt in Gesichtsszenen.

Getestete APIs:

Bestanden: Findet 3 Gesichter.

test_num_faces_fd_mode_1

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:

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:

Bestanden: Findet 3 Gesichter.

test_num_faces_fd_mode_1

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:

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:

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:

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

scene2_f

test_num_faces

Testet die Gesichtserkennung mit erhöhter Hauttonvielfalt in Gesichtsszenen.

Getestete APIs:

Bestanden: Findet 3 Gesichter.

test_num_faces_fd_mode_1

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:

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

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (fast mode)

test_edge_enhancement_edge=2

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

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:

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

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:

Pass: Lens movement flag is True in the frame with sharpness change.

Fail mechanisms:

  • lens_moving: True ( android.hardware.camera2.CaptureResult#LENS_STATE = 1) in test_log.DEBUG is asserted only in frames where sharpness isn't changing.
  • Frames with lens_moving: False ( android.hardware.camera2.CaptureResult#LENS_STATE = 0) in test_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:

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

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 consists of a black circle on a white background inside a square.

scene4

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:

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:

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 , or LENS_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:

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:

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:

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

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:

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

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:

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:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

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:

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:

Pass: Relative size of captured circle is accurate against requested zoom ratio in video and preview.

VGA_640x480_key_frame.png

VGA_640x480_key_frame.png (before zoom)

preview_640x480_key_frame.png

preview_640x480_key_frame.png (before zoom)

VGA_640x480_key_frame_zoomed.png

VGA_640x480_key_frame.png (after zoom)

preview_640x480_key_frame_zoomed.png

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

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:

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

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:

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 .

checkerboard

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:

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:

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

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

    test_sensor_fusion_plot_rotations

APIs tested:

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:

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:

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.