Testy aparatu ITS

Na tej stronie znajduje się obszerna lista testów w ramach pakietu Camera Image Test Suite (ITS), który jest częścią narzędzia Android Compatibility Test Suite (CTS) Verifier. Testy ITS to testy funkcjonalne, co oznacza, że ​​nie mierzą jakości obrazu, ale sprawdzają, czy wszystkie reklamowane funkcje aparatu działają zgodnie z oczekiwaniami. Ten dokument pozwala programistom i testerom zrozumieć, co robią poszczególne testy i jak debugować błędy testów.

Testy bramek ITS kamer pod kątem wymaganych właściwości kamery, poziomu API i poziomu klasy wydajności multimediów (MPC). W przypadku poziomu API ITS używa ro.product.first_api_level do testów bramkowych dodanych na określonym poziomie API, które sprawdzają negatywne doświadczenia użytkowników w zakresie funkcjonalności na niższych poziomach API. ITS używa ro.vendor.api_level do testów bramkowych dla funkcji dodanych na określonym poziomie API, które wymagają nowych możliwości sprzętowych. Jeśli dla urządzenia zdefiniowano ro.odm.build.media_performance_class Performance_class, ITS wymaga przeprowadzenia określonych testów w zależności od poziomu MPC.

Testy są pogrupowane według scen w następujący sposób:

  • scena0 : Przechwytywanie metadanych, drgań, żyroskopu, wibracji
  • scena 1 : Ekspozycja, czułość, kompensacja EV, YUV vs JPEG/RAW
  • scena2 : Wykrywanie twarzy, testy wymagające scen kolorowych lub całkowitej ciemności
  • scena 3 : Wzmocnienie krawędzi, ruch soczewki
  • scena4 : Proporcje obrazu, kadrowanie, pole widzenia
  • scene5 : Cieniowanie obiektywu
  • scena 6 : Zoom
  • scene_extensions : rozszerzenia aparatu
  • sensor_fusion : Przesunięcie taktowania kamery/żyroskopu

Zobacz poszczególne sekcje, aby zapoznać się z opisem każdej sceny.

scena0

Testy Scene0 nie wymagają żadnych konkretnych informacji o scenie. Jednak do testowania żyroskopu i wibracji telefon musi być nieruchomy.

test_burst_capture

Sprawdza, czy cały potok przechwytywania może nadążać za szybkością przechwytywania w pełnym rozmiarze i czasem procesora.

Testowane interfejsy API:

Pass: Przechwytuje serię pełnowymiarowych zdjęć, a aparat jest wystarczająco szybki, aby uniknąć przekroczenia limitu czasu.

test_capture_result_dump

Testuje, czy wynik przechwytywania jest zwracany w wyniku przechwytywania ręcznego, a następnie go zrzuca.

Testowane interfejsy API:

Pass: kończy przechwytywanie i zrzuca wyniki przechwytywania.

test_gyro_bias

Sprawdza, czy żyroskop ma stabilną moc wyjściową, gdy urządzenie jest nieruchome. Dane są wykreślane jako średnia z 20 punktów danych.

Testowane interfejsy API:

Pass: delta odczytu żyroskopu jest mniejsza niż 0,01 w czasie.

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

Mierzy jitter w znacznikach czasu kamery.

Testowane interfejsy API:

Pass: Różnica między klatkami wynosi co najmniej 30 ms.

test_jitter_plot.png

test_jitter_plot.png (Zwróć uwagę na mały zakres osi Y. Jitter na tym wykresie jest w rzeczywistości niewielki.)

test_metadane

Testuje ważność wpisów metadanych. Sprawdza wyniki przechwytywania i obiekty charakteryzujące kamerę. W tym teście wykorzystuje się wartości ekspozycji i wzmocnienia auto_capture_request , ponieważ treść obrazu nie jest istotna.

Testowane interfejsy API:

Pass: Poziom sprzętu, tagi rollingShutterSkew , frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FoV, odległość hiperfokalna są obecne i mają prawidłowe wartości.

test_param_sensitivity_burst

Testuje, czy parametr android.sensor.sensitivity jest prawidłowo stosowany w serii. Sprawdza tylko metadane wyjściowe.

Testowane interfejsy API:

