Testy aparatu ITS

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Ta strona zawiera wyczerpującą listę testów w ramach pakietu Camera Image Test Suite (ITS), który jest częścią pakietu Android Compatibility Test Suite (CTS) Verifier. Testy ITS są testami funkcjonalnymi, co oznacza, że ​​nie mierzą jakości obrazu, ale 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 są pogrupowane według sceny w następujący sposób:

  • scene0 : Przechwyć metadane, drgania, żyroskop, wibracje
  • scena 1 : Ekspozycja, czułość, kompensacja EV, YUV vs JPEG/RAW
  • scena 2 : Wykrywanie twarzy
  • scena 3 : Wzmocnienie krawędzi, ruch obiektywu
  • scena 4 : Współczynnik proporcji, kadrowanie, pole widzenia
  • scena 5 : Cieniowanie obiektywu
  • scena 6 : Zoom
  • sensor_fusion : przesunięcie czasowe 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 telefon musi być nieruchomy do testowania żyroskopu i wibracji.

test_burst_capture

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

Testowane interfejsy API:

Pass: przechwytuje serię zdjęć w pełnym rozmiarze, a aparat jest wystarczająco szybki, aby uniknąć przekroczenia limitu czasu.

test_capture_result_dump

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

Testowane interfejsy API:

Pass: kończy przechwytywanie i zrzuca wyniki przechwytywania.

test_gyro_bias

Testuje, czy żyroskop ma stabilne wyjście, 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

drgania_testowe

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 mały).

metadane_testowe

Testuje poprawność wpisów metadanych. Przegląda wyniki przechwytywania i obiekty charakterystyczne dla kamery. Ten test wykorzystuje wartości ekspozycji i wzmocnienia auto_capture_request , ponieważ zawartość obrazu nie jest ważna.

Testowane interfejsy API:

Pass: Poziom sprzętu, tagi rollingShutterSkew , frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FOV, odległość hiperfokalna są prawidłowe.

test_param_czułość_burst

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

Testowane interfejsy API:

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

test_odczyt_zapis

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

Testowane interfejsy API:

Pass: Odczyt i zapis wartości pasują do wszystkich uderzeń.

test_sensor_events

Testuje, które urządzenie wysyła zapytania i drukuje zdarzenia czujnika dla urządzeń, które reklamują 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 jest w trybie gotowości.

Testowane interfejsy API:

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

test_solid_color_test_pattern

Testuje, czy wzorce testowe jednolitego koloru są generowane prawidłowo dla wyciszania kamery. Jeśli obsługiwane jest wyciszanie kamery, muszą być obsługiwane jednolite kolory wzorców testowych. Jeśli wyciszanie kamery nie jest obsługiwane, wzorce testowe w jednolitych kolorach są testowane tylko wtedy, gdy funkcja jest reklamowana.

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, testowana jest tylko czerń.

Testowane interfejsy API:

Powodzenie: Obsługiwane jednolite wzorce testowe mają prawidłowy kolor i niewielkie zróżnicowanie obrazu.

test_test_wzór

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

  1. Przechwytuje obrazy dla wszystkich obsługiwanych wzorców testowych.
  2. Wykonuje proste sprawdzenie poprawności wzorca testowego jednolitego koloru i kolorowych pasków.

Testowane interfejsy API:

Powodzenie: Obsługiwane wzorce testowe są generowane poprawnie.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Testuje konwersję wzorca testowego z RAW na YUV z liniową mapą tonalną. 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ą tonalną i idealnym wejściem obrazu (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 czujnika obrazu i ruchu są w tej samej dziedzinie czasu.

Testowane interfejsy API:

Pass: sygnatury czasowe ruchu znajdują się pomiędzy dwoma sygnaturami czasowymi obrazu.

ograniczenie_wibracji_testowych

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

Testowane interfejsy API:

Pass: urządzenie nie wibruje, gdy jest wyciszone przez interfejs API ograniczeń dźwięku kamery.

scena 1

scena 1 to szary wykres. Szara mapa musi pokrywać środkowe 30% pola widzenia kamery. Oczekuje się, że szary wykres będzie umiarkowanym wyzwaniem dla 3A (automatyczna ekspozycja, automatyczny balans bieli, autofokus), ponieważ region środkowy nie ma żadnych funkcji. Żądanie przechwycenia określa jednak całą scenę, która zawiera elementy wystarczające do zbieżności 3A.

Kamery RFoV mogą być testowane na stanowisku testowym WFoV lub RFoV. Jeśli kamera RFoV jest testowana na stanowisku testowym WFoV, wykres jest skalowany o ⅔, aby zapewnić pewne granice dla szarego wykresu w FoV, aby pomóc zbieżności 3A.

scena 1

scena 1: Pełna tabela 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, a zwrócone wartości 3A są prawidłowe.

test_ae_af

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

Testowane interfejsy API:

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

test_ae_precapture_trigger

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

Testowane interfejsy API:

Pass: AE jest zbieżny.

test_auto_vs_manual

Testy, które przechwytywały zdjęcia automatyczne i ręczne, wyglądają tak samo.

Testowane interfejsy API:

Powodzenie: Ręczne wzmocnienie i transformacja balansu bieli zgłaszane w każdym wyniku dopasowania do automatycznego estimate balansu bieli z 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 pełne obrazy czarno-białe. Wykonuje dwa zdjęcia, pierwsze z bardzo niskim wzmocnieniem i krótką ekspozycją, co daje czarne zdjęcie, a drugie z bardzo dużym wzmocnieniem i długim czasem naświetlania, co daje białe zdjęcie.

Testowane interfejsy API:

Pass: Tworzy czarno-białe obrazy. 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ęć z ręcznymi ustawieniami przechwytywania i sprawdza, czy wszystkie są identyczne. Tego testu można użyć do określenia, czy występują sporadyczne klatki, które są przetwarzane w inny sposób lub zawierają artefakty.

Testowane interfejsy API:

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

Niepowodzenie: Pokazuje skok lub spadek wykresu średniej 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 wracają do obiektów CaptureResult . Wykonuje automatyczne, ręczne i automatyczne przechwytywanie.

Testowane interfejsy API:

Pass: metadane są ważne dla wszystkich przechwyceń, a ustawienia ręczne nie przeciekają do drugiego automatycznego przechwytywania. Wykreśla korekcję cieniowania obiektywu dla przechwyconych obrazów.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

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

Testowane interfejsy API:

Pass: obrazy YUV są wyśrodkowane, 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

regiony_upraw_testowych

Testuje działanie regionów upraw. Wykonuje pełny obraz i tworzy plamy z 5 różnych regionów (narożniki i środek). Wykonuje zdjęcia z ustawionym kadrowaniem dla 5 regionów. Porównuje wartości wstawki i przyciętego obrazu.

Testowane interfejsy API:

Pass: obraz przyciętego obszaru odpowiada łatce odpowiadającej przyciętemu obrazowi.

test_dng_noise_model

Sprawdza, czy parametry surowego modelu DNG są poprawne. Wykres przedstawia zmierzoną wariancję środkowego obszaru szarej karty w nieprzetworzonych ujęciach zarejestrowanych w zakresie różnych czułości i porównuje te wartości z wariancją oczekiwaną dla każdej czułości przez model szumu DNG w HAL kamery (na podstawie parametry O,S zwracane w obiektach wyników przechwytywania). Aby uzyskać więcej informacji na temat modelu szumu DNG, pobierz następujący dokument dotyczący modelu szumu DNG .

Testowane interfejsy API:

Pass: Parametry surowego modelu DNG są prawidłowe. Oczekiwane wartości RGB są zgodne z rzeczywistymi zmierzonymi wartościami RGB.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Sprawdza, czy zastosowano kompensację 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ść zostanie nasycona, jeśli obliczone wartości przekroczą rzeczywisty zakres wartości obrazu. Test kończy się niepowodzeniem, jeśli wartości oczekiwane i zmierzone nie zgadzają się lub obrazy są prześwietlone w ciągu pięciu kroków.

Testowane interfejsy API:

Pass: Obrazy pokazują zwiększającą się 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 zastosowanie kompensacji EV przy użyciu zakresu utworzonego za pomocą CONTROL_AE_COMPENSATION_STEP . Przy każdej wartości kompensacji rejestrowanych jest osiem klatek.

Testowane interfejsy API:

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

test_ev_compensation_basic

test_ev_compensation_basic.png

ekspozycja_testowa

Testuje, czy osiąga się stałą ekspozycję, ponieważ zmienia się ISO i czas ekspozycji. Wykonuje serię zdjęć, których czułość ISO i czas naświetlania zostały wybrane w celu wzajemnego zrównoważenia. Wyniki powinny mieć taką samą jasność, ale w ciągu sekwencji obraz powinien być bardziej zaszumiony. Sprawdza, czy średnie wartości pikseli próbki są zbliżone do 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ć z obrazami RAW, ustawiając flagę debug w pliku konfiguracyjnym.

Testowane interfejsy API:

Pass: Obrazy mają taką samą jasność, ale stają się bardziej zaszumione przy wyższej czułoś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, które przekonwertowały obrazy YUV i obrazy JPEG urządzenia, wyglądają tak samo. Test zajmuje środkowe 10% obrazu i oblicza wartość RGB oraz 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_zatrzasku

Testuje, czy ustawienia (ekspozycja i wzmocnienie) zatrzaskują się na prawej ramce dla kamer FULL i LEVEL_3 . Wykonuje serię ujęć, korzystając z kolejnych żądań, zmieniając parametry żądania przechwytywania między ujęciami. Sprawdza, czy obrazy mają oczekiwane właściwości.

Testowane interfejsy API:

Pass: obrazy [2, 3, 6, 8, 10, 12, 13] mają zwiększoną czułość ISO lub ekspozycję i są wyświetlane z wyższymi wartościami RGB w 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ć do pikseli liniowych. Przechwytuje sekwencję strzałów z urządzeniem skierowanym na jednorodny cel.

Testowane interfejsy API:

Pass: wartości R, G, B muszą rosnąć liniowo wraz ze wzrostem czułości.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Testuje blokadę 3A i wybuch YUV (przy użyciu ustawień automatycznych). Ten test zaprojektowano tak, aby pomyślnie przeszedł nawet na ograniczonych urządzeniach, które nie mają MANUAL_SENSOR ani PER_FRAME_CONTROLS . Test sprawdza spójność obrazu YUV, gdy sprawdzanie liczby klatek na sekundę odbywa się w trybie CTS.

Testowane interfejsy API:

Pass: Przechwyty wyglądają na spójne.

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_multi_camera_match

Testy mające na celu sprawdzenie, czy wiele kamer na urządzeniach daje podobne wartości RGB dla szarej plamy.

Testowane interfejsy API:

Pass: Różne kamery wytwarzają podobne wartości RGB dla tej samej szarej plamy.

test_multi_camera+match_yuv_fl=4.38

test_multi_camera+match_yuv_fl=4.38.jpg

test_param_color_correction

Testuje, czy parametry android.colorCorrection.* są stosowane, gdy są ustawione. Wykonuje zdjęcia z różnymi wartościami transformacji i wzmocnienia oraz sprawdza, czy wyglądają odpowiednio inaczej. Transformacja i wzmocnienia są wybierane tak, aby wyjście było coraz bardziej czerwone lub niebieskie. Wykorzystuje liniową mapę tonalną. Odwzorowanie tonalne to technika stosowana w przetwarzaniu obrazu do mapowania jednego zestawu kolorów na inny w celu przybliżenia wyglądu obrazów o wysokim zakresie dynamicznym na nośniku o bardziej ograniczonym zakresie dynamicznym.

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 = wzmocnienie czerwonego, 2 = wzmocnienie niebieskiego

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 (zwiększenie R)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (podbicie B)

test_parametr_ekspozycji_czas

Testuje, czy zastosowano parametr android.sensor.exposureTime .

Testowane interfejsy API:

Pass: Każdy strzał jest jaśniejszy niż poprzedni.

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

wykres_czasu_testu_parametru_ekspozycji

test_parametr_ekspozycji_czas_plot.png

test_parametr_flash_mode

Testuje zastosowanie parametru android.flash.mode . Ręcznie ustawia ekspozycję na ciemną stronę, aby było oczywiste, czy lampa błyskowa zadziałała, czy nie, i wykorzystuje liniową mapę tonalną. Sprawdza środek z obrazem kafelkowym, aby zobaczyć, czy istnieje duży gradient, który jest tworzony w celu sprawdzenia, czy została uruchomiona lampa błyskowa.

Testowane interfejsy API:

Pass: środek obrazu kafelka ma duży gradient, co oznacza, że ​​wyzwoliła się lampa błyskowa.

test_parametr_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Testuje, czy ustawiony parametr android.noiseReduction.mode jest stosowany poprawnie. Robienie zdjęć przy słabo oświetlonym aparacie. Wykorzystuje wysokie wzmocnienie analogowe, aby zapewnić, że przechwycony obraz jest zaszumiony. Przechwytuje trzy obrazy, dla wyłączonej redukcji szumów, „szybko” i „wysoka jakość”. Przechwytuje również obraz z niskim wzmocnieniem i wyłączoną redukcją szumów i wykorzystuje wariancję tego jako linię bazową. Im wyższy SNR (stosunek sygnału do szumu), tym lepsza jakość obrazu.

Testowane interfejsy API:

Pass: SNR różni 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_SNR

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_parametr_czułość

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

Testowane interfejsy API:

Pass: Średnie RGB środka 10% staje się jaśniejsze wraz ze wzrostem czułości.

test_param_czułość_iso=0055

test_param_czułość_iso=0055.jpg

test_param_czułość_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_czułość_iso=3583

test_param_czułość_iso=3583.jpg

test_param_czułość_iso=5347

test_param_czułość_iso=5347.jpg

test_param_czułość_iso=7111

test_param_czułość_iso=7111.jpg

test_parametr_czułości_plot

test_param_sensitivity_plot.png

test_param_shading_mode

Testuje zastosowanie parametru android.shading.mode .

Testowane interfejsy API:

Pass: Tryby cieniowania są przełączane, a mapy cieniowania obiektywu są 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 zastosowanie parametru android.tonemap.mode. Stosuje różne krzywe mapy tonalnej do każdego kanału R, G, B i sprawdza, czy obrazy wyjściowe są modyfikowane zgodnie z oczekiwaniami. Ten test składa się z dwóch testów, test1 i test2.

Testowane interfejsy API:

Przechodzić:

  • test1: Oba obrazy mają liniową mapę tonalną, ale n=1 ma bardziej stromy gradient. Kanał G (zielony) jest jaśniejszy dla obrazu n=1.
  • test2: Ta sama mapa tonalna, 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 po zwiększeniu czułości RAW. Przechwytuje zestaw obrazów RAW i YUV z różną 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_czułość

Przechwytuje zestaw nieprzetworzonych obrazów z rosnącymi wzmocnieniami i mierzy szum. Przechwytuje tylko surowe, w serii.

Testowane interfejsy API:

Pass: Każdy strzał jest głośniejszy niż poprzedni, ponieważ zwiększa się wzmocnienie.

Wykorzystuje wariancję środkowej komórki siatki statystyk.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Przechwytuje zestaw nieprzetworzonych obrazów z rosnącym czasem ekspozycji i mierzy wartości pikseli.

Testowane interfejsy API:

Pass: Zwiększenie ISO (wzmocnienie) 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_surowa_czułość

Przechwytuje zestaw nieprzetworzonych obrazów z rosnącą czułością i mierzy szum (zmienność) w środkowych 10% obrazu. Testuje, czy każdy strzał jest głośniejszy niż poprzedni.

Testowane interfejsy API:

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

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

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

Testowane interfejsy API:

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

Typowy wykres SNR vs NR_MODE

Typowy wykres SNR vs NR_MODE

test_tonemap_sequence

Testuje sekwencję ujęć z różnymi krzywymi mapy tonalnej. Przechwytuje 3 ręczne ujęcia z liniową mapą tonalną. Przechwytuje 3 ręczne ujęcia z domyślną mapą tonalną. Oblicza deltę mię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 przekonwertowaniu 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 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 przekonwertowaniu przez moduł image_processing_utils .

Testowane interfejsy API:

Pass: Obrazy YUV i JPEG są podobne i mają różnicę mniejszą 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 i YUV. Wykorzystuje ręczne żądanie z liniową mapą tonalną, więc oczekuje się, że RAW i YUV będą takie same. Porównuje środkowe 10% wartości RGB przekonwertowanych obrazów RGB. Loguje android.shading.mode .

Testowane interfejsy API:

Pass: Obrazy YUV i JPEG są podobne i mają różnicę mniejszą 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

test_yuv_plus_raw10

Testy przechwytywania pojedynczej klatki jako wyjścia RAW10 i YUV. Wykorzystuje ręczne żądanie z liniową mapą tonalną, więc oczekuje się, że RAW i YUV będą takie same. Porównuje środkowe 10% wartości RGB przekonwertowanych obrazów RGB. Loguje android.shading.mode .

Testowane interfejsy API:

Pass: Obrazy RAW10 i YUV są podobne i mają różnicę mniejszą niż 3,5% RMS (średnia kwadratowa sygnału).

test_yuv_plus_raw10_shading=1_rawtest_yuv_plus_raw10_shading=1_yuv
test_yuv_plus_raw10_shading=1_raw.jpg test_yuv_plus_raw10_shading=1_yuv.jpg

test_yuv_plus_raw12

Testy przechwytywania pojedynczej klatki jako wyjścia RAW12 i YUV. Wykorzystuje ręczne żądanie z liniową mapą tonalną, więc oczekuje się, że RAW i YUV będą takie same. Porównuje środkowe 10% wartości RGB przekonwertowanych obrazów RGB. Loguje android.shading.mode .

Testowane interfejsy API:

Pass: obrazy RAW12 i YUV są podobne i mają różnicę mniejszą niż 3,5% RMS (średnia kwadratowa sygnału).

test_yuv_plus_raw12_shading=1_raw.jpgtest_yuv_plus_raw12_shading=1_yuv.jpg
test_yuv_plus_raw12_shading=1_raw.jpg test_yuv_plus_raw12_shading=1_yuv.jpg

scena2_a

scene2_a ma trzy twarze z szarym tłem i neutralnym ubraniem. Twarze są wybierane tak, aby miały szeroką gamę odcieni skóry.

scena2_a

scena2_a

test_auto_flash

Testuje wyzwalanie automatycznego błysku w ciemnej scenie. Sprawdza, czy wyzwalana jest automatyczna lampa błyskowa, sprawdzając, czy środek obrazu kafelkowego ma duży gradient. Aby wyzwolić automatyczną lampę błyskową, tablet i światła w zestawie testowym muszą być wyłączone. Tablet jest wyłączany przez test, a światła można wyłączyć automatycznie za pomocą kontrolera Arduino. Scena musi być całkowicie ciemna, aby test działał poprawnie. W związku z tym tylny otwór tabletu musi być całkowicie zasłonięty przez tablet sceniczny, a przedni otwór musi być zasłonięty otworem i telefonem DUT, aby uniemożliwić wpadanie rozproszonego światła do platformy.

Testowane interfejsy API:

Pass: środek obrazu kafelkowego ma duży gradient, co oznacza, że ​​wyzwoliła się automatyczna lampa błyskowa.

efekty_testowe

Przechwytuje klatkę dla obsługiwanych efektów kamery i sprawdza, czy są one generowane poprawnie. 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_effects_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.

jakość_jpeg_testowa

Testuje jakość kompresji JPEG aparatu. Przejdź jakości JPEG przez android.jpeg.quality i upewnij się, że tabele kwantyzacji zmieniają się poprawnie.

Testowane interfejsy API:

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

jakość_jpeg_testowa

Średnie luma/chromatyczna matryca DQT tylnego aparatu Pixel 4 w porównaniu z jakością JPEG

test_jpeg_jakości nie powiódł się

Nieudany przykład testu

Należy zauważyć, że w przypadku obrazów o bardzo niskiej jakości (jpeg. quality < 50) nie ma wzrostu kompresji w macierzy kwantyzacji.

liczba_testów_twarzy

Testuje wykrywanie twarzy.

Testowane interfejsy API:

Pass: Znajduje trzy twarze.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scena2_b

test_auto_per_frame_control

Testuje właściwości PER_FRAME_CONTROL pod kątem żądań automatycznego przechwytywania.

Testowane interfejsy API:

Pass: wszystkie właściwości PER_FRAME_CONTROL są obecne.

test_auto_per_frame_control_frame_1

test_auto_per_frame_control_frame_1.jpg

test_auto_per_frame_control_frame_10

test_auto_per_frame_control_frame_10.jpg

test_auto_per_frame_control_frame_29

test_auto_per_frame_control_frame_29.jpg

test_auto_per_frame_control_plot

test_auto_per_frame_control_plot.png

liczba_testów_twarzy

Testuje wykrywanie twarzy ze zwiększoną 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_jpg_capture_sameness

Przechwytuje dwa obrazy przy użyciu największych popularnych formatów YUV i JPEG z takim samym współczynnikiem proporcji jak największy format JPEG, nieprzekraczającym rozdzielczości 1920x1440. Ustawia jpeg.quality na 100 i przechwytuje żądanie podwójnej powierzchni. Konwertuje oba obrazy na tablice RGB i oblicza różnicę średniej kwadratowej (RMS) 3D między dwoma obrazami.

Testowane interfejsy API:

Pass: Obrazy YUV i JPEG są podobne i mają różnicę mniejszą niż 1% RMS (średnia kwadratowa sygnału).

scena2_c

liczba_testów_twarzy

Testuje wykrywanie twarzy ze zwiększoną 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 zgodnie z opisem w sekcji 2.2.7.2 Aparat w CDD.

Zdany: MUSI mieć opóźnienie przechwytywania JPEG kamery2 < 1000 ms dla rozdzielczości 1080p, zmierzone w teście wydajności kamery CTS w warunkach oświetleniowych ITS (3000 K) dla obu głównych kamer.

test_camera_launch_perf_class

Testuje opóźnienie uruchomienia kamery dla klasy wydajności S zgodnie z opisem w sekcji 2.2.7.2 Aparat w CDD.

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

scena2_d

liczba_testów_twarzy

Testuje wykrywanie twarzy ze zwiększoną różnorodnością odcieni skóry w scenach twarzy.

Testowane interfejsy API:

Pass: Znajduje 3 twarze.

scena2_e

test_ciągły_obraz

50 klatek w rozdzielczości VGA jest przechwytywanych z pierwszym ustawieniem żądania przechwytywania android.control.afMode = 4 (CONTINUOUS_PICTURE).

Testowane interfejsy API:

Pass: system 3A ustala się pod koniec przechwytywania 50 klatek.

liczba_testów_twarzy

Testuje wykrywanie twarzy ze zwiększoną różnorodnością odcieni skóry w scenach twarzy.

Testowane interfejsy API:

Pass: Znajduje 3 twarze.

scena 3

Scena 3 używa wykresu ISO12233, a większość testów wykorzystuje metodę ekstraktora wykresów, aby znaleźć wykres w scenie. Z tego powodu większość zapisanych obrazów nie posiada obramowań jak w przypadku scen 1, 2 czy 4, a jedynie wykres.

test_3a_spójność

Testy konsystencji 3A.

Testowane interfejsy API:

Pass: 3A zbiega się pod względem ekspozycji, wzmocnienia, awb (automatycznego balansu bieli) i fd (odległość ogniskowania) trzy razy w granicach tolerancji.

test_edge_enhancement

Testuje, czy parametr android.edge.mode jest stosowany poprawnie. Przechwytuje obrazy bez ponownego przetwarzania dla każdego trybu krawędzi i zwraca ostrość obrazu wyjściowego oraz metadane wyniku przechwytywania. Przetwarza żądanie przechwycenia z określonym trybem krawędzi, czułością, czasem ekspozycji, odległością ogniskowania i parametrem powierzchni wyjściowej.

Pass: tryb HQ (2) ostrzejszy niż tryb OFF (0). Tryb FAST (1) ostrzejszy niż tryb OFF . Tryb HQ ostrzejszy lub równy trybowi FAST .

Testowane interfejsy API:

Zmienione parametry aparatu:

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (tryb szybki)

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_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 stabilize 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 10 frames with the lens stationary at optimum focal distance, and the final 10 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.

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

Takes pictures of a circle inside of a square over all formats. Verifies that 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: 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_multi_camera_alignment

Tests the multi camera system parameters related to camera spacing. 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: Focal lengths and circles sizes are consistent.

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%. ie the FOV changes at most 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/diffuser

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

sensor_fusion

Sensor fusion tests require specific phone movement in front of a checkerboard pattern. 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] .

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