Test ITS della fotocamera

Questa pagina fornisce un elenco completo dei test di Camera Image Test Suite (ITS), che fa parte di Android Compatibility Test Suite (CTS) Verifier. I test ITS sono test funzionali, nel senso che non misurano la qualità dell'immagine, ma controllano che tutte le funzioni pubblicizzate della fotocamera funzionino come previsto. Questo documento consente agli sviluppatori e ai tester di comprendere cosa fanno i singoli test e come eseguire il debug degli errori di test.

I controlli ITS della fotocamera eseguono test in base alle proprietà richieste della fotocamera, al livello API e al livello MPC (Media Performance Class). Per il livello API, ITS utilizza ro.product.first_api_level per controllare i test aggiunti in un livello API specifico che verificano esperienze utente negative per funzionalità nei livelli API inferiori. ITS utilizza ro.vendor.api_level per eseguire test per funzionalità aggiunte in un livello API specifico che richiedono nuove funzionalità hardware. Se per un dispositivo è definito ro.odm.build.media_performance_class , ITS richiede l'esecuzione di test specifici a seconda del livello MPC.

I test sono raggruppati per scena come segue:

  • scene0 : cattura metadati, jitter, giroscopio, vibrazione
  • scena1 : esposizione, sensibilità, compensazione EV, YUV vs JPEG/RAW
  • scene2 : rilevamento dei volti, test che richiedono scene a colori o oscurità completa
  • scena3 : miglioramento dei bordi, movimento dell'obiettivo
  • scena4 : proporzioni, ritaglio, campo visivo
  • scena5 : ombreggiatura della lente
  • scena6 : zoom
  • scene_extensions : estensioni della fotocamera
  • sensor_fusion : offset temporale della fotocamera/giroscopio

Vedere le singole sezioni per una descrizione di ciascuna scena.

scena0

I test Scene0 non richiedono informazioni specifiche sulla scena. Tuttavia, il telefono deve essere fermo per i test del giroscopio e delle vibrazioni.

test_burst_capture

Verifica che l'intera pipeline di acquisizione possa tenere il passo con la velocità dell'acquisizione a dimensione intera e con il tempo della CPU.

API testate:

Superato: cattura una raffica di immagini a grandezza naturale e la fotocamera è sufficientemente veloce da evitare il timeout.

test_capture_result_dump

Verifica che un risultato di acquisizione venga restituito da un'acquisizione manuale e quindi lo scarica.

API testate:

Superato: completa l'acquisizione e scarica i risultati dell'acquisizione.

test_gyro_bias

Verifica se il giroscopio ha un'uscita stabile quando il dispositivo è fermo. I dati vengono tracciati come una media di 20 punti dati.

API testate:

Superato: il delta della lettura del giroscopio è inferiore a 0,01 nel tempo.

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

Misura il jitter nei timestamp della fotocamera.

API testate:

Passato: c'è almeno un delta di 30 ms tra i fotogrammi.

test_jitter_plot.png