Pass: Dane wyjściowe mają tolerancję błędu mniejszą niż 0,2%.

test_czytaj_zapis

Testuje, czy urządzenie zapisuje prawidłowe wartości ekspozycji i wzmocnienia, odczytując metadane przechwytywania.

Testowane interfejsy API:

Pass: Wartości odczytu i zapisu są zgodne we wszystkich ujęciach.

zdarzenia_test_sensora

Testuje, czy urządzenie wysyła zapytania i drukuje zdarzenia czujników dla urządzeń reklamujących obsługę fuzji czujników. Oczekiwane czujniki to akcelerometr, żyroskop i magnetometr. Ten test działa tylko wtedy, gdy ekran jest włączony, co oznacza, że ​​urządzenie nie znajduje się w trybie gotowości.

Testowane interfejsy API:

Pass: Odbierane są zdarzenia dla każdego czujnika.

test_solid_color_test_pattern

Sprawdza, czy wzory testowe jednolitego koloru są generowane prawidłowo w przypadku wyciszenia kamery. Jeśli obsługiwane jest wyciszanie kamery, muszą być obsługiwane wzorce testowe w jednolitym kolorze. Jeśli wyciszanie kamery nie jest obsługiwane, wzorce testowe w jednolitym kolorze są testowane tylko wtedy, gdy jest reklamowana taka możliwość.

Jeśli obsługiwane są obrazy RAW, testowane jest również przypisanie kolorów. Testowane kolory to czarny, biały, czerwony, niebieski i zielony. W przypadku aparatów, które nie obsługują obrazów RAW, testowany jest tylko kolor czarny.

Testowane interfejsy API:

Wynik pozytywny: obsługiwane wzorce testowe mają prawidłowy kolor, a różnice w obrazie są niewielkie.

wzorzec_testowy

Testuje parametr android.sensor.testPatternMode w celu przechwytywania klatek dla każdego prawidłowego wzorca testowego i sprawdza, czy ramki są generowane poprawnie dla jednolitych kolorów i pasków kolorów. Ten test obejmuje następujące kroki:

  1. Przechwytuje obrazy dla wszystkich obsługiwanych wzorców testowych.
  2. Wykonuje prostą kontrolę poprawności wzoru testowego jednolitego koloru i pasków kolorów.

Testowane interfejsy API:

Pomyślnie: obsługiwane wzorce testowe są generowane poprawnie.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Testuje konwersję wzoru testowego z RAW do YUV z liniową mapą tonów. Ten test wymaga android.sensor.testPatternMode = 2 (COLOR_BARS), aby wygenerować idealny wzór obrazu do konwersji mapy tonalnej. Zapewnia, że ​​potok ma odpowiednie kolory wyjściowe z liniową mapą tonów i idealnym obrazem wejściowym (opiera się na test_test_patterns ).

Testowane interfejsy API:

Pass: YUV i RAW wyglądają podobnie.

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

Testuje, czy zdarzenia obrazu i czujnika ruchu znajdują się w tej samej dziedzinie czasu.

Testowane interfejsy API:

Pass: znaczniki czasu ruchu znajdują się pomiędzy dwoma znacznikami czasu obrazu.

test_ograniczenie_wibracji

Sprawdza, czy wibracje urządzenia działają zgodnie z oczekiwaniami.

Testowane interfejsy API:

Pass: urządzenie nie wibruje po wyciszeniu przez interfejs API ograniczania dźwięku kamery.

scena 1

scena1 to szary wykres. Szara mapa musi pokrywać środkowe 30% pola widzenia kamery. Oczekuje się, że szary wykres będzie stanowić umiarkowane wyzwanie dla 3A (automatyczna ekspozycja, automatyczny balans bieli, automatyczne ustawianie ostrości), ponieważ środkowy obszar nie ma żadnych funkcji. Jednakże żądanie przechwytywania określa całą scenę, która zawiera elementy wystarczające do zbieżności 3A.

Kamery RFoV można testować na stanowisku badawczym WFoV lub RFoV. Jeśli kamera RFoV jest testowana na stanowisku testowym WFoV, mapa jest skalowana o ⅔, aby zapewnić pewne granice szarej mapy w FoV, aby pomóc w zbieżności 3A. Aby uzyskać bardziej szczegółowy opis stanowisk do testowania kamer, zobacz Camera ITS-in-a-box .

