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_jitter
Mierzy jitter w znacznikach czasu kamery.
Testowane interfejsy API:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Pass: Różnica między klatkami wynosi co najmniej 30 ms.
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:
-
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
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:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
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:
- Przechwytuje obrazy dla wszystkich obsługiwanych wzorców testowych.
- Wykonuje prostą kontrolę poprawności wzoru testowego jednolitego koloru i pasków kolorów.
Testowane interfejsy API:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Pomyślnie: obsługiwane wzorce testowe są generowane poprawnie.
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:
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: YUV i RAW wyglądają podobnie.
test_tonemap_curve_raw_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:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.hardware.Sensor#TYPE_GYROSCOPE
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:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.os.Vibrator
-
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
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: 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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
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:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
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.jpg
test_auto_vs_manual_wb.jpg
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:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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_czarny.jpg | test_czarny_biały_biały.jpg |
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:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
-
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
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.jpg
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
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.png
test_crop_region_raw
Sprawdza, czy strumieni RAW nie można przycinać.
Testowane interfejsy API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Pass: obrazy YUV są przycinane do środka, ale nie obrazy RAW.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Wynik pozytywny: parametry surowego modelu DNG są prawidłowe. Oczekiwane wartości RGB odpowiadają rzeczywistym zmierzonym wartościom RGB.
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Pass: Zdjęcia pokazują rosnącą ekspozycję bez prześwietlania w pięciu krokach.
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
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.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:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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.png
![]() | ![]() | |
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.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.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
![]() | |||
test_latching_i=12.jpg |
test_latching_plot_means.png
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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: Wartości R, G, B muszą rosnąć liniowo wraz ze zwiększoną czułością.
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Pass: Ujęcia wyglądają spójnie.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
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:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Pass: Wartości R i B zwiększają się zgodnie z transformacją.
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.jpg
test_param_color_correctness_req=1.jpg (wzmocnienie R)
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.jpg
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.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
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.png
0: WYŁ., 1: SZYBKO, 2: HQ, 3: MIN., 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_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.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
test_param_shading_mode
Testuje, czy zastosowano parametr android.shading.mode
.
Testowane interfejsy API:
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Pass: tryby cieniowania są przełączane, a mapy cieniowania obiektywu modyfikowane zgodnie z oczekiwaniami.
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
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:
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
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.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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
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.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
Przechwytuje zestaw surowych obrazów o rosnącym wzmocnieniu i mierzy szum. Przechwytuje tylko surowo, w serii.
Testowane interfejsy API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
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.png
test_raw_exposure
Przechwytuje zestaw surowych obrazów przy rosnącym czasie ekspozycji i mierzy wartości pikseli.
Testowane interfejsy API:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
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.png
(10⁰ to 1 ms, 10¹ to 10 ms, 10⁻¹ to 0,1 ms)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_raw_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:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Podanie: Wariancja wzrasta z każdym strzałem.
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
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.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
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:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
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.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.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:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
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.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:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW10
-
android.hardware.graphics.ImageFormat#RAW12
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.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
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:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
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:
-
android.hardware.camera2.params.ColorSpaceProfiles
-
android.hardware.camera2.params.SessionConfiguration#setColorSpace
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
-
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Pass: Przechwytuje obraz sceny z OFF
efektami i obraz monochromatyczny z efektami ustawionymi na MONO
.
test_effects_MONO.jpg
test_format_combos
Testuje różne kombinacje formatów wyjściowych.
Testowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
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.)
Średnia jasność/chroma matrycy DQT tylnego aparatu Pixel 4 w porównaniu z jakością JPEG
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Znajduje trzy twarze.
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:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
-
android.media.CamcorderProfile
-
android.media.MediaRecorder
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:
-
android.hardware.camera2.CameraDevice#createCaptureSession
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Pass: Płaszczyzny U i V nie są zamieniane.
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Znajduje 3 twarze.
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:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
-
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
-
android.graphics.ImageFormat#JPEG
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Znajduje 3 twarze.
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
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:
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
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:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
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.
scena2_f
test_num_faces
Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.
Testowane interfejsy API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Znajduje 3 twarze.
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:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Pass: 3A converges for exposure, gain, awb (auto white balance), and fd (focus distance) three times within tolerance.
test_edge_enhancement
Tests that the android.edge.mode
parameter is applied correctly. Captures non-reprocess images for each edge mode and returns sharpness of the output image and the capture result metadata. Processes a capture request with a given edge mode, sensitivity, exposure time, focus distance, and output surface parameter.
Pass: HQ
mode (2) sharper than OFF
mode (0). FAST
mode (1) sharper than OFF
mode. HQ
mode sharper or equal to FAST
mode.
APIs tested:
Impacted camera parameters:
-
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (fast mode)
test_edge_enhancement_edge=2.jpg (high quality mode)
test_flip_mirror
Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .
Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.
Pass: Image isn't flipped, mirrored or rotated.
test_flip_mirror_scene_patch.jpg
test_landscape_to_portrait
Tests if the landscape to portrait override functions correctly for landscape-oriented sensors.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
-
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
-
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Pass: The test is able to locate a chart with the expected rotation (0 degrees when the landscape to portrait override is disabled, 90 degrees when enabled).
test_landscape_to_portrait.png
test_lens_movement_reporting
Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilizes as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first few frames with the lens stationary at optimum focal distance, and the final few frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass: Lens movement flag is True
in the frame with sharpness change.
Fail mechanisms:
-
lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) intest_log.DEBUG
is asserted only in frames where sharpness isn't changing. - Frames with
lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) intest_log.DEBUG
has a sharpness difference compared to the first few frames at optimum focal distance or the last few frames at minimum focus distance.
test_reprocess_edge_enhancement
Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.
APIs tested:
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Pass: Sharpness for the different edge modes is correct. HQ
(mode 2) is sharper than OFF
(mode 0), and improvement between different modes is similar.
test_reprocess_edge_enhancement_plot.png
scene4
Scene4 consists of a black circle on a white background inside a square.
scene4
test_aspect_ratio_and_crop
Tests if images are distorted or cropped unexpectedly in the image pipeline. Takes pictures of a circle over all formats. Verifies the circle isn't distorted, the circle doesn't move from the center of image, and the circle doesn't change size incorrectly with different aspect ratios or resolutions.
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
Fail mechanisms:
- The circle in the captured image is distorted by the processing pipeline.
- Lower resolution image is double cropped in the image pipeline creating different FoV between high and low resolution images.
- The circle in the captured image is cropped due to an extreme aspect ratio capture request reducing the height or width of the image.
- The circle in the captured image has a reflection in the center and doesn't appear fully filled.
test_multi_camera_alignment
Tests the camera calibration parameters related to camera positioning for multi-camera systems. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Pass: Circle centers and sizes are as expected in projected images compared to captured images using camera calibration data and focal lengths.
Fail mechanisms:
-
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
, orLENS_POSE_ROTATION
are design values and not actual calibration data. - The camera system isn't appropriate for the test setup. For example, testing a wide and an ultra-wide camera system with the RFoV test rig. For more information, see Camera ITS-in-a-box FAQ1 .
test_preview_aspect_ratio_and_crop
Similar to the test_aspect_ratio_and_crop test for still captures, this test checks the supported preview formats to ensure the preview frames aren't stretched or cropped inappropriately. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center of the frame, and the circle size doesn't change for a constant format or with different resolutions (field of view check).
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
test_preview_stabilization_fov
Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON
, and another with preview stabilization OFF
. A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%.
test_video_aspect_ratio_and_crop
Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
scene5
Scene5 requires a uniformly lit gray scene. This is accomplished by a diffuser placed over the camera lens. We recommend the following diffuser: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
To prepare the scene, attach a diffuser in front of the camera and point the camera to a lighting source of around 2000 lux. Images captured for scene5 require diffuse lighting with no features evident. The following is a sample image:
scene5 capture
test_lens_shading_and_color_uniformity
Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.
scene6
Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.
scene6
test_in_sensor_zoom
Tests the behavior of the camera in-sensor zoom feature, which produces cropped RAW images.
With the stream use case set to CROPPED_RAW
, the test takes two captures over the zoom range, a full field of view (FoV) RAW image and a cropped RAW image. The test converts the images to RGB arrays, downscales the full-sized cropped RAW image to the size reported by SCALER_RAW_CROP_REGION
, and calculates the 3D root mean square (RMS) difference between the two images.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Pass: The 3D root mean square (RMS) difference between the downscaled cropped RAW image and the full FoV RAW image is less than 1%.
test_zoom
Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.
test_zoom to find the contour of the circle closest to the center.
test_low_latency_zoom
Tests the camera low latency zoom behavior. Takes captures over the zoom range with android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
, and checks if the circles in the output images match the zoom ratios in the capture metadata.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Pass: Relative size of captured circle is accurate against the zoom ratio result metadata.
test_preview_video_zoom_match
Tests that while recording and zooming, video preview and video output display and record the same output. Calculates the size of the circle closest to the center at different zoom ratios and checks whether the size of the circle increases as the zoom ratio increases.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio in video and preview.
VGA_640x480_key_frame.png (before zoom)
preview_640x480_key_frame.png (before zoom)
VGA_640x480_key_frame.png (after zoom)
preview_640x480_key_frame.png (after zoom)
scene_extensions
The scene_extensions
tests are for camera extensions and must use Camera ITS-in-a-Box , as they require precise control of the testing environment.
scene_hdr
The scene_hdr
scene consists of a portrait on the left and a low-contrast QR code on the right.
scene_hdr
test_hdr_extension
Tests the HDR extension . Takes captures with and without the extension enabled, and checks if the extension makes the QR code more detectable.
APIs tested:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Pass: The HDR extension reduces the number of contrast changes needed to detect the QR code or reduces the gradient across the QR code.
scene_night
The scene_night
scene consists of a white circle with four smaller circles inside of it, all against a black background. The smaller circle in the top right corner is darker than the others to indicate orientation.
scene_night
test_night_extension
Tests the Night extension . Takes captures with and without the extension enabled, and checks for the following:
- The capture with the Night extension enabled takes longer.
- The capture with the Night extension enabled is brighter or has scene artifacts with an improved appearance.
APIs tested:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Pass: Compared to a capture without the Night extension enabled, a capture with the Night extension enabled takes at least 0.5 seconds longer. The capture must be at least 10% brighter, or the gray dots in the scene must be 20 pixel values lower than the surrounding circle's center.
sensor_fusion
Sensor fusion tests require specific phone movement in front of a checkerboard pattern. For optimum results, ensure the test chart is mounted flat. Charts that aren't flat affect the rotation calculations for many of the tests. The sensor_fusion
tests can be automated with the Sensor Fusion Box .
Image of checkerboard
test_multi_camera_frame_sync
Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.
test_preview_stabilization
Tests that stabilized preview video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_sensor_fusion
Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME
parameter is not enabled.
The test_sensor_fusion
test generates a number of plots. The two most important plots for debugging are:
test_sensor_fusion_gyro_events
: Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.test_sensor_fusion_plot_rotations
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_FACING
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .
Fail mechanisms:
- Offset error: The camera-gyroscope offset isn't correctly calibrated to within +/-1 ms.
- Frame drops: The pipeline isn't fast enough to capture 200 frames consecutively.
- Socket errors:
adb
can't reliably connect to the DUT long enough to execute the test. - The chart isn't mounted flat. The plot
test_sensor_fusion_plot_rotations
has frames where the gyroscope and camera rotation vary considerably as the camera rotates through the parts of the chart that aren't flat. - The camera isn't mounted flat. The plot
test_sensor_fusion_gyro_events
shows movement in the X and Y planes. This failure is more common in front-facing cameras as the rear camera often has a raised bump to the rest of the phone body, creating a tilt when mounting the rear of the phone to the mounting plate.
test_video_stabilization
Tests that stabilized video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_led_snapshot
Tests that the LED snapshots don't saturate or tint the image.
This test adds a lighting controller to the sensor fusion box to control the lights. With the lights set to OFF
, the test takes a capture with the AUTO_FLASH
mode set to ON
. During this capture, the test runs a precapture sequence with the aePrecapture
trigger set to START
, and sets the capture intent to Preview
to take the capture with flash.
Because the capture has a distinctive hotspot due to flash, the test computes the flash image mean of the entire capture and verifies whether the value is within the (68, 102) range. To check if the image is reasonably white-balanced, the test calculates the R/G and B/G ratios and verifies whether the ratios are within 0.95 and 1.05.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass: The R/G and B/G ratios are within 0.95 and 1.05. The flash image mean is within the (68, 102) range.