test_jitter_plot.png (Nota il piccolo intervallo dell'asse y. Il jitter è in realtà piccolo in questo grafico.)

test_metadati

Verifica la validità delle voci di metadati. Osserva i risultati dell'acquisizione e le caratteristiche degli oggetti della fotocamera. Questo test utilizza l'esposizione auto_capture_request e i valori di guadagno perché il contenuto dell'immagine non è importante.

API testate:

Superato: livello hardware, rollingShutterSkew , tag frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FoV, distanza iperfocale sono presenti e hanno valori validi.

test_param_sensitivity_burst

Verifica che il parametro android.sensor.sensitivity sia applicato correttamente nel burst. Esamina solo i metadati di output.

API testate:

Superato: i dati di output hanno una tolleranza di errore inferiore allo 0,2%.

prova_leggi_scrivi

Verifica che il dispositivo scriva i valori di esposizione e guadagno corretti rileggendo i metadati di acquisizione.

API testate:

Passaggio: i valori di lettura e scrittura corrispondono in tutti i colpi.

test_sensore_eventi

Verifica che il dispositivo esegua query e stampi gli eventi dei sensori per i dispositivi che pubblicizzano il supporto della fusione dei sensori. I sensori previsti sono accelerometro, giroscopio e magnetometro. Questo test funziona solo se lo schermo è acceso, ovvero il dispositivo non è in modalità standby.

API testate:

Superato: vengono ricevuti gli eventi per ciascun sensore.

test_solid_color_test_pattern

Verifica che i modelli di test a colori solidi vengano generati correttamente per la disattivazione dell'audio della fotocamera. Se è supportata la disattivazione dell'audio della fotocamera, devono essere supportati i modelli di prova a colori solidi. Se la disattivazione dell'audio della fotocamera non è supportata, i modelli di prova a colori solidi vengono testati solo se la funzionalità viene pubblicizzata.

Se sono supportate le immagini RAW, viene testata anche l'assegnazione dei colori. I colori testati sono nero, bianco, rosso, blu e verde. Per le fotocamere che non supportano le immagini RAW, viene testato solo il nero.

API testate:

Superato: i modelli di prova solidi supportati sono del colore corretto e la varianza nell'immagine è bassa.

test_modello_test

Testa il parametro android.sensor.testPatternMode per acquisire fotogrammi per ogni modello di test valido e controlla che i fotogrammi siano generati correttamente per i colori solidi e le barre dei colori. Questo test include i seguenti passaggi:

  1. Cattura immagini per tutti i modelli di test supportati.
  2. Esegue un semplice controllo di correttezza per il modello di prova del colore solido e le barre di colore.

API testate:

Superato: i modelli di test supportati vengono generati correttamente.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Verifica la conversione del pattern di prova da RAW a YUV con tonemap lineare. Questo test richiede android.sensor.testPatternMode = 2 (COLOR_BARS) per generare un modello di immagine perfetto per la conversione della mappa tonale. Garantisce che la pipeline abbia output di colore adeguati con mappatura dei toni lineare e input di immagine ideale (si basa su test_test_patterns ).

API testate:

Superato: YUV e RAW sembrano simili tra loro.

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

Verifica se gli eventi del sensore di immagine e di movimento si trovano nello stesso dominio temporale.

API testate:

Superato: i timestamp del movimento sono compresi tra i due timestamp dell'immagine.

test_vibrazione_restrizione

Verifica se la vibrazione del dispositivo funziona come previsto.

API testate:

Superato: il dispositivo non vibra quando l'audio viene disattivato dall'API di limitazione dell'audio della fotocamera.

scena 1

scene1 è un grafico grigio. Il grafico grigio deve coprire il 30% centrale del campo visivo della telecamera. Si prevede che il grafico grigio sfiderà moderatamente 3A (esposizione automatica, bilanciamento automatico del bianco, messa a fuoco automatica) poiché la regione centrale non ha caratteristiche. Tuttavia, la richiesta di acquisizione specifica l'intera scena che include funzionalità sufficienti per la convergenza di 3A.

Le telecamere RFoV possono essere testate nel WFoV o nel banco di prova RFoV. Se una telecamera RFoV viene testata nel banco di prova WFoV, il grafico viene ridimensionato di ⅔ per garantire alcuni limiti per il grafico grigio nel FoV per aiutare 3A a convergere. Per descrizioni più dettagliate dei banchi di prova delle fotocamere, vedere Camera ITS-in-a-box .

scena 1

scena1: grafico a grandezza naturale (a sinistra). ⅔ grafico in scala (a destra).

prova_3a

Verifica la convergenza di 3A con un obiettivo moderatamente impegnativo.

API testate:

Superato: 3A converge e i valori 3A restituiti sono validi.

test_ae_af

Testa singolarmente gli algoritmi di esposizione automatica (AE) e messa a fuoco automatica (AF) 3A.

API testate:

Superato: 3A converge e i valori 3A restituiti sono legali.

test_ae_precapture_trigger

Verifica la macchina a stati AE quando si utilizza il trigger di preacquisizione. Cattura cinque richieste manuali con AE disabilitato. L'ultima richiesta ha un trigger di preacquisizione AE, che deve essere ignorato perché AE è disabilitato.

API testate:

Passato: AE converge.

test_auto_vs_manual

I test che hanno effettuato scatti automatici e manuali sembrano uguali.

API testate:

Superato: i guadagni e la trasformazione del bilanciamento del bianco manuale riportati in ogni risultato di acquisizione corrispondono alla estimate del bilanciamento del bianco automatico dall'algoritmo 3A della fotocamera.

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

prova_nero_bianco

Verifica che il dispositivo produca immagini completamente in bianco e nero. Effettua due scatti, il primo con guadagno estremamente basso e esposizione breve, che dà come risultato una foto nera, e il secondo con guadagno estremamente alto e esposizione lunga, che dà come risultato una foto bianca.

API testate:

Superato: produce immagini in bianco e nero. I canali saturati delle immagini bianche hanno valori RGB di [255, 255, 255] con un margine di errore inferiore all'1% di differenza.

prova_nero_bianco_neroprova_nero_bianco_nero
prova_nero_bianco_nero.jpg prova_nero_bianco_bianco.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

Scatta 5 raffiche di 50 immagini con impostazione di acquisizione manuale e controlla che siano tutte identiche. Questo test può essere utilizzato per identificare se sono presenti frame sporadici elaborati in modo diverso o che presentano artefatti.

API testate:

Superato: le immagini sono identiche visivamente e nei valori RGB.

Fallito: mostra un picco o un calo del grafico della media RGB all'inizio di ogni burst

  • La tolleranza è del 3% per first_API_level < 30
  • La tolleranza è del 2% per 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_cattura_risultato

Verifica che i dati validi ritornino negli oggetti CaptureResult . Esegue un'acquisizione automatica, manuale e automatica.

API testate:

Superato: i metadati sono validi per tutte le acquisizioni e le impostazioni manuali non vengono diffuse nella seconda acquisizione automatica. Traccia la correzione dell'ombreggiatura dell'obiettivo per le acquisizioni.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Verifica che i flussi RAW non siano ritagliabili.

API testate:

Superato: le immagini YUV vengono ritagliate al centro ma non le immagini RAW.

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

Verifica il funzionamento delle regioni coltivate. Scatta un'immagine completa e crea patch di 5 regioni diverse (angoli e centro). Scatta immagini con ritaglio impostato per le 5 regioni. Confronta i valori della patch e dell'immagine ritagliata.

API testate:

Superato: l'immagine della regione ritagliata corrisponde alla patch che corrisponde all'immagine ritagliata.

test_dng_noise_model

Verifica che i parametri del modello non elaborato DNG siano corretti. Il grafico illustra la varianza misurata di una zona centrale del cartoncino grigio negli scatti grezzi catturati in un intervallo di sensibilità e confronta questi valori con la varianza prevista per ciascuna sensibilità dal modello di rumore DNG nell'HAL della fotocamera (basato sul Parametri O,S restituiti negli oggetti risultato dell'acquisizione). Per maggiori dettagli sul modello di rumore DNG, scaricare il seguente documento sul modello di rumore DNG .