scena 1

scena 1: Tabela pełnych rozmiarów (po lewej). Wykres w skali ⅔ (po prawej).

test_3a

Testuje zbieżność 3A z umiarkowanie trudnym celem.

Testowane interfejsy API:

Pass: 3A jest zbieżny i zwrócone wartości 3A są prawidłowe.

test_ae_af

Testuje indywidualnie algorytmy automatycznej ekspozycji 3A (AE) i automatycznego ustawiania ostrości (AF).

Testowane interfejsy API:

Pass: 3A jest zbieżny i zwrócone wartości 3A są prawidłowe.

test_ae_precapture_trigger

Testuje maszynę stanu AE podczas korzystania z wyzwalacza wstępnego przechwytywania. Przechwytuje pięć ręcznych żądań z wyłączoną funkcją AE. Ostatnie żądanie zawiera wyzwalacz wstępnego przechwytywania AE, który należy zignorować, ponieważ AE jest wyłączone.

Testowane interfejsy API:

Pass: AE zbiega się.

test_auto_vs_manual

Testy, w których zarejestrowano zdjęcia automatyczne i ręczne, wyglądają tak samo.

Testowane interfejsy API:

Wynik pozytywny: ręczne wzmocnienie i transformacja balansu bieli zgłaszane w każdym wyniku przechwytywania są zgodne z automatycznym estimate balansu bieli na podstawie algorytmu 3A aparatu.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_czarny_biały

Testuje, czy urządzenie generuje całkowicie czarno-białe obrazy. Wykonuje dwa zdjęcia, pierwsze z wyjątkowo niskim wzmocnieniem i krótką ekspozycją, co daje czarne zdjęcie, a drugie z wyjątkowo dużym wzmocnieniem i długim czasem naświetlania, co daje białe zdjęcie.

Testowane interfejsy API:

Pass: Tworzy obrazy czarno-białe. Nasycone kanały białych obrazów mają wartości RGB [255, 255, 255] z marginesem błędu mniejszym niż 1% różnicy.

test_czarny_biały_czarnytest_czarny_biały_czarny
test_czarny_biały_czarny.jpg test_czarny_biały_biały.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

Wykonuje 5 serii po 50 zdjęć przy ręcznym ustawieniu przechwytywania i sprawdza, czy wszystkie są identyczne. Test ten można wykorzystać do sprawdzenia, czy istnieją sporadyczne klatki, które są przetwarzane w inny sposób lub czy zawierają artefakty.

Testowane interfejsy API:

Pass: Obrazy są identyczne wizualnie i pod względem wartości RGB.

Niepowodzenie: Pokazuje wzrost lub spadek średniego wykresu RGB na początku każdej serii

  • Tolerancja wynosi 3% dla first_API_level < 30
  • Tolerancja wynosi 2% dla first_API_level >= 30

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

Testuje, czy prawidłowe dane pojawiają się w obiektach CaptureResult . Wykonuje przechwytywanie automatyczne, ręczne i automatyczne.

Testowane interfejsy API:

Pass: Metadane są ważne dla wszystkich przechwytów, a ustawienia ręczne nie wyciekają do drugiego automatycznego przechwytywania. Wykreśla korekcję cieniowania obiektywu dla przechwyconych zdjęć.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Sprawdza, czy strumieni RAW nie można przycinać.

Testowane interfejsy API:

Pass: obrazy YUV są przycinane do środka, ale nie obrazy 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

Testuje, czy obszary upraw działają. Wykonuje pełny obraz i tworzy obszary 5 różnych regionów (narożniki i środek). Wykonuje zdjęcia z ustawieniem przycięcia dla 5 regionów. Porównuje poprawkę i wartości przyciętego obrazu.

Testowane interfejsy API:

Pass: Obraz przyciętego obszaru pasuje do fragmentu odpowiadającego przyciętemu obrazowi.

test_dng_noise_model

