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_jitter
Misura il jitter nei timestamp della fotocamera.
API testate:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Passato: c'è almeno un delta di 30 ms tra i fotogrammi.
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:
-
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
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:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
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:
- Cattura immagini per tutti i modelli di test supportati.
- Esegue un semplice controllo di correttezza per il modello di prova del colore solido e le barre di colore.
API testate:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Superato: i modelli di test supportati vengono generati correttamente.
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:
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Superato: YUV e RAW sembrano simili tra loro.
test_tonemap_curve_raw_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:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.hardware.Sensor#TYPE_GYROSCOPE
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:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.os.Vibrator
-
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
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 .
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Passato: AE converge.
test_auto_vs_manual
I test che hanno effettuato scatti automatici e manuali sembrano uguali.
API testate:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
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.jpg
test_auto_vs_manual_wb.jpg
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:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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_nero.jpg | prova_nero_bianco_bianco.jpg |
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:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
-
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
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.jpg
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
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.png
test_crop_region_raw
Verifica che i flussi RAW non siano ritagliabili.
API testate:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Superato: le immagini YUV vengono ritagliate al centro ma non le immagini RAW.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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.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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Superato: le immagini mostrano un'esposizione crescente senza sovraesporre entro cinque passaggi.
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
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.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:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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_exposure_plot_means.png
![]() | ![]() | |
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.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.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
![]() | |||
test_latching_i=12.jpg |
test_latching_plot_means.png
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Superato: i valori R, G, B devono aumentare linearmente con l'aumentare della sensibilità.
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Superato: le acquisizioni sembrano coerenti.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
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:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Superato: i valori R e B aumentano in base alla trasformazione.
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.jpg
test_param_color_correctness_req=1.jpg (aumento R)
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.jpg
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.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
test_param_noise_reduction
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.png
0: SPENTO, 1: VELOCE, 2: HQ, 3: MIN, 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_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.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
test_param_shading_mode
Verifica che il parametro android.shading.mode
sia applicato.
API testate:
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
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.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
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:
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
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.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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensibilità
Cattura una serie di immagini grezze con guadagni crescenti e misura il rumore. Cattura solo raw, in una raffica.
API testate:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
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_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:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Superato: aumentando l'ISO (guadagno) i pixel diventano più sensibili alla luce, quindi la trama si sposta verso sinistra.
test_raw_exposure_s=55.png
(10⁰ è 1 ms, 10¹ è 10 ms, 10⁻¹ è 0,1 ms)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_raw_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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Passaggio: la varianza aumenta ad ogni tiro.
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
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.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
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:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
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.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.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:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
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.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:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW10
-
android.hardware.graphics.ImageFormat#RAW12
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.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
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:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
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:
-
android.hardware.camera2.params.ColorSpaceProfiles
-
android.hardware.camera2.params.SessionConfiguration#setColorSpace
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
-
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Superato: cattura l'immagine della scena con gli effetti OFF
e un'immagine monocromatica con gli effetti impostati su MONO
.
test_effects_MONO.jpg
test_format_combo
Testa diverse combinazioni di formati di output.
API testate:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
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.)
Medie della matrice DQT luma/chroma della fotocamera posteriore Pixel 4 rispetto alla qualità JPEG
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Superato: Trova tre facce.
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
-
android.media.CamcorderProfile
-
android.media.MediaRecorder
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:
-
android.hardware.camera2.CameraDevice#createCaptureSession
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Passaggio: gli aerei U e V non vengono scambiati.
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Supera: trova 3 facce.
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:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
-
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
-
android.graphics.ImageFormat#JPEG
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Supera: trova 3 facce.
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
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.
scena2_f
test_num_facce
Testa il rilevamento dei volti con una maggiore diversità di tonalità della pelle nelle scene dei volti.
API testate:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Supera: trova 3 facce.
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:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Pass: 3A converges for exposure, gain, awb (auto white balance), and fd (focus distance) three times within tolerance.
test_edge_enhancement
Tests that the android.edge.mode
parameter is applied correctly. Captures non-reprocess images for each edge mode and returns sharpness of the output image and the capture result metadata. Processes a capture request with a given edge mode, sensitivity, exposure time, focus distance, and output surface parameter.
Pass: HQ
mode (2) sharper than OFF
mode (0). FAST
mode (1) sharper than OFF
mode. HQ
mode sharper or equal to FAST
mode.
APIs tested:
Impacted camera parameters:
-
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (fast mode)
test_edge_enhancement_edge=2.jpg (high quality mode)
test_flip_mirror
Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .
Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.
Pass: Image isn't flipped, mirrored or rotated.
test_flip_mirror_scene_patch.jpg
test_landscape_to_portrait
Tests if the landscape to portrait override functions correctly for landscape-oriented sensors.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
-
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
-
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Pass: The test is able to locate a chart with the expected rotation (0 degrees when the landscape to portrait override is disabled, 90 degrees when enabled).
test_landscape_to_portrait.png
test_lens_movement_reporting
Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilizes as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first few frames with the lens stationary at optimum focal distance, and the final few frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass: Lens movement flag is True
in the frame with sharpness change.
Fail mechanisms:
-
lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) intest_log.DEBUG
is asserted only in frames where sharpness isn't changing. - Frames with
lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) intest_log.DEBUG
has a sharpness difference compared to the first few frames at optimum focal distance or the last few frames at minimum focus distance.
test_reprocess_edge_enhancement
Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.
APIs tested:
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Pass: Sharpness for the different edge modes is correct. HQ
(mode 2) is sharper than OFF
(mode 0), and improvement between different modes is similar.
test_reprocess_edge_enhancement_plot.png
scene4
Scene4 consists of a black circle on a white background inside a square.
scene4
test_aspect_ratio_and_crop
Tests if images are distorted or cropped unexpectedly in the image pipeline. Takes pictures of a circle over all formats. Verifies the circle isn't distorted, the circle doesn't move from the center of image, and the circle doesn't change size incorrectly with different aspect ratios or resolutions.
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
Fail mechanisms:
- The circle in the captured image is distorted by the processing pipeline.
- Lower resolution image is double cropped in the image pipeline creating different FoV between high and low resolution images.
- The circle in the captured image is cropped due to an extreme aspect ratio capture request reducing the height or width of the image.
- The circle in the captured image has a reflection in the center and doesn't appear fully filled.
test_multi_camera_alignment
Tests the camera calibration parameters related to camera positioning for multi-camera systems. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Pass: Circle centers and sizes are as expected in projected images compared to captured images using camera calibration data and focal lengths.
Fail mechanisms:
-
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
, orLENS_POSE_ROTATION
are design values and not actual calibration data. - The camera system isn't appropriate for the test setup. For example, testing a wide and an ultra-wide camera system with the RFoV test rig. For more information, see Camera ITS-in-a-box FAQ1 .
test_preview_aspect_ratio_and_crop
Similar to the test_aspect_ratio_and_crop test for still captures, this test checks the supported preview formats to ensure the preview frames aren't stretched or cropped inappropriately. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center of the frame, and the circle size doesn't change for a constant format or with different resolutions (field of view check).
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
test_preview_stabilization_fov
Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON
, and another with preview stabilization OFF
. A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%.
test_video_aspect_ratio_and_crop
Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
scene5
Scene5 requires a uniformly lit gray scene. This is accomplished by a diffuser placed over the camera lens. We recommend the following diffuser: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
To prepare the scene, attach a diffuser in front of the camera and point the camera to a lighting source of around 2000 lux. Images captured for scene5 require diffuse lighting with no features evident. The following is a sample image:
scene5 capture
test_lens_shading_and_color_uniformity
Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.
scene6
Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.
scene6
test_in_sensor_zoom
Tests the behavior of the camera in-sensor zoom feature, which produces cropped RAW images.
With the stream use case set to CROPPED_RAW
, the test takes two captures over the zoom range, a full field of view (FoV) RAW image and a cropped RAW image. The test converts the images to RGB arrays, downscales the full-sized cropped RAW image to the size reported by SCALER_RAW_CROP_REGION
, and calculates the 3D root mean square (RMS) difference between the two images.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Pass: The 3D root mean square (RMS) difference between the downscaled cropped RAW image and the full FoV RAW image is less than 1%.
test_zoom
Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.
test_zoom to find the contour of the circle closest to the center.
test_low_latency_zoom
Tests the camera low latency zoom behavior. Takes captures over the zoom range with android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
, and checks if the circles in the output images match the zoom ratios in the capture metadata.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Pass: Relative size of captured circle is accurate against the zoom ratio result metadata.
test_preview_video_zoom_match
Tests that while recording and zooming, video preview and video output display and record the same output. Calculates the size of the circle closest to the center at different zoom ratios and checks whether the size of the circle increases as the zoom ratio increases.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio in video and preview.
VGA_640x480_key_frame.png (before zoom)
preview_640x480_key_frame.png (before zoom)
VGA_640x480_key_frame.png (after zoom)
preview_640x480_key_frame.png (after zoom)
scene_extensions
The scene_extensions
tests are for camera extensions and must use Camera ITS-in-a-Box , as they require precise control of the testing environment.
scene_hdr
The scene_hdr
scene consists of a portrait on the left and a low-contrast QR code on the right.
scene_hdr
test_hdr_extension
Tests the HDR extension . Takes captures with and without the extension enabled, and checks if the extension makes the QR code more detectable.
APIs tested:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Pass: The HDR extension reduces the number of contrast changes needed to detect the QR code or reduces the gradient across the QR code.
scene_night
The scene_night
scene consists of a white circle with four smaller circles inside of it, all against a black background. The smaller circle in the top right corner is darker than the others to indicate orientation.
scene_night
test_night_extension
Tests the Night extension . Takes captures with and without the extension enabled, and checks for the following:
- The capture with the Night extension enabled takes longer.
- The capture with the Night extension enabled is brighter or has scene artifacts with an improved appearance.
APIs tested:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Pass: Compared to a capture without the Night extension enabled, a capture with the Night extension enabled takes at least 0.5 seconds longer. The capture must be at least 10% brighter, or the gray dots in the scene must be 20 pixel values lower than the surrounding circle's center.
sensor_fusion
Sensor fusion tests require specific phone movement in front of a checkerboard pattern. For optimum results, ensure the test chart is mounted flat. Charts that aren't flat affect the rotation calculations for many of the tests. The sensor_fusion
tests can be automated with the Sensor Fusion Box .
Image of checkerboard
test_multi_camera_frame_sync
Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.
test_preview_stabilization
Tests that stabilized preview video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_sensor_fusion
Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME
parameter is not enabled.
The test_sensor_fusion
test generates a number of plots. The two most important plots for debugging are:
test_sensor_fusion_gyro_events
: Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.test_sensor_fusion_plot_rotations
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_FACING
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .
Fail mechanisms:
- Offset error: The camera-gyroscope offset isn't correctly calibrated to within +/-1 ms.
- Frame drops: The pipeline isn't fast enough to capture 200 frames consecutively.
- Socket errors:
adb
can't reliably connect to the DUT long enough to execute the test. - The chart isn't mounted flat. The plot
test_sensor_fusion_plot_rotations
has frames where the gyroscope and camera rotation vary considerably as the camera rotates through the parts of the chart that aren't flat. - The camera isn't mounted flat. The plot
test_sensor_fusion_gyro_events
shows movement in the X and Y planes. This failure is more common in front-facing cameras as the rear camera often has a raised bump to the rest of the phone body, creating a tilt when mounting the rear of the phone to the mounting plate.
test_video_stabilization
Tests that stabilized video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_led_snapshot
Tests that the LED snapshots don't saturate or tint the image.
This test adds a lighting controller to the sensor fusion box to control the lights. With the lights set to OFF
, the test takes a capture with the AUTO_FLASH
mode set to ON
. During this capture, the test runs a precapture sequence with the aePrecapture
trigger set to START
, and sets the capture intent to Preview
to take the capture with flash.
Because the capture has a distinctive hotspot due to flash, the test computes the flash image mean of the entire capture and verifies whether the value is within the (68, 102) range. To check if the image is reasonably white-balanced, the test calculates the R/G and B/G ratios and verifies whether the ratios are within 0.95 and 1.05.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass: The R/G and B/G ratios are within 0.95 and 1.05. The flash image mean is within the (68, 102) range.