API testate:

Superato: i parametri del modello grezzo DNG sono corretti. I valori RGB previsti corrispondono a quelli dei valori RGB effettivi misurati.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Verifica che venga applicata la compensazione del valore di esposizione (EV). Il test aumenta l'esposizione in otto passaggi e controlla la luminosità misurata rispetto alla luminosità prevista. I valori attesi vengono calcolati dalla luminosità dell'immagine senza compensazione EV applicata e il valore atteso si saturerà se i valori calcolati superano l'intervallo di valori dell'immagine effettiva. Il test fallisce se i valori attesi e quelli misurati non corrispondono o se le immagini sono sovraesposte entro cinque passaggi.

API testate:

Superato: le immagini mostrano un'esposizione crescente senza sovraesporre entro cinque passaggi.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Verifica che la compensazione EV venga applicata utilizzando un intervallo creato con CONTROL_AE_COMPENSATION_STEP . Vengono catturati otto fotogrammi per ciascun valore di compensazione.

API testate:

Superato: acquisisce l'aumento di luminanza con un'impostazione di compensazione EV aumentata e gli otto fotogrammi catturati per ciascuna impostazione di compensazione EV hanno valori di luminanza stabili.

test_ev_compensation_basic

test_ev_compensation_basic.png

prova_esposizione

Verifica che venga ottenuta un'esposizione costante al variare dell'ISO e del tempo di esposizione. Effettua una serie di scatti con ISO e tempo di esposizione scelti per bilanciarsi a vicenda. I risultati dovrebbero avere la stessa luminosità, ma durante la sequenza l'immagine dovrebbe diventare più rumorosa. Verifica che i valori medi dei pixel campione siano vicini tra loro. Garantisce che le immagini non siano fissate a 0 o 1 (il che le farebbe apparire come linee piatte). Il test può essere eseguito anche con immagini RAW impostando il flag debug nel file di configurazione.