Sprawdza, czy parametry surowego modelu DNG są prawidłowe. Wykres przedstawia zmierzoną wariancję środkowego obszaru szarej karty w surowych zdjęciach zarejestrowanych w zakresie czułości i porównuje te wartości z wariancją oczekiwaną przy każdej czułości przez model szumu DNG w aparacie HAL (w oparciu o Parametry O, S zwracane w obiektach wynikowych przechwytywania). Aby uzyskać więcej informacji na temat modelu szumu DNG, pobierz następujący dokument dotyczący modelu szumu DNG .

Testowane interfejsy API:

Wynik pozytywny: parametry surowego modelu DNG są prawidłowe. Oczekiwane wartości RGB odpowiadają rzeczywistym zmierzonym wartościom RGB.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Sprawdza, czy stosowana jest kompensacja wartości ekspozycji (EV). Test zwiększa ekspozycję w ośmiu krokach i sprawdza zmierzoną jasność w porównaniu z oczekiwaną jasnością. Oczekiwane wartości są obliczane na podstawie jasności obrazu bez zastosowanej kompensacji EV, a oczekiwana wartość ulegnie nasyceniu, jeśli obliczone wartości przekroczą rzeczywisty zakres wartości obrazu. Test kończy się niepowodzeniem, jeśli wartości oczekiwane i zmierzone nie są zgodne lub obrazy są prześwietlone w ciągu pięciu kroków.

Testowane interfejsy API:

Pass: Zdjęcia pokazują rosnącą ekspozycję bez prześwietlania w pięciu krokach.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Testuje, czy kompensacja EV jest stosowana przy użyciu zakresu utworzonego za pomocą CONTROL_AE_COMPENSATION_STEP . Dla każdej wartości kompensacji przechwytywanych jest osiem klatek.

Testowane interfejsy API:

Pass: Przechwytuje wzrost jasności przy zwiększonym ustawieniu kompensacji EV, a osiem klatek zarejestrowanych dla każdego ustawienia kompensacji EV ma stabilne wartości luminacji.

test_ev_compensation_basic

test_ev_compensation_basic.png

test_ekspozycji

Testuje, czy osiągana jest stała ekspozycja przy różnych wartościach ISO i czasie ekspozycji. Wykonuje serię zdjęć, których czułość ISO i czas ekspozycji zostały wybrane tak, aby się równoważyły. Wyniki powinny mieć tę samą jasność, ale w trakcie sekwencji obraz powinien stać się bardziej zaszumiony. Sprawdza, czy średnie wartości pikseli próbki są blisko siebie. Zapewnia, że ​​obrazy nie są zaciśnięte do 0 lub 1 (co sprawiłoby, że wyglądały jak płaskie linie). Test można również uruchomić na obrazach RAW, ustawiając flagę debug w pliku konfiguracyjnym.

Testowane interfejsy API:

Pass: obrazy mają tę samą jasność, ale stają się bardziej zaszumione przy wyższej wartości ISO. Płaszczyzny RGB są płaskie, gdy wartość ekspozycji ISO* jest stała w badanej przestrzeni wzmocnienia.

test_exposure_plot_means

test_exposure_plot_means.png

test_exposure_mult=1,00test_exposure_mult=64,00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

Testy, w których przekonwertowano obrazy YUV i obrazy JPEG urządzenia, wyglądają tak samo. Test obejmuje 10% środkowego obrazu, oblicza wartość RGB i sprawdza, czy pasują.

Testowane interfejsy API:

Pass: średnia różnica RGB między każdym obrazem jest mniejsza niż 3%.

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

test_zatrzask

Testuje, czy ustawienia (ekspozycja i wzmocnienie) są blokowane w prawej ramce w przypadku kamer FULL i LEVEL_3 . Wykonuje serię zdjęć, korzystając z kolejnych żądań, zmieniając parametry żądania przechwytywania pomiędzy zdjęciami. Sprawdza, czy obrazy mają oczekiwane właściwości.

Testowane interfejsy API:

Zaliczony: obrazy [2, 3, 6, 8, 10, 12, 13] mają zwiększoną czułość ISO lub ekspozycję i są wyświetlane z wyższymi średnimi wartościami RGB na 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

test_liniowości

Testuje, czy przetwarzanie urządzenia można odwrócić na piksele liniowe. Rejestruje sekwencję strzałów, gdy urządzenie jest skierowane na jednolity cel.

Testowane interfejsy API:

Pass: Wartości R, G, B muszą rosnąć liniowo wraz ze zwiększoną czułością.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Testuje blokadę 3A i serię YUV (przy użyciu ustawień automatycznych). Ten test został zaprojektowany tak, aby przejść nawet na ograniczonych urządzeniach, które nie mają MANUAL_SENSOR lub PER_FRAME_CONTROLS . Test sprawdza spójność obrazu YUV, podczas gdy kontrola liczby klatek na sekundę odbywa się w CTS.

Testowane interfejsy API:

Pass: Ujęcia wyglądają spójnie.

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

Testuje, czy parametry android.colorCorrection.* są stosowane po ustawieniu. Wykonuje zdjęcia z różnymi wartościami transformacji i wzmocnienia, a następnie sprawdza, czy wyglądają odpowiednio inaczej. Transformację i wzmocnienia wybiera się tak, aby sygnał wyjściowy był coraz bardziej czerwony lub niebieski. Wykorzystuje liniową mapę tonów. Mapowanie tonów to technika stosowana w przetwarzaniu obrazu w celu odwzorowania jednego zestawu kolorów na inny w celu przybliżenia wyglądu obrazów o wysokim zakresie dynamiki w nośniku o bardziej ograniczonym zakresie dynamiki.

Testowane interfejsy API:

Pass: Wartości R i B zwiększają się zgodnie z transformacją.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*Oś x to żądania przechwytywania: 0 = jedność, 1 = czerwone wzmocnienie, 2 = niebieskie wzmocnienie

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

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (wzmocnienie B)

test_param_exposure_time

Testuje, czy zastosowano parametr android.sensor.exposureTime .

Testowane interfejsy API:

Pass: Każde zdjęcie jest jaśniejsze od poprzedniego.

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

Testuje, czy zastosowano parametr android.flash.mode . Ręcznie ustawia ciemną ekspozycję, tak aby było oczywiste, czy lampa błyskowa została wyzwolona, ​​czy nie, i wykorzystuje liniową mapę tonów. Sprawdza środek obrazu kafelka, aby sprawdzić, czy powstał duży gradient w celu sprawdzenia, czy lampa błyskowa została wyzwolona.

Testowane interfejsy API:

Pass: Środek obrazu kafelkowego ma duży gradient, co oznacza, że ​​lampa błyskowa została wyzwolona.

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_redukcja

Testuje, czy parametr android.noiseReduction.mode jest poprawnie stosowany, gdy jest ustawiony. Robi zdjęcia przy słabo oświetlonym aparacie. Wykorzystuje wysokie wzmocnienie analogowe, aby zapewnić, że przechwycony obraz będzie zaszumiony. Rejestruje trzy obrazy, przy wyłączonej redukcji szumów, „szybkim” i „wysokiej jakości”. Przechwytuje także obraz z niskim wzmocnieniem i wyłączoną redukcją szumów i wykorzystuje jego wariancję jako linię bazową. Im wyższy współczynnik SNR (stosunek sygnału do szumu), tym lepsza jakość obrazu.

Testowane interfejsy API:

Pass: SNR zmienia się w zależności od różnych trybów redukcji szumów i zachowuje się podobnie jak na poniższym wykresie.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: WYŁ., 1: SZYBKO, 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_czułość

Testuje, czy zastosowano parametr android.sensor.sensitivity . Test zwiększa czułość w 5 krokach przy stałej ekspozycji dla każdego zdjęcia.

Testowane interfejsy API:

Pass: RGB oznacza centrum 10% staje się jaśniejsze ze zwiększoną czułością.

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

Testuje, czy zastosowano parametr android.shading.mode .

Testowane interfejsy API:

Pass: tryby cieniowania są przełączane, a mapy cieniowania obiektywu modyfikowane zgodnie z oczekiwaniami.

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

Testuje, czy zastosowano parametr android.tonemap.mode. Stosuje różne krzywe mapy tonów do każdego kanału R, G i B i sprawdza, czy obrazy wyjściowe są modyfikowane zgodnie z oczekiwaniami. Test ten składa się z dwóch testów, testu 1 i testu 2.

Testowane interfejsy API:

Przechodzić:

  • test1: Oba obrazy mają liniową mapę tonów, ale n=1 ma bardziej stromy gradient. Kanał G (zielony) jest jaśniejszy dla obrazu n=1.
  • test2: Ta sama mapa tonów, ale inna długość. Obrazy są takie same.
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

Sprawdza zwiększenie czułości po RAW. Przechwytuje zestaw obrazów RAW i YUV o różnej czułości, publikuje kombinację zwiększenia czułości RAW i sprawdza, czy średnia pikseli wyjściowych odpowiada ustawieniom żądania.

Testowane interfejsy API:

Pass: obrazy RAW stają się ciemniejsze wraz ze wzrostem wzmocnienia, podczas gdy obrazy YUV zachowują stałą jasność

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

Przechwytuje zestaw surowych obrazów o rosnącym wzmocnieniu i mierzy szum. Przechwytuje tylko surowo, w serii.

Testowane interfejsy API:

Pass: Każdy strzał jest głośniejszy niż poprzedni, ponieważ wzmocnienie wzrasta.

Używa wariancji środkowej komórki siatki statystyk.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Przechwytuje zestaw surowych obrazów przy rosnącym czasie ekspozycji i mierzy wartości pikseli.

Testowane interfejsy API:

Pass: Zwiększenie ISO (wzmocnienia) powoduje, że piksele są bardziej wrażliwe na światło, więc wykres przesuwa się w lewo.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ to 1 ms, 10¹ to 10 ms, 10⁻¹ to 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_czułość

Przechwytuje zestaw surowych obrazów o rosnącej czułości i mierzy szum (odchylenie) w środkowych 10% obrazu. Testuje, czy każdy strzał jest głośniejszy od poprzedniego.

Testowane interfejsy API:

Podanie: Wariancja wzrasta z każdym strzałem.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_redukcja

Testuje, czy android.noiseReduction.mode jest stosowany do ponownego przetwarzania żądań. Rejestruje przetworzone obrazy przy słabo oświetlonym aparacie. Wykorzystuje wysokie wzmocnienie analogowe, aby zapewnić, że przechwytywany obraz będzie zaszumiony. Rejestruje trzy ponownie przetworzone obrazy: dla redukcji szumów wyłączonej, „szybkiej” i „wysokiej jakości”. Przechwytuje ponownie przetworzony obraz z niskim wzmocnieniem i wyłączoną redukcją szumów i wykorzystuje jego wariancję jako linię bazową.

Testowane interfejsy API:

Pass: SZYBKO >= WYŁ., HQ >= SZYBKO, HQ >> WYŁ

Typowy wykres SNR vs NR_MODE

Typowy wykres SNR vs NR_MODE

test_tonemap_sequence

Testuje sekwencję strzałów z różnymi krzywymi mapy tonalnej. Przechwytuje 3 ręczne ujęcia z liniową mapą tonów. Przechwytuje 3 ręczne zdjęcia z domyślną mapą tonów. Oblicza deltę pomiędzy każdą kolejną parą ramek.

Testowane interfejsy API:

Pass: Istnieją 3 identyczne klatki, po których następuje inny zestaw 3 identycznych klatek.

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

Testuje, czy wszystkie zgłoszone rozmiary i formaty do przechwytywania obrazu działają. Używa ręcznego żądania z liniową mapą tonów, dzięki czemu YUV i JPEG wyglądają tak samo po konwersji przez moduł image_processing_utils . Obrazy nie są domyślnie zapisywane, ale można je zapisać, włączając debug_mode .

Testowane interfejsy API:

Pass: Wszystkie centra obrazu mają maksymalną różnicę RMS (średnia kwadratowa sygnału) w obrazach przekonwertowanych RGB z 3% obrazu YUV o najwyższej rozdzielczości.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Testuje, czy zgłoszone rozmiary i formaty do przechwytywania obrazu działają.

Testowane interfejsy API:

Pass: Test kończy się i zwraca żądane obrazy.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Testuje przechwytywanie pojedynczej klatki jako wyjścia YUV i JPEG. Używa ręcznego żądania z liniową mapą tonów, dzięki czemu YUV i JPEG wyglądają tak samo po konwersji przez moduł image_processing_utils .

Testowane interfejsy API:

Wynik pozytywny: obrazy YUV i JPEG są podobne i różnią się o mniej niż 1% RMS (średnia kwadratowa sygnału).

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