API testate:

Superato: le immagini hanno la stessa luminosità, ma diventano più rumorose con ISO più elevati. I piani RGB sono piatti quando il valore dell'esposizione ISO* è costante nello spazio di guadagno testato.

test_esposizione_trama_mezzi

test_exposure_plot_means.png

test_esposizione_mult=1.00test_esposizione_mult=64.00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

prova_jpeg

I test che hanno convertito le immagini YUV e le immagini JPEG del dispositivo sembrano uguali. Il test prende il 10% centrale dell'immagine, calcola il valore RGB e verifica che corrispondano.

API testate:

Superato: la differenza RGB media tra ciascuna immagine è inferiore al 3%.

test_jpeg_fmt=jpg.jpgtest_jpeg=fmt=yuv.jpg
test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg

test_latching

Verifica che le impostazioni (esposizione e guadagno) si blocchino sul fotogramma destro per le fotocamere FULL e LEVEL_3 . Esegue una serie di scatti utilizzando richieste consecutive, variando i parametri della richiesta di acquisizione tra uno scatto e l'altro. Verifica che le immagini abbiano le proprietà previste.

API testate:

Superato: le immagini [2, 3, 6, 8, 10, 12, 13] hanno ISO o esposizione aumentati e vengono visualizzate con valori RGB più elevati su test_latching_plot_means.png .

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

prova_linearità

Verifica che l'elaborazione del dispositivo possa essere invertita in pixel lineari. Cattura una sequenza di scatti con il dispositivo puntato su un bersaglio uniforme.

API testate:

Superato: i valori R, G, B devono aumentare linearmente con l'aumentare della sensibilità.

test_linearità_trama_mezzi

test_linearity_plot_means.png

test_locked_burst

Verifica il blocco 3A e il burst YUV (utilizzando l'impostazione automatica). Questo test è progettato per superare anche su dispositivi limitati che non dispongono MANUAL_SENSOR o PER_FRAME_CONTROLS . Il test verifica la coerenza dell'immagine YUV mentre il controllo del frame rate è in CTS.

API testate:

Superato: le acquisizioni sembrano coerenti.

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

Verifica che i parametri android.colorCorrection.* vengano applicati quando impostati. Effettua riprese con valori di trasformazione e guadagno diversi e verifica che abbiano un aspetto corrispondentemente diverso. La trasformazione e i guadagni vengono scelti per rendere l'output sempre più rosso o blu. Utilizza una mappa tonale lineare. La mappatura dei toni è una tecnica utilizzata nell'elaborazione delle immagini per mappare un set di colori su un altro per approssimare l'aspetto delle immagini ad alta gamma dinamica in un mezzo che ha una gamma dinamica più limitata.

API testate:

Superato: i valori R e B aumentano in base alla trasformazione.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*L'asse x rappresenta le richieste di acquisizione: 0 = unità, 1=potenziamento rosso, 2=potenziamento blu

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 (aumento R)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (aumento B)

test_param_exposure_time

Verifica che il parametro android.sensor.exposureTime sia applicato.

API testate:

Superato: ogni scatto è più luminoso del precedente.

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

Verifica che il parametro android.flash.mode sia applicato. Imposta manualmente l'esposizione sul lato scuro, in modo che sia ovvio se il flash si è attivato o meno e utilizza una mappa tonale lineare. Controlla il centro con l'immagine del riquadro per vedere se è stato creato un gradiente ampio per verificare se il flash è stato attivato.

API testate:

Superato: il centro dell'immagine del riquadro ha un gradiente ampio, il che significa che il flash è stato attivato.

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

Verifica che il parametro android.noiseReduction.mode venga applicato correttamente quando impostato. Cattura immagini con la fotocamera scarsamente illuminata. Utilizza un guadagno analogico elevato per garantire che l'immagine catturata sia rumorosa. Cattura tre immagini, per NR disattivato, "veloce" e "alta qualità". Cattura anche un'immagine con guadagno basso e NR disattivato e utilizza la varianza di questa come linea di base. Maggiore è l'SNR (rapporto segnale/rumore), migliore è la qualità dell'immagine.

API testate:

Superato: l'SNR varia a seconda delle diverse modalità di riduzione del rumore e si comporta in modo simile al grafico seguente.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: SPENTO, 1: VELOCE, 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_sensibilità

Verifica che il parametro android.sensor.sensitivity sia applicato. Il test aumenta la sensibilità in 5 step con esposizione fissa per ogni scatto.

API testate:

Superato: la media RGB del 10% centrale diventa più luminosa con una maggiore sensibilità.

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

Verifica che il parametro android.shading.mode sia applicato.

API testate:

Superato: le modalità di ombreggiatura vengono cambiate e le mappe di ombreggiatura dell'obiettivo vengono modificate come previsto.

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

Verifica che il parametro android.tonemap.mode sia applicato. Applica diverse curve di mappatura dei toni a ciascun canale R, G, B e controlla che le immagini di output vengano modificate come previsto. Questo test è composto da due test, test1 e test2.

API testate:

Passaggio:

  • test1: entrambe le immagini hanno una mappa tonale lineare, ma n=1 ha una pendenza più ripida. Il canale G (verde) è più luminoso per l'immagine n=1.
  • test2: stessa mappa tonale, ma lunghezza diversa. Le immagini sono le stesse.
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

Controlla l'aumento della sensibilità RAW successiva. Cattura una serie di immagini RAW e YUV con sensibilità diversa, pubblica la combinazione di aumento della sensibilità RAW e controlla se la media dei pixel di output corrisponde alle impostazioni richieste.

API testate:

Superato: le immagini RAW diventano più scure all'aumentare dell'aumento mentre le immagini YUV rimangono costanti in termini di luminosità

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_sensibilità

Cattura una serie di immagini grezze con guadagni crescenti e misura il rumore. Cattura solo raw, in una raffica.

API testate:

Passaggio: ogni tiro è più rumoroso del tiro precedente, poiché il guadagno aumenta.

Utilizza la varianza della cella della griglia delle statistiche centrali.

test_raw_burst_sensibilità_varianza

test_raw_burst_sensitivity_variance.png

prova_esposizione_raw

Cattura una serie di immagini grezze con tempo di esposizione crescente e misura i valori dei pixel.

API testate:

Superato: aumentando l'ISO (guadagno) i pixel diventano più sensibili alla luce, quindi la trama si sposta verso sinistra.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ è 1 ms, 10¹ è 10 ms, 10⁻¹ è 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_sensibilità

Cattura una serie di immagini grezze con sensibilità crescente e misura il rumore (varianza) nel 10% centrale dell'immagine. Verifica che ogni scatto sia più rumoroso del precedente.

API testate:

Passaggio: la varianza aumenta ad ogni tiro.

test_raw_sensibilità_varianza

test_raw_sensitivity_variance.png

test_rielaborazione_riduzione_rumore

Verifica che android.noiseReduction.mode venga applicato per la rielaborazione delle richieste. Cattura le immagini rielaborate con la fotocamera scarsamente illuminata. Utilizza un guadagno analogico elevato per garantire che l'immagine acquisita sia rumorosa. Cattura tre immagini rielaborate, per NR disattivato, "veloce" e "alta qualità". Cattura un'immagine rielaborata con guadagno basso e NR disattivato e utilizza la varianza di questa come linea di base.

API testate:

Superato: VELOCE >= SPENTO, HQ >= VELOCE, HQ >> SPENTO

Grafico tipico SNR vs NR_MODE

Grafico tipico SNR vs NR_MODE

test_tonemap_sequence

Testa una sequenza di riprese con diverse curve della mappatura dei toni. Cattura 3 scatti manuali con una mappa tonale lineare. Cattura 3 scatti manuali con tonemap predefinita. Calcola il delta tra ciascuna coppia di frame consecutivi.

API testate:

Superato: ci sono 3 fotogrammi identici seguiti da un set diverso di 3 fotogrammi identici.

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

Verifica che tutte le dimensioni e i formati segnalati per l'acquisizione di immagini funzionino. Utilizza una richiesta manuale con una mappa tonale lineare in modo che YUV e JPEG abbiano lo stesso aspetto quando convertiti dal modulo image_processing_utils . Le immagini non vengono salvate per impostazione predefinita, ma possono essere salvate abilitando debug_mode .

API testate:

Superato: tutti i centri dell'immagine hanno una differenza massima RMS (valore quadratico medio di un segnale) nelle immagini convertite RGB con il 3% dell'immagine YUV con la risoluzione più alta.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Verifica che le dimensioni e i formati segnalati per l'acquisizione delle immagini funzionino.

API testate:

Superato: il test completa e restituisce le immagini richieste.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Verifica l'acquisizione di un singolo fotogramma sia come output YUV che JPEG. Utilizza una richiesta manuale con una mappa tonale lineare in modo che YUV e JPEG abbiano lo stesso aspetto quando convertiti dal modulo image_processing_utils .

API testate:

Passato: le immagini YUV e JPEG sono simili e presentano una differenza inferiore all'1% RMS (valore quadratico medio di un segnale).

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

Verifica l'acquisizione di un singolo fotogramma sia come output RAW/RAW10/RAW12 che YUV, se supportato. Utilizza una richiesta manuale con mappatura dei toni lineare, quindi si prevede che raw e YUV siano gli stessi. Confronta i valori RGB centrali del 10% delle immagini convertite RGB. Registra android.shading.mode .

API testate:

Passato: le immagini YUV e grezze sono simili e presentano una differenza inferiore al 3,5% RMS (valore quadratico medio di un segnale).

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

scena2_a

scene2_a ha tre volti con sfondo grigio e abiti neutri. I volti vengono scelti per avere una vasta gamma di tonalità della pelle. Il grafico deve avere l'orientamento corretto affinché il rilevamento dei volti funzioni in modo ottimale.

scena2_a

scena2_a

test_auto_flash

Verifica che il flash automatico venga attivato in una scena buia. Verifica che il flash automatico sia attivato controllando che il centro dell'immagine del riquadro abbia un gradiente ampio. Per attivare il flash automatico, il tablet e le luci nel banco di prova devono essere spenti. Il tablet viene spento dal test e le luci possono essere spente automaticamente con il controller Arduino. La scena deve essere completamente buia affinché il test funzioni correttamente. Pertanto, l'apertura posteriore del tablet deve essere completamente coperta dal tablet della scena, mentre l'apertura anteriore deve essere coperta da un'apertura e dal telefono DUT per impedire alla luce diffusa di entrare nell'attrezzatura.

API testate:

Superato: il centro dell'immagine del riquadro ha un gradiente ampio, il che significa che è stato attivato il flash automatico.

test_autoframing

Verifica il comportamento dell'inquadratura automatica del dispositivo fotocamera. Esegue un ampio zoom in modo tale che nessuno dei volti nella scena sia visibile, abilita la modalità di inquadratura automatica impostando AUTOFRAMING in CaptureRequest su True e verifica se tutti i volti nella scena originale possono essere rilevati quando lo stato converge (ovvero quando AUTOFRAMING_STATE in CaptureResult è impostato su AUTOFRAMING_STATE_CONVERGED ).

API testate:

Superato: vengono rilevati tutti e tre i volti.

test_display_p3

Test Visualizza l'acquisizione P3 in JPEG utilizzando l'API ColorSpaceProfiles . Verifica che il JPEG acquisito abbia un profilo ICC appropriato nell'intestazione e che l'immagine contenga colori al di fuori della gamma sRGB.

API testate:

Superato: il JPEG contiene un profilo ICC Display P3 e colori al di fuori della gamma sRGB.

test_effetti

Cattura i fotogrammi per gli effetti della fotocamera supportati e controlla se vengono generati correttamente. Il test controlla solo gli effetti OFF e MONO , ma salva le immagini per tutti gli effetti supportati.

API testate:

Superato: cattura l'immagine della scena con gli effetti OFF ​​e un'immagine monocromatica con gli effetti impostati su MONO .

test_effetti_MONO

test_effects_MONO.jpg

test_format_combo

Testa diverse combinazioni di formati di output.

API testate:

Passa: tutte le combinazioni vengono catturate con successo.

test_jpeg_qualità

Verifica la qualità di compressione JPEG della fotocamera. Passa le qualità JPEG tramite android.jpeg.quality e garantisce che le tabelle di quantizzazione cambino correttamente.

API testate:

Superato: la matrice di quantizzazione diminuisce con l'aumento della qualità. (La matrice rappresenta il fattore di divisione.)

test_jpeg_qualità

Medie della matrice DQT luma/chroma della fotocamera posteriore Pixel 4 rispetto alla qualità JPEG

test_jpeg_quality non riuscito

Esempio di test fallito

Si noti che per immagini di qualità molto bassa (jpeg.quality < 50), non vi è alcun aumento della compressione nella matrice di quantizzazione.

test_num_facce

Verifica il rilevamento dei volti.

API testate:

Superato: Trova tre facce.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_preview_min_frame_rate

Verifica che la frequenza dei fotogrammi dell'anteprima diminuisca correttamente in una scena buia. Affinché questo test funzioni correttamente, le luci del banco di prova devono essere spente dal controller o manualmente dall'operatore del test.

API testate:

Superato: la frequenza fotogrammi dell'anteprima è al minimo dell'intervallo di frequenza fotogrammi richiesto e la variazione tra i fotogrammi è inferiore alla tolleranza assoluta impostata nel test.

test_reprocess_uv_swap

Verifica che il ritrattamento YUV non inverta i piani U e V. Ciò viene rilevato calcolando la somma delle differenze assolute (SAD) tra l'immagine rielaborata e un'acquisizione non rielaborata. Se lo scambio dei piani U e V di output della cattura rielaborata determina un aumento del SAD, si presuppone che l'output abbia i piani U e V corretti.

API testate:

Passaggio: gli aerei U e V non vengono scambiati.

test_reprocess_uv_swap

test_reprocess_uv_swap.png

scena2_b

test_num_facce

Testa il rilevamento dei volti con una maggiore diversità di tonalità della pelle nelle scene dei volti.

API testate:

Supera: trova 3 facce.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Cattura due immagini utilizzando i formati YUV e JPEG comuni più grandi con le stesse proporzioni del formato JPEG più grande che non supera la risoluzione di 1920x1440. Imposta jpeg.quality su 100 e acquisisce una richiesta di doppia superficie. Converte entrambe le immagini in array RGB e calcola la differenza radice quadrata media (RMS) 3D tra le due immagini.

API testate:

Passato: le immagini YUV e JPEG sono simili e presentano una differenza inferiore all'1% RMS (valore quadratico medio di un segnale).

scena2_c

test_num_facce

Testa il rilevamento dei volti con una maggiore diversità di tonalità della pelle nelle scene dei volti.

API testate:

Supera: trova 3 facce.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

Verifica la latenza di acquisizione JPEG per la classe di prestazioni S come specificato nella sezione 2.2.7.2 Fotocamera nel CDD.

Superato: DEVE avere una latenza di acquisizione JPEG della fotocamera2 < 1000 ms per la risoluzione 1080p misurata dal PerformanceTest della fotocamera CTS in condizioni di illuminazione ITS (3000 K) per entrambe le fotocamere principali.

test_camera_launch_perf_class

Testa la latenza di avvio della fotocamera per la classe di prestazioni S come specificato nella sezione 2.2.7.2 Fotocamera nel CDD.

Superato: DEVE avere una latenza di avvio della fotocamera 2 (fotocamera aperta al primo fotogramma di anteprima) < 600 ms, misurata dal PerformanceTest della fotocamera CTS in condizioni di illuminazione ITS (3000 K) per entrambe le fotocamere principali.

scena2_d

test_num_facce

Testa il rilevamento dei volti con una maggiore diversità di tonalità della pelle nelle scene dei volti.

API testate:

Supera: trova 3 facce.

scena2_e

prova_immagine_continua

Vengono acquisiti 50 fotogrammi con risoluzione VGA impostando prima la richiesta di acquisizione android.control.afMode = 4 (CONTINUOUS_PICTURE).

API testate:

Superato: il sistema 3A si stabilizza entro la fine di un'acquisizione di 50 fotogrammi.

test_num_facce

Testa il rilevamento dei volti con una maggiore diversità di tonalità della pelle nelle scene dei volti.

API testate:

Supera: trova 3 facce.

scena2_f

scene2_f ha tre volti con uno sfondo bianco e abiti bianchi. I volti hanno un'ampia gamma di tonalità della pelle e un contrasto elevato con lo sfondo.

scene2_f.png

scena2_f

test_num_facce

Testa il rilevamento dei volti con una maggiore diversità di tonalità della pelle nelle scene dei volti.

API testate:

Supera: trova 3 facce.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scena3

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.