Testuje przechwytywanie pojedynczej klatki jako wyjścia RAW/RAW10/RAW12 i YUV, jeśli jest obsługiwane. Używa ręcznego żądania z liniową mapą tonów, więc oczekuje się, że surowe i YUV będą takie same. Porównuje środkowe 10% wartości RGB obrazów przekonwertowanych na RGB. Loguje android.shading.mode .

Testowane interfejsy API:

Wynik pozytywny: obrazy YUV i surowe są podobne i różnią się o mniej niż 3,5% RMS (średnia kwadratowa sygnału).

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 ma trzy twarze z szarym tłem i neutralnym ubraniem. Twarze dobierane są tak, aby miały szeroką gamę odcieni skóry. Aby wykrywanie twarzy działało optymalnie, wykres musi mieć prawidłową orientację.

scena2_a

scena2_a

test_auto_flash

Testuje, czy automatyczna lampa błyskowa jest wyzwalana w ciemnej scenie. Sprawdza, czy uruchamiany jest automatyczny błysk, sprawdzając, czy środek obrazu kafelkowego ma duży gradient. Aby uruchomić funkcję automatycznego flashowania, tablet i światła w urządzeniu testowym muszą być wyłączone. Podczas testu tablet zostaje wyłączony, a podświetlenie można wyłączyć automatycznie za pomocą kontrolera Arduino. Aby test zadziałał prawidłowo, scena musi być całkowicie ciemna. W związku z tym tylny otwór tabletu musi być całkowicie zakryty przez tablet sceniczny, a przedni otwór musi być zakryty przez aperturę i telefon DUT, aby zablokować przedostawanie się rozproszonego światła do zestawu.

Testowane interfejsy API:

Pass: Środek obrazu kafelkowego ma duży gradient, co oznacza, że ​​została uruchomiona automatyczna lampa błyskowa.

testowe_automatyczne kadrowanie

Testuje zachowanie automatycznego kadrowania aparatu. Wykonuje duże powiększenie w taki sposób, że żadna twarz w scenie nie jest widoczna, włącza tryb automatycznego kadrowania, ustawiając AUTOFRAMING w CaptureRequest na True i sprawdza, czy wszystkie twarze w oryginalnej scenie można wykryć, gdy stan się zbiega (to znaczy, gdy AUTOFRAMING_STATE w CaptureResult jest ustawione na AUTOFRAMING_STATE_CONVERGED ).

Testowane interfejsy API:

Pass: Wykryto wszystkie trzy twarze.

test_display_p3

Testy Wyświetlanie przechwyconego pliku P3 w formacie JPEG przy użyciu interfejsu API ColorSpaceProfiles . Sprawdza, czy przechwycony plik JPEG ma w nagłówku odpowiedni profil ICC i czy obraz zawiera kolory spoza gamy sRGB.

Testowane interfejsy API:

Pass: JPEG zawiera profil ICC Display P3 i kolory spoza gamy sRGB.

efekty_testowe

Przechwytuje klatkę dla obsługiwanych efektów kamery i sprawdza, czy są one poprawnie generowane. Test sprawdza tylko efekty OFF i MONO , ale zapisuje obrazy dla wszystkich obsługiwanych efektów.

Testowane interfejsy API:

Pass: Przechwytuje obraz sceny z OFF efektami i obraz monochromatyczny z efektami ustawionymi na MONO .

test_efekty_MONO

test_effects_MONO.jpg

test_format_combos

Testuje różne kombinacje formatów wyjściowych.

Testowane interfejsy API:

Pass: Wszystkie kombinacje zostały pomyślnie przechwycone.

test_jpeg_jakość

Testuje jakość kompresji JPEG w aparacie. Przejdź do jakości JPEG poprzez android.jpeg.quality i upewnij się, że tabele kwantyzacji zmieniają się prawidłowo.

Testowane interfejsy API:

Pass: Macierz kwantyzacji zmniejsza się wraz ze wzrostem jakości. (Macierz reprezentuje współczynnik dzielenia.)

test_jpeg_jakość

Średnia jasność/chroma matrycy DQT tylnego aparatu Pixel 4 w porównaniu z jakością JPEG

test_jpeg_quality nie powiódł się

Nieudany przykład testu

Należy zauważyć, że w przypadku obrazów o bardzo niskiej jakości (jakość JPEG < 50) nie następuje wzrost kompresji w matrycy kwantyzacji.

test_num_faces

Testuje wykrywanie twarzy.

Testowane interfejsy API:

Pass: Znajduje trzy twarze.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_preview_min_frame_rate

Testuje, czy liczba klatek na sekundę podglądu zmniejsza się prawidłowo w ciemnej scenie. Aby ten test zadziałał prawidłowo, światła na stanowisku testowym muszą zostać wyłączone przez kontrolera lub ręcznie przez operatora testu.

Testowane interfejsy API:

Wynik pozytywny: liczba klatek podglądu jest na poziomie minimum żądanego zakresu szybkości klatek, a różnice między klatkami są mniejsze niż bezwzględna tolerancja ustawiona w teście.

test_reprocess_uv_swap

Testuje, czy ponowne przetwarzanie YUV nie zamienia płaszczyzn U i V. Można to wykryć, obliczając sumę różnic bezwzględnych (SAD) między przetworzonym obrazem a zdjęciem nieprzetworzonym. Jeśli zamiana wyjściowych płaszczyzn U i V przetworzonego przechwytywania skutkuje zwiększonym SAD, wówczas zakłada się, że dane wyjściowe mają prawidłowe płaszczyzny U i V.

Testowane interfejsy API:

Pass: Płaszczyzny U i V nie są zamieniane.

test_reprocess_uv_swap

test_reprocess_uv_swap.png

scena2_b

test_num_faces

Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.

Testowane interfejsy API:

Pass: Znajduje 3 twarze.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Przechwytuje dwa obrazy przy użyciu największych popularnych formatów YUV i JPEG o takich samych proporcjach jak największy format JPEG, ale nie przekraczających rozdzielczości 1920x1440. Ustawia jpeg.quality na 100 i przechwytuje żądanie podwójnej powierzchni. Konwertuje oba obrazy na tablice RGB i oblicza średnią kwadratową 3D (RMS) różnicy między dwoma obrazami.

Testowane interfejsy API:

Wynik pozytywny: obrazy YUV i JPEG są podobne i różnią się o mniej niż 1% RMS (średnia kwadratowa sygnału).

scena2_c

test_num_faces

Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.

Testowane interfejsy API:

Pass: Znajduje 3 twarze.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

Testuje opóźnienie przechwytywania JPEG dla klasy wydajności S, jak określono w sekcji 2.2.7.2 Kamera w CDD.

Zaliczony: MUSI mieć opóźnienie przechwytywania plików JPEG w kamerze2 < 1000 ms dla rozdzielczości 1080p, zgodnie z pomiarem za pomocą testu wydajności kamery CTS w warunkach oświetlenia ITS (3000 K) dla obu kamer głównych.

test_camera_launch_perf_class

Testuje opóźnienie uruchomienia kamery dla klasy wydajności S zgodnie z sekcją 2.2.7.2 Kamera w CDD.

Zaliczony: MUSI mieć opóźnienie uruchomienia kamery 2 (otwarcie kamery do pierwszej klatki podglądu) < 600 ms, zgodnie z pomiarem w teście wydajności kamery CTS w warunkach oświetlenia ITS (3000 K) dla obu kamer głównych.

scena2_d

test_num_faces

Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.

Testowane interfejsy API:

Pass: Znajduje 3 twarze.

scena2_e

test_ciągły_obraz

Przechwytywanych jest 50 klatek w rozdzielczości VGA przy pierwszym żądaniu przechwytywania ustawionym na android.control.afMode = 4 (CONTINUOUS_PICTURE).

Testowane interfejsy API:

Pass: system 3A zostaje ustabilizowany po przechwyceniu 50 klatek.

test_num_faces

Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.

Testowane interfejsy API:

Pass: Znajduje 3 twarze.

scena2_f

scene2_f ma trzy twarze z białym tłem i białym ubraniem. Twarze mają szeroką gamę odcieni skóry i duży kontrast z tłem.

scene2_f.png

scena2_f

test_num_faces

Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.

Testowane interfejsy API:

Pass: Znajduje 3 twarze.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scena 3

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.