На этой странице представлен полный список тестов из набора тестов Camera Image Test Suite (ITS), который является частью набора тестов Android Compatibility Test Suite (CTS) Verifier. Тесты ITS — это функциональные тесты, то есть они не измеряют качество изображения, а проверяют, работают ли все заявленные функции камеры должным образом. Этот документ позволяет разработчикам и тестировщикам понять, что делают отдельные тесты и как отлаживать ошибки тестирования.
Система ITS для камер проверяет соответствие требованиям к свойствам камеры, уровню API и уровню класса производительности мультимедиа (MPC). Для уровня API ITS использует ro.product.first_api_level для проверки тестов, добавленных на определенном уровне API, которые позволяют выявить негативные пользовательские впечатления от функциональности на более низких уровнях API. Для проверки функций, добавленных на определенном уровне API и требующих новых аппаратных возможностей, ITS использует ro.vendor.api_level Если для устройства определен параметр ro.odm.build.media_performance_class , ITS требует запуска определенных тестов в зависимости от уровня MPC.
Тесты сгруппированы по сценам следующим образом:
-
scene0: Захват метаданных, дрожания, гироскопа, вибрации -
scene1: Экспозиция, чувствительность, компенсация значения экспозиции (EV), YUV по сравнению с JPEG и RAW. -
scene2: Распознавание лиц, тесты, требующие цветных сцен. -
scene3: Улучшение контуров, перемещение объектива -
scene4: Соотношение сторон, кадрирование, поле зрения -
scene5: Затенение линз -
scene6: Масштабирование -
scene7: Переключение между несколькими камерами -
scene8: Автоматическая экспозиция (AE) и автоматический баланс белого (AWB) в режиме замера экспозиции по регионам. -
scene9: сжатие JPEG -
scene_extensions: Расширения камеры -
scene_tele: Переключение телеобъектива -
scene_flash: Автоматическая вспышка, минимальная частота кадров -
scene_video: Пропуски кадров -
sensor_fusion: Смещение синхронизации камеры и гироскопа -
feature_combination: Комбинации признаков -
scene_ip: Совпадение разрешения изображения между стандартным приложением камеры и приложением Jetpack Camera App (JCA)
Описание каждой сцены приведено в отдельных разделах.
сцена0
Для проведения тестов не требуется никакой конкретной информации о ситуации. Однако для проверки гироскопа и вибрации телефон должен быть неподвижен.
test_jitter
Измеряет дрожание во временных метках камеры.
Протестированные API:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP -
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Пройдено: разница между кадрами составляет не менее 30 мс.
На следующем рисунке обратите внимание на небольшой диапазон значений по оси Y. На самом деле, дрожание на этом графике невелико.

Рисунок 1. График test_jitter.
тестовые метаданные
Проверяет достоверность записей метаданных, анализируя результаты съемки и объекты характеристик камеры. В этом тесте используются значения экспозиции и усиления auto_capture_request , поскольку содержимое изображения не имеет значения.
Протестированные 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
Проходной параметр: параметры Hardware level, rollingShutterSkew , frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , field of view (FoV) и hyperfocal distance присутствуют и имеют допустимые значения.
test_request_capture_match
Проверяет, правильно ли устройство записывает значения экспозиции и усиления, считывая метаданные захвата.
Протестированные 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
Пройдено: значения метаданных запроса и захвата совпадают во всех кадрах.
test_sensor_events
Для устройств, которые заявляют о поддержке объединения данных с датчиков, этот тест проверяет, запрашивает ли устройство данные с датчиков и выводит ли они их на экран. Ожидаются данные с акселерометра, гироскопа и магнитометра. Этот тест работает только при включенном экране, то есть устройство не находится в режиме ожидания.
Протестированные API:
Пройдено: получены события от каждого датчика.
тест_сплошной_цвет_тестовый_паттерн
Проверяется корректность генерации однотонных тестовых шаблонов для отключения звука камеры. Если отключение звука камеры поддерживается, должны поддерживаться и однотонные тестовые шаблоны. Если отключение звука камеры не поддерживается, однотонные тестовые шаблоны проверяются только в том случае, если эта возможность заявлена.
Если поддерживаются RAW-изображения, проверяется также присвоение цветов. Проверяются следующие цвета: черный, белый, красный, синий и зеленый. Для камер, не поддерживающих RAW-изображения, проверяется только черный цвет.
Протестированные 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
Пройдено: Поддерживаются сплошные тестовые шаблоны правильного цвета, и наблюдается низкая вариативность изображения.
тест_тест_паттерн
Тест проверяет параметр android.sensor.testPatternMode для захвата кадров для каждого допустимого тестового шаблона и убеждается в корректной генерации кадров для сплошных цветов и цветовых полос. Этот тест включает следующие шаги:
- Делает снимки для всех поддерживаемых тестовых шаблонов.
- Выполняет проверку корректности тестового шаблона сплошного цвета и цветовых полос.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES -
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Пройдено: Поддерживаемые тестовые шаблоны сгенерированы корректно.

Рисунок 2. Пример test_test_patterns.
test_tonemap_curve
Тестирует преобразование тестового шаблона из необработанного формата в YUV с использованием линейной тоновой карты. Для этого теста требуется android.sensor.testPatternMode = 2 ( COLOR_BARS ), чтобы сгенерировать идеальный шаблон изображения для преобразования в тоновую карту. Проверяет, что конвейер выдает корректные цветовые результаты с линейной тоновой картой и идеальным входным изображением (зависит от test_test_patterns ).
Протестированные 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
Пройдено: YUV- и RAW-файлы выглядят похожими друг на друга.

Рисунок 3. Исходный пример тестовой тоновой карты.

Рисунок 4. Пример YUV-изображения тестовой тоновой карты.
test_unified_timestamp
Проверяет, находятся ли события, регистрируемые датчиками изображения и движения, в одной и той же временной области.
Протестированные API:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP -
android.hardware.Sensor -
android.hardware.SensorEvent -
android.hardware.Sensor#TYPE_ACCELEROMETER -
android.hardware.Sensor#TYPE_GYROSCOPE
Проход: Временные метки движения находятся между временными метками двух изображений.
test_vibration_restriction
Проверяет, работает ли вибрация устройства должным образом.
Протестированные API:
-
android.hardware.Sensor -
android.hardware.SensorEvent -
android.hardware.Sensor#TYPE_ACCELEROMETER -
android.os.Vibrator -
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Пройдено: устройство не вибрирует при отключении звука в соответствии с API ограничения звука камеры.
сцена1_1
scene1 — это серая таблица. Серая таблица должна покрывать центральные 30% поля зрения камеры. Ожидается, что серая таблица будет представлять собой умеренную сложность для алгоритма 3A (автоэкспозиция, автоматический баланс белого и автофокусировка), поскольку центральная область не содержит никаких особенностей. Однако запрос на захват изображения указывает на всю сцену, которая включает достаточное количество особенностей для сходимости алгоритма 3A.
Камеры RFoV можно тестировать в испытательном стенде WFoV или RFoV. Если камера RFoV тестируется на испытательном стенде WFoV, масштаб таблицы увеличивается на 2/3, чтобы задать некоторые границы для серой таблицы в поле зрения и помочь сходимости 3A. Более подробное описание испытательных стендов для камер см. в разделе «Устройства ITS для камер в одном комплекте» .

Рисунок 5. Полноразмерная схема сцены 1 (слева), схема в масштабе 2/3 (справа).
test_ae_precapture_trigger
Проверяет конечный автомат AE при использовании триггера предварительного захвата. Захватывает пять запросов, отправленных вручную, с отключенным AE. Последний запрос имеет триггер предварительного захвата AE, который следует игнорировать, поскольку AE отключен.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE -
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER -
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Прохождение: AE сходится.
test_auto_vs_manual
Результаты тестов, в которых были получены снимки в автоматическом и ручном режимах, выглядят одинаково.
Протестированные 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
Пройдено: значения усиления и преобразования баланса белого, указанные в каждом результате съемки, соответствуют автоматической estimate баланса белого, полученной с помощью алгоритма 3A камеры.

Рисунок 6. Пример сравнения автоматического режима test_auto и manual.

Рисунок 7. Пример сравнения автоматической и ручной балансировки белого.

Рисунок 8. Пример преобразования баланса белого в ручном режиме test_auto_vs_manual.
тест_черный_белый
Проверяет, что устройство выдает полностью черно-белые изображения. Делает два снимка: первый с крайне низким усилением и короткой выдержкой, в результате чего получается черное фото, а второй с крайне высоким усилением и длительной выдержкой, в результате чего получается белое фото.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME -
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Проход: Создает черно-белые изображения. Насыщенные каналы белых изображений имеют значения RGB [255, 255, 255] с погрешностью менее 1% разницы.

Рисунок 9. test_black_white, пример с черным цветом.

Рисунок 10. test_black_white, белый пример.

Рисунок 11. test_black_white, пример графика средних значений.
test_burst_capture
Проверяет, что весь конвейер захвата может справляться со скоростью захвата в полном размере и временем работы процессора.
Протестированные API:
Проходной этап: Захватывает серию полноразмерных изображений, проверяет наличие пропусков кадров и яркость изображения.
test_burst_sameness_manual
Делает 5 серий по 50 снимков с ручными настройками захвата и проверяет, что все они идентичны. Используйте этот тест, чтобы выявить наличие отдельных кадров, обработанных по-разному, или кадров с артефактами.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR -
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Пройдено: Изображения визуально и по значениям RGB идентичны.
Ошибка: Отображает всплеск или падение среднего значения RGB-диаграммы в начале каждого всплеска.
- Допустимое отклонение составляет 3% для
first_API_level< 30 - Допустимое отклонение составляет 2% для
first_API_level>= 30

Рисунок 12. Пример среднего значения test_burst_sameness_manual.

Рисунок 13. test_burst_sameness_manual_plot_means
test_crop_region_raw
Проверяет, что RAW-поток не подлежит обрезке.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE -
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION -
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Проходной параметр: изображения в формате YUV обрезаются по центру, а изображения в формате RAW — нет.

Рисунок 14. Пример необработанных данных о посевах из региона test_crop_region_raw.

Рисунок 15. Пример полного исходного файла test_crop_region_raw comp.

Рисунок 16. Пример YUV-изображения для анализа региона test_crop_region_raw.

Рисунок 17. Полный пример файла test_crop_region_raw YUV.
тестовые_регионы_культуры
Проверяет работоспособность функции обрезки областей. Берет полное изображение и создает фрагменты из пяти различных областей (углы и центр). Делает снимки с настройкой обрезки для этих пяти областей. Сравнивает значения фрагмента и обрезанного изображения.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE -
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Проходной этап: Изображение обрезанной области соответствует фрагменту, который соответствует обрезанному изображению.
test_ev_compensation
Тесты, демонстрирующие применение компенсации значения экспозиции (EV). Тест состоит из базового и расширенного разделов.
В базовом разделе проверяется, применяется ли компенсация EV с использованием диапазона, созданного с помощью CONTROL_AE_COMPENSATION_STEP . Для каждого значения компенсации захватывается восемь кадров.
В разделе «Дополнительные настройки» экспозиция увеличивается в восемь раз, и проверяется соответствие измеренной яркости ожидаемой. Ожидаемые значения рассчитываются исходя из яркости изображения без учета компенсации экспозиции, и ожидаемое значение достигает насыщения, если рассчитанные значения превышают диапазон фактических значений изображения. Тест считается не пройденным, если ожидаемые и измеренные значения не совпадают или если изображения переэкспонированы в течение пяти шагов.
Протестированные 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.CaptureResult#CONTROL_AE_STATE -
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK -
android.hardware.camera2.CaptureResult#TONEMAP_CURVE -
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Базовый проход по секции: На изображениях показано увеличение экспозиции без переэкспозиции в течение пяти шагов.

Рисунок 18. test_ev_compensation_basic.
Расширенный проход по участку: фиксирует увеличение яркости по мере увеличения параметра компенсации экспозиции. Восемь кадров, захваченных для каждого параметра компенсации экспозиции, имеют стабильные значения яркости.

Рисунок 19. test_ev_compensation_advanced_plot_means.
test_exposure_x_iso
Тест проверяет, достигается ли постоянная экспозиция при изменении ISO и времени экспозиции. Делается серия снимков с ISO и временем экспозиции, сбалансированными друг с другом. Результаты должны иметь одинаковую яркость, но на протяжении всей последовательности изображение должно становиться более шумным. Проверяется, близки ли средние значения пикселей образца друг к другу. Проверяется, не ограничены ли значения 0 или 1 (что сделало бы их похожими на плоские линии). Тест также можно запустить с RAW-изображениями, установив флаг debug в файле конфигурации.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME -
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Пройдено: Изображения имеют одинаковую яркость, но становятся более шумными при более высоком значении ISO. Плоскости RGB остаются плоскими, когда значение ISO*экспозиция остается постоянным в пределах тестируемого диапазона усиления.
Механизм сбоя: На следующем рисунке по мере увеличения значений множителя усиления (ось x) нормализованные средние значения плоскости RGB (ось y) начинают отклоняться от значений с низким множителем усиления.

Рисунок 20. test_exposure_plot_means.

Рисунок 21. test_exposure_mult=1.00.

Рисунок 22. test_exposure_mult=64.00.
тест_защелкивание
Проверяет, что настройки (экспозиция и усиление) фиксируются в нужном кадре для камер FULL и LEVEL_3 . Делает серию снимков, используя последовательные запросы, изменяя параметры запроса захвата между снимками. Проверяет, что изображения обладают ожидаемыми свойствами.
Протестированные API:
Проход: Изображения [2, 3, 6, 8, 10, 12, 13] имеют повышенное значение ISO или экспозиции и отображаются с более высокими средними значениями RGB на графике на следующем рисунке.

Рисунок 23. Пример графика test_latching.

Рисунок 24. test_latching i=00.

Рисунок 25. test_latching i=01.

Рисунок 26. test_latching i=02.

Рисунок 27. test_latching i=03.

Рисунок 28. test_latching i=04.

Рисунок 29. test_latching i=05.

Рисунок 30. test_latching i=06.

Рисунок 31. test_latching i=07.

Рисунок 32. test_latching i=08.

Рисунок 33. test_latching i=09.

Рисунок 34. test_latching i=10.

Рисунок 35. test_latching i=11.

Рисунок 36. test_latching i=12.
тест_линейность
Проверяет возможность инвертирования обработки изображения устройством до линейных пикселей. Делает последовательность снимков, направив устройство на однородную цель.
Протестированные 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
Пройдено: значения R, G, B должны линейно возрастать с увеличением чувствительности.

Рисунок 37. Пример графика средних значений test_linearity.
тест_заблокированный_взрыв
Проверяет блокировку 3A и пакетную передачу YUV-изображений (с использованием автоматической настройки). Этот тест разработан таким образом, чтобы проходить даже на устройствах с ограниченными возможностями, не имеющих MANUAL_SENSOR или PER_FRAME_CONTROLS . Тест проверяет согласованность YUV-изображения, в то время как проверка частоты кадров выполняется в режиме CTS.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK -
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Пас: Снимки выглядят согласованно.

Рисунок 38. Пример кадра 0 теста test_locked_burst.

Рисунок 39. Пример кадра 1 теста с заблокированным пакетом.

Рисунок 40. Пример кадра 2 теста с заблокированным пакетом данных.
сцена1_2
scene 1_2 является функционально идентичной копией scene 1_1 , в которой реализована структура подсцен для сокращения продолжительности scene 1 .
test_param_color_correction
Проверяет, применяются ли параметры android.colorCorrection.* если они заданы. Делает снимки с различными значениями преобразования и усиления и проверяет, выглядят ли они соответственно по-разному. Параметры преобразования и усиления выбираются таким образом, чтобы выходной сигнал становился всё более красным или синим. Использует линейную тональную карту.
Тоновое отображение — это метод, используемый в обработке изображений для сопоставления одного набора цветов с другим с целью приближения внешнего вида изображений с высоким динамическим диапазоном в среде с более ограниченным динамическим диапазоном.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS -
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE -
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Пройдено: значения R и B повышаются в соответствии с преобразованием.

Рисунок 41. Пример графика средних значений параметра test_param_color_correction.
На следующих рисунках по оси X отложены запросы на захват: 0 = единица, 1 = красное усиление, 2 = синее усиление.

Рисунок 42. Пример test_param_color_correction req=0 unity.

Рисунок 43. Пример использования параметра test_param_color_correctness req=1 для усиления красного цвета.

Рисунок 44. Пример использования параметра test_param_color_correction req=2 для усиления синего цвета.
test_param_flash_mode
Проверяет, применяется ли параметр android.flash.mode . Вручную устанавливает экспозицию на темный уровень, чтобы было очевидно, сработала вспышка или нет, и использует линейную тоновую карту. Сравнивает центр изображения с тайлом, чтобы проверить наличие большого градиента, создающего эффект срабатывания вспышки.
Протестированные API:
Пройдено: В центре изображения плитки наблюдается большой градиент, что означает, что вспышка сработала.

Рисунок 45. Пример использования параметра test_param_flash_mode 1.

Рисунок 46. Пример использования одного тайла в режиме test_param_flash_mode.

Рисунок 47. Пример использования параметра test_param_flash_mode 2.

Рисунок 48. Пример с двумя плитками в режиме test_param_flash_mode.
test_param_noise_reduction
Проверяет корректность применения параметра android.noiseReduction.mode при его установке. Делает снимки при слабом освещении камеры. Использует высокое аналоговое усиление, чтобы гарантировать наличие шума на захваченном изображении. Делает три снимка: с выключенным шумоподавлением, в быстром режиме и в режиме высокого качества. Также делает снимок с низким усилением и выключенным шумоподавлением, используя его дисперсию в качестве базовой. Чем выше отношение сигнал/шум (SNR), тем лучше качество изображения.
Протестированные API:
Пройдено: отношение сигнал/шум изменяется в зависимости от режима шумоподавления и ведет себя аналогично следующему графику:

Рисунок 49. Пример графика отношения сигнал/шум (SNR) для параметра test_param_noise_reduction.
0: ВЫКЛ., 1: БЫСТРО, 2: ВЫСОКОЕ КАЧЕСТВО, 3: МИН., 4: ЗСЛ

Рисунок 50. Пример теста с высоким коэффициентом усиления nr=0 (test_param_noise_reduction).

Рисунок 51. Пример теста с высоким коэффициентом усиления nr=1 (test_param_noise_reduction).

Рисунок 52. Пример теста с высоким коэффициентом усиления nr=2 (test_param_noise_reduction).

Рисунок 53. Пример теста с высоким коэффициентом усиления nr=3 (test_param_noise_reduction).

Рисунок 54. Пример теста с низким коэффициентом усиления для параметра test_param_noise_reduction.
test_param_shading_mode
Проверяет, применяется ли параметр android.shading.mode .
Протестированные 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
Пройдено: режимы затенения переключены, и карты затенения линзы изменены в соответствии с ожиданиями.

Рисунок 55. Карта затенения линзы test_param_shading_mode, пример цикла 0 в режиме 0.

Рисунок 56. Карта затенения линзы test_param_shading_mode, пример цикла 0 в режиме 1.

Рисунок 57. Карта затенения линзы test_param_shading_mode, пример цикла 0 в режиме 2.
test_param_tonemap_mode
Проверяет, применяется ли параметр android.tonemap.mode . Применяет различные кривые тоновой карты к каждому каналу R, G, B и проверяет, изменяются ли выходные изображения должным образом. Этот тест состоит из двух тестов: test1 и test2 .
Протестированные 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
Проходить:
-
test1: Оба изображения имеют линейную тональную карту, ноn=1градиент более крутой. Канал G (зеленый) ярче на изображенииn=1. -
test2: Одинаковая тональная карта, но разная длина. Изображения одинаковые.

Рисунок 58. test_param_tonemap_mode с n=0.

Рисунок 59. test_param_tonemap_mode с n=1.
test_post_raw_sensitivity_boost
Проверяет усиление чувствительности после обработки необработанных изображений. Делает захват набора необработанных и YUV-изображений с различной чувствительностью, обрабатывает комбинацию усиленной чувствительности необработанных изображений и проверяет, соответствует ли среднее значение пикселей на выходе запрошенным настройкам.
Протестированные 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
Проход: Необработанные изображения темнеют по мере увеличения усиления, в то время как яркость изображений в формате YUV остается постоянной.

Рисунок 60. Пример test_post_raw_sensitivity_boost raw s=3583 boost=0100.

Рисунок 61. Пример test_post_raw_sensitivity_boost raw s=1792 boost=0200.

Рисунок 62. Пример test_post_raw_sensitivity_boost raw s=0896 boost=0400.

Рисунок 63. Пример test_post_raw_sensitivity_boost raw s=0448 boost=0800.

Рисунок 64. Пример test_post_raw_sensitivity_boost raw s=0224 boost=1600.

Рисунок 65. Пример test_post_raw_sensitivity_boost raw s=0112 boost=3199.

Рисунок 66. Пример графика средних значений test_post_raw_sensitivity_boost.

Рисунок 67. Пример test_post_raw_sensitivity_boost YUV s=0112 boost=3199.

Рисунок 68. Пример test_post_raw_sensitivity_boost YUV s=0448 boost=0800.

Рисунок 69. Пример test_post_raw_sensitivity_boost YUV s=0896 boost=0400.

Рисунок 70. Пример test_post_raw_sensitivity_boost YUV s=1792 boost=0200.

Рисунок 71. Пример test_post_raw_sensitivity_boost YUV s=3585 boost=0100.

Рисунок 72. test_post_raw_sensitivity_boost_yuv_plot_means
test_raw_exposure
Делает снимок набора необработанных изображений с увеличивающимся временем экспозиции и измеряет значения пикселей.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW -
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Проходной параметр: Увеличение ISO (усиления) делает пиксели более чувствительными к свету, поэтому график смещается влево.

Рисунок 73. Пример test_raw_exposure ISO=55.
10⁰ равно 1 мс, 10¹ равно 10 мс, а 10⁻¹ равно 0,1 мс.

Рисунок 74. Пример test_raw_exposure ISO=132.

Рисунок 75. Пример test_raw_exposure ISO=209.

Рисунок 76. Пример test_raw_exposure ISOs=286.

Рисунок 77. Пример test_raw_exposure ISO=363.

Рисунок 78. Пример test_raw_exposure ISO=440.
test_reprocess_noise_reduction
Проверяет, применяется ли android.noiseReduction.mode к запросам на повторную обработку. Делает снимки после повторной обработки при слабом освещении камеры. Использует высокое аналоговое усиление для проверки наличия шума на полученном изображении. Делает три снимка после повторной обработки: с выключенным шумоподавлением, в быстром режиме и в режиме высокого качества. Делает снимок после повторной обработки с низким усилением и выключенным шумоподавлением, используя его дисперсию в качестве базового значения.
Протестированные API:
Проходной параметр: FAST >= OFF, HQ >= FAST и HQ >> OFF.

Рисунок 79. Типичный пример графика зависимости отношения сигнал/шум (SNR) от режима шумоподавления (NR).
test_tonemap_sequence
Тестирует последовательность кадров с различными кривыми тональной карты. Делает 3 кадра, снятых вручную, с линейной тональной картой. Делает 3 кадра, снятых вручную, с тональной картой по умолчанию. Вычисляет разницу между каждой парой последовательных кадров.
Протестированные API:
Проходной балл: сначала идут три одинаковых кадра, а затем другой набор из трех одинаковых кадров.

Рисунок 80. Пример test_tonemap_sequence i=0.

Рисунок 81. Пример test_tonemap_sequence i=1.

Рисунок 82. Пример test_tonemap_sequence i=2.

Рисунок 83. Пример test_tonemap_sequence i=3.

Рисунок 84. Пример test_tonemap_sequence i=4.

Рисунок 85. Пример test_tonemap_sequence i=5.
test_yuv_jpeg_all
Проверяет работоспособность всех указанных размеров и форматов для захвата изображений. Использует ручной запрос с линейным тональным отображением, чтобы YUV и JPEG выглядели одинаково при преобразовании модулем image_processing_utils . Изображения по умолчанию не сохраняются, но их можно сохранить, включив debug_mode .
Протестированные API:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE -
android.hardware.camera2.CaptureRequest#TONEMAP_MODE -
android.graphics.ImageFormat#JPEG
Пройдено: Во всех центрах изображений максимальная среднеквадратичная разница (RMS) (значение сигнала) в изображениях, преобразованных в RGB, составляет 3% от YUV-изображения с наивысшим разрешением.

Рисунок 86. Пример test_yuv_jpeg_all.
test_yuv_plus_dng
Проведены тесты, подтверждающие работоспособность указанных размеров и форматов для захвата изображений.
Протестированные API:
Пройдено: Тест завершен и возвращает запрошенные изображения.

Рисунок 87. Пример test_yuv_plus_dng.
сцена1_3
scene 1_3 является функционально идентичной копией scene 1_1 , в которой реализована структура подсцен для сокращения продолжительности scene 1 .
test_capture_result
Проверяет, возвращаются ли корректные данные в виде объектов CaptureResult . Проверка включает в себя автоматический захват, ручной захват и второй автоматический захват.
Протестированные 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
Пройдено: Метаданные действительны для всех снимков, и ручные настройки не передаются во второй автоматический снимок. Выполняется коррекция затенения объектива для полученных снимков.

Рисунок 88. test_capture_result_plot_lsc_auto_ch0.
test_dng_noise_model
Проверяет корректность параметров модели DNG в необработанных данных. На графике отображается измеренная дисперсия центрального участка серой карты в необработанных снимках, полученных в диапазоне чувствительности, и сравниваются эти значения с ожидаемой дисперсией при каждой чувствительности, рассчитанной моделью шума DNG в HAL камеры (на основе параметров O,S, возвращаемых в объектах результатов захвата). Для получения более подробной информации о модели шума DNG загрузите следующий документ о модели шума DNG .
Протестированные 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
Пройдено: параметры исходной модели DNG корректны. Ожидаемые значения RGB соответствуют фактическим измеренным значениям RGB.

Рисунок 89. test_dng_noise_model_plog.
test_jpeg
Тесты, в которых изображения в формате YUV и изображения в формате JPEG, полученные с помощью устройства, выглядят одинаково. Тест берет центральные 10% изображения, вычисляет значение RGB и проверяет, совпадают ли они.
Протестированные API:
Пройдено: Среднее различие RGB между каждым изображением составляет менее 3%.

Рисунок 90. test_jpeg_fmt=jpg.jpg.

Рисунок 91. test_jpeg=fmt=yuv.jpg.
test_raw_burst_sensitivity
Захватывает набор необработанных изображений с возрастающим усилением и измеряет уровень шума. Захватывает только необработанные изображения в серийной съемке.
Протестированные 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
Проход: Каждый последующий выстрел сопровождается более сильным шумом, чем предыдущий, поскольку усиление увеличивается.
Использует дисперсию ячейки сетки центральных статистических данных.

Рисунок 92. test_raw_burst_sensitivity_variance.
test_raw_sensitivity
Делает снимок набора необработанных изображений с возрастающей чувствительностью и измеряет шум (дисперсию) в центральных 10% изображения. Проверяет, что каждый последующий снимок более зашумлён, чем предыдущий.
Протестированные 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
Пас: Вариативность увеличивается с каждым броском.

Рисунок 93. test_raw_sensitivity_variance.
test_yuv_plus_jpeg
Тесты, позволяющие получить один кадр в форматах YUV и JPEG. Используется ручной запрос с линейным тональным отображением, чтобы изображения в форматах YUV и JPEG выглядели одинаково при преобразовании модулем image_processing_utils .
Протестированные API:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE -
android.hardware.camera2.CaptureRequest#TONEMAP_MODE -
android.graphics.ImageFormat#JPEG
Пройдено: изображения в форматах YUV и JPEG похожи и имеют разницу менее 1% среднеквадратичного значения (значения сигнала).

Рисунок 94. test_yuv_plus_jpeg в формате JPEG.

Рисунок 95. test_yuv_plus_jpeg в формате YUV.
test_yuv_plus_raw
Тесты, захватывающие один кадр как в формате RAW (10-битный и 12-битный RAW), так и в формате YUV, если это поддерживается. Используется ручной запрос с линейным тональным отображением, поэтому ожидается, что RAW и YUV будут одинаковыми. Сравниваются значения RGB в центре изображений, преобразованных в RGB. Выводится в лог android.shading.mode .
Протестированные API:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW -
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP -
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
Пройдено: изображения в формате YUV и RAW схожи и имеют разницу менее 3,5% RMS (среднеквадратичное значение сигнала).

Рисунок 96. test_yuv_plus_raw_shading=1_raw.jpg.

Рисунок 97. test_yuv_plus_raw_shading=1_yuv.jpg.
test_sensitivity_priority
Проверяет CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY при различных значениях ISO, чтобы подтвердить корреляцию между более высоким значением ISO и повышенным уровнем шума.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY -
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY -
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY -
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRIORITY_MODE -
android.hardware.camera2.CaptureResult#CONTROL_AE_PRIORITY_MODE -
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE -
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE -
android.hardware.camera2.CaptureResult#CONTROL_AE_MODE -
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON -
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_PRIORITY_MODES
Пройдено: более высокое значение ISO приводит к повышению уровня шума.
Критерии пропуска теста
Тест test_sensitivity_priority.py пропускается, если выполняется хотя бы одно из следующих условий:
- Устройство имеет первый уровень API (
first_api_level) 35 или ниже. - Устройство не передает
CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITYвCONTROL_AE_AVAILABLE_PRIORITY_MODES.
test_exposure_time_priority
Проверяет режим CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY при различных значениях экспозиции, обеспечивая стабильную яркость в диапазоне, где ISO может компенсировать это изменение.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY -
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME -
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME -
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRIORITY_MODE -
android.hardware.camera2.CaptureResult#CONTROL_AE_PRIORITY_MODE -
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE -
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY -
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE -
android.hardware.camera2.CaptureResult#CONTROL_AE_MODE -
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON -
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_PRIORITY_MODES
Пройдено: яркость остается стабильной (в пределах допустимого отклонения) при изменении времени экспозиции, если значение ISO находится в диапазоне компенсации.
Критерии пропуска теста
Проверка test_exposure_time_priority пропускается, если выполняется хотя бы один из следующих критериев:
- Устройство имеет первый уровень API (
first_api_level) 35 или ниже. - Устройство не передает
CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITYвCONTROL_AE_AVAILABLE_PRIORITY_MODES.
scene2_a
scene2_a представлены три лица на сером фоне в нейтральной одежде. Лица выбраны таким образом, чтобы иметь широкий диапазон оттенков кожи. Для оптимальной работы распознавания лиц таблица должна иметь правильную ориентацию.

Рисунок 98. Пример сцены 2_a.
тест_автоматическое_формирование
Проверяет поведение камеры при автоматическом кадрировании. Выполняет сильное масштабирование, при котором ни одно из лиц в сцене не видно, включает режим автоматического кадрирования, установив AUTOFRAMING в CaptureRequest в True , и проверяет, можно ли обнаружить все лица в исходной сцене, когда состояние сходится (то есть, когда AUTOFRAMING_STATE в CaptureResult установлен в значение AUTOFRAMING_STATE_CONVERGED ).
Протестированные 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
Пройдено: Все три лица обнаружены.
test_display_p3
Тесты отображают изображение P3 , захваченное в формате JPEG, с использованием API ColorSpaceProfiles . Проверяется, что захваченное изображение JPEG имеет соответствующий профиль ICC в заголовке и что изображение содержит цвета, выходящие за пределы цветового пространства sRGB.
Протестированные API:
-
android.hardware.camera2.params.ColorSpaceProfiles -
android.hardware.camera2.params.SessionConfiguration#setColorSpace
Прохождение проверки: JPEG-файл содержит ICC-профиль Display P3 и цвета, выходящие за пределы цветового пространства sRGB.
тестовые эффекты
Захватывает кадр для поддерживаемых эффектов камеры и проверяет, корректно ли они генерируются. Тест проверяет только эффекты OFF и MONO , но сохраняет изображения для всех поддерживаемых эффектов.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS -
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Параллельный ход: Захватывает изображение сцены с OFF эффектами и монохромное изображение с эффектами, установленными в режим MONO .

Рисунок 99. test_effects_MONO.
test_exposure_keys_consistent
Этот тест сравнивает среднюю яркость изображения, полученного при включенной автоматической экспозиции (АЭ), с яркостью изображения, полученного при выключенной АЭ, при которой параметры экспозиции (чувствительность, время экспозиции, длительность кадра, повышение чувствительности после обработки RAW-файла), заданные вручную в файле CaptureResult изображения, полученного при включенной АЭ, также заданы.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY -
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME -
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION -
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST -
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY -
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME -
android.hardware.camera2.CaptureResult#SENSOR_FRAME_DURATION -
android.hardware.camera2.CaptureResult#CONTROL_POST_RAW_SENSITIVITY_BOOST
Пройдено: Относительная разница в яркости между двумя полученными изображениями составляет менее 4 процентов.
test_format_combos
Проверяет различные комбинации форматов вывода.
Протестированные API:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAPandroid.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()android.hardware.camera2.CameraCaptureSession#captureBurst()
Пройдено: Все комбинации успешно получены.
test_num_faces
Тесты распознавания лиц.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES -
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Проход: Находит три грани.

Рисунок 100. Пример режима обнаружения лиц test_num_faces, режим 1.
test_reprocess_uv_swap
Проверка того, что при повторной обработке YUV-изображений плоскости U и V не меняются местами, проводится путем вычисления суммы абсолютных разностей (SAD) между обработанным изображением и необработанным снимком. Если замена плоскостей U и V на выходе обработанного снимка приводит к увеличению SAD, то считается, что на выходе отображаются правильные плоскости U и V.
Протестированные 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
Пропуск: Самолеты U и V не меняются местами.

Рисунок 101. Пример test_reprocess_uv_swap.
scene2_b
test_preview_num_faces
Проверяет функцию распознавания лиц в режиме предварительного просмотра с увеличенным разнообразием оттенков кожи в сценах с лицами.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES -
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Проходной шаг: Находит три лица, у которых в ограничивающих прямоугольниках лиц обнаружены лицевые ориентиры.

Рисунок 102. Пример режима обнаружения лиц test_num_faces, режим 1.
test_yuv_jpeg_capture_sameness
Создает два изображения, используя самые распространенные форматы YUV и JPEG с тем же соотношением сторон, что и у самого распространенного формата JPEG, но не превышающим разрешение 1920x1440. Устанавливает jpeg.quality равным 100 и захватывает запрос на отображение двух поверхностей. Преобразует оба изображения в массивы RGB и вычисляет среднеквадратичную разницу (RMS) в трехмерном пространстве между двумя изображениями.
Кроме того, этот тест подтверждает, что выходные данные в формате YUV для всех поддерживаемых сценариев использования потоковой передачи данных достаточно близки к выходным данным в формате YUV для сценария использования STILL_CAPTURE .
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES -
android.hardware.camera2.CaptureRequest#JPEG_QUALITY -
android.graphics.ImageFormat#JPEG
Pass: YUV and JPEG images for the STILL_CAPTURE use case have less than 3% RMS (root-mean-square value of a signal) difference; YUV images for all supported use cases have less than 10% RMS difference from YUV images with the STILL_CAPTURE use case.
scene2_c
test_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES -
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds three faces.

Figure 103. test_num_faces face detection mode example.
test_jpeg_capture_perf_class
Tests JPEG capture latency for the S performance class as specified in section 2.2.7.2 Camera in the CDD.
Pass: MUST have camera2 JPEG capture latency < 1000 ms for 1080p resolution as measured by the CTS camera PerformanceTest under ITS lighting conditions (3000K) for both primary cameras.
test_camera_launch_perf_class
Tests camera launch latency for the S performance class as specified section 2.2.7.2 Camera in the CDD.
Pass: MUST have camera2 startup latency (open camera to first preview frame) < 600ms as measured by the CTS camera PerformanceTest under ITS lighting conditions (3000K) for both primary cameras.
test_default_camera_hdr
Tests that default camera capture is Ultra HDR for performance class 15 as specified in section 2.2.7.2 Camera of the CDD.
Pass: Default camera package capture MUST be Ultra HDR for a performance class 15 device.
scene2_d
test_preview_num_faces
Tests face detection in preview with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES -
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds three faces with face landmarks in the face bounding boxes.
scene2_e
test_continuous_picture
50 VGA resolution frames are captured with the capture request first setting android.control.afMode = 4 (CONTINUOUS_PICTURE).
APIs tested:
-
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: 3A system settles by the end of a 50-frame capture.
test_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES -
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds 3 faces.
scene2_f
scene2_f has three faces with a white background and white clothing. The faces have a wide range of skin tones and high contrast with the background.

Figure 104. scene2_f example.
test_preview_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES -
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds three faces with face landmarks in the face bounding boxes.

Figure 105. test_num_faces_fd_mode_1 example.
scene2_g
scene2_g has three profile faces with a white background and white clothing. The faces have a wide range of skin tones and high contrast with the background.

Figure 106. scene2_g example.
test_preview_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES -
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds three faces with face landmarks in the face bounding boxes.

Figure 107. test_preview_num_faces example.
scene3
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_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

Figure 108. test_edge_enhancement edge=0 example.

Figure 109. test_edge_enhancement edge=1 (fast mode) example.

Figure 110. test_edge_enhancement edge=2 (high quality mode) example.
test_flip_mirror
Tests if the image is properly oriented as per 7.5.2 Front-Facing Camera in the CDD.
Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.
Pass: Image isn't flipped, mirrored, or rotated.

Figure 111. test_flip_mirror scene patch example.
test_imu_drift
Tests if the inertial measurement unit (IMU) has stable output for 30 seconds while the device is stationary and capturing a high-definition preview.
APIs tested:
-
android.hardware.Sensor -
android.hardware.SensorEvent -
android.hardware.Sensor#TYPE_GYROSCOPE -
android.hardware.Sensor#TYPE_ROTATION_VECTOR
Проходить:
- The drift of the gyroscope is less than 0.01 rad over the test time.
- The variance of the gyroscope reading is less than 1E-7 rad 2 /s 2 /Hz over the test time.
- The drift of the rotation vector is less than 0.01 rad over the test time.
- (Not yet mandated) The drift of the gyroscope is less than 1 degree per second.

Figure 112. test_imu_drift gyroscope drift example.

Figure 113. test_imu_drift rotation vector drift example.
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 locates a chart with the expected rotation (0 degrees when the landscape-to-portrait override is disabled, 90 degrees when enabled).

Figure 114. test_landscape_to_portrait example.
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 important 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.DEBUGis asserted only in frames where sharpness isn't changing. - Frames with
lens_moving: False(android.hardware.camera2.CaptureResult#LENS_STATE= 0) intest_log.DEBUGhas 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.

Figure 115. test_reprocess_edge_enhancement plot example.
scene4
scene4 consists of a black circle on a white background inside a square.
Tests in scene4 can be sensitive to alignment, so starting in Android 15, you can use check_alignment.py in the tools directory to enable a check of the DUT and chart alignment.

Figure 116. scene4 example.
test_30_60fps_preview_fov_match
Tests that 30 FPS and 60 FPS preview videos have the same FoV. The test captures two videos, one with 30 FPS and another with 60 FPS. A representative frame is selected from each video and analyzed to verify that the FoV changes in the two videos are within specifications. Tests that the circle's aspect ratio remains constant, the center of the circle remains stable, and the radius of the circle remains constant.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE -
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION -
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME -
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 aspect ratio change between 30 FPS and 60 FPS videos is no more than 7.5%
Fail mechanisms:
- The circle from the 30 FPS video is significantly different in size from the 60 FPS video.
- The circle in the captured image is distorted by the processing pipeline.
- 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_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 is preserved.
Fail mechanisms:
- The camera isn't aligned with the circle displayed on the tablet in the center of the captured scene.
- The circle in the captured image is distorted by the processing pipeline.
- The 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 subcameras, 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, andLENS_POSE_ROTATIONare 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 FAQ Q1 .
test_preview_aspect_ratio_and_crop
Similar to the test_aspect_ratio_and_crop test for still captures, checks the supported preview formats to verify that 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 (FoV 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 is preserved.
test_preview_stabilization_fov
Checks the supported preview sizes to help 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 verify 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 than 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 (FoV 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 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:

Figure 117. scene5 capture example.
Because no tablets or controllers are required for this scene, tests use the TEST_BED_MANUAL testbed. For an example, see Manual testing config.yml file . The default config.yml file doesn't include TEST_BED_MANUAL but you can modify the file to include one.
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 red-green and blue-green 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 red-green and blue-green value must be less than 20% to pass the test.
scene6
scene6 is a grid of uniquely identifiable ArUco markers. Tests in scene6 can be sensitive to alignment, so starting in 15, you can use check_alignment.py in the tools directory to enable a check of the DUT and chart alignment.

Figure 118. scene6 example.
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 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 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 RMS difference between the downscaled cropped raw image and the full FoV raw image is less than the threshold set in the test.
test_zoom
Tests the camera zoom behavior from the ultrawide lens to the wide lens. Takes captures over the zoom range and checks if the ArUco markers get bigger as the camera zooms in. The test also checks if the center marker's position changes predictably over each capture. The distance from the center marker's center to the image center can either change at a constant rate with respect to the zoom ratio until a physical camera switch, or it can change monotonically towards the location of the same marker after a physical camera switch. The Jetpack Camera App ( JCA ) must be installed on the device before testing.
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 ArUco marker is accurate against requested zoom ratio to verify that the camera is zooming correctly, and marker distance to the image center changes according to the criteria stated in the test description.

Figure 119. test_zoom to find the contour of the ArUco marker 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 markers in the output images match the zoom ratios in the capture metadata. The same camera capture session is used to converge 3A and take captures.
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 marker 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 marker closest to the center at different zoom ratios and checks whether the size of the marker 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 marker is accurate against requested zoom ratio in video and preview.

Figure 120. HD_1280x720_key_frame.png (before zoom).

Figure 121. preview_1280x720_key_frame.png (before zoom).

Figure 122. HD_1280x720_key_frame.png (after zoom).

Figure 123. preview_1280x720_key_frame.png (after zoom).
test_preview_zoom
Tests that the zoom ratio of each preview frame matches the corresponding capture metadata from the ultrawide lens to the wide lens. The test takes preview frames over the zoom range and finds the ArUco marker closest to the center. The test then checks if the center marker's position changes predictably over each capture. The distance from the center marker's center to the image center can either change at a constant rate with respect to the zoom ratio until a physical camera switch, or it can change monotonically towards the location of the same marker after a physical camera switch.
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: The relative size of the selected ArUco marker is accurate for the reported zoom ratio of the corresponding capture result for all of the preview frames. The relative distance of the selected marker from the center of the image is accurate for the reported zoom ratio of the corresponding capture result of all the preview frames.

Figure 124. test_preview_zoom images showing selected marker closest to the center
test_session_characteristics_zoom
Tests the zoom ratio range for all supported session configurations listed in CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION . For each of those configurations, if CameraDeviceSetup#isSessionConfigurationSupported returns true , the test verifies that the zoom ratio range returned in CameraDeviceSetup#getSessionCharacteristics can be reached.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION -
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported -
android.hardware.camera2.CameraDevice.CameraDeviceSetup#getSessionCharacteristics
Pass: Both the minimum and maximum zoom ratios can be reached for each supported SessionConfiguration listed in CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION .
scene7
scene7 is a rectangular frame divided into four equal quadrants, each filled with a different color. In the center of the rectangle is a slanted edge chart for sharpness checks. Four ArUco markers are aligned with the four outer corners of the rectangle to assist in obtaining accurate coordinates of the main rectangle frame at varying zoom ratios.

Figure 125. scene7.
test_multi_camera_switch
This test verifies that during preview recording at varying zoom ratios, the switch between the ultrawide (UW) and wide (W) lenses results in similar RGB values.
The test uses different zoom ratios within the predefined range to perform a dynamic preview recording and identify the point at which the physical camera changes. This point marks the crossover from the UW to the W lens.
The frames captured at and before the crossover point are analyzed for auto exposure (AE), auto white balance (AWB), and autofocus (AF).
The AE check verifies that the luma change is within the expected range for both UW and W lens images. The AWB check verifies that the ratios of red-green and blue-green are within threshold values for both UW and W lens images. The AF check evaluates the sharpness estimation value based on the average gradient magnitude between UW and W lens images.
While executing this test if the Moire effect interferes with the results, use a higher resolution tablet from the list of Camera ITS approved list of tablets .
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE -
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO -
android.media.CamcorderProfile -
android.media.MediaRecorder
Pass: For the test to pass, the AE and AWB checks must pass. The AF check results are only used for logging purposes. The following are the criteria for each check:
- AE check: The luma change (Y value) between the UW and W lens images must be less than 4% for all the color patches if the device supports both
ae_regionsandawb_regions. If onlyae_regionsis supported then only the gray color patch values must meet the criteria. - AWB check: The difference between the red-green and blue-green values for the UW and W lens images must be less than 3% for the gray color patch and must be less than 10% for other color patches if the device supports both
ae_regionsandawb_regions. - AF check: The image sharpness for the W lens capture must be higher than the sharpness with the UW capture.

Figure 126. Gray patch taken with UW lens.

Figure 127. Gray patch taken with W lens.
scene8
scene8 is a rectangular frame divided into four equal regions, each containing a portrait taken with a different exposure or overlaid with a different color shade (blue shade, increased exposure, decreased exposure, yellow shade). Four ArUco markers are aligned with the four outer corners of the rectangle to obtain accurate coordinates of the main rectangle frame.

Figure 128. scene8 example.
test_ae_awb_regions
Tests that the RGB and luma values differ when preview recording at different AE and AWB regions.
The test records an 8 second preview recording, performing AE and AWB metering on each quadrant for 2 seconds each. The test then extracts a frame from each region's preview recording, and uses the extracted frames to perform the following AE and AWB checks:
- AE check: Verifies that the frame metering the region with decreased exposure has an increased luma value of more than 1% than the frame metering the region with increased exposure. This verifies that images are brightened when metering a dark region.
- AWB check: Verifies that the ratio of red to blue (of the image's average RGB values) in the frame with the blue metering region is more than 2% higher than the frame with the yellow metering region. This verifies that images have a balanced RGB value when metering a yellow (warm) or blue (cool) region.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS -
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS -
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AE -
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
Pass: The AE and AWB checks both pass.

Figure 129. Frame metering dark region with increased exposure.

Figure 130. Frame metering lighter region with decreased exposure.
Fail mechanisms:
Accurate detection of all four ArUco markers is essential for this test. If the initial detection fails, the system attempts a second detection pass using a black and white version of the image. The following grayscale image represents the secondary processing step:

Figure 131. ArUco markers misalignment.
test_color_correction_mode_cct
Tests COLOR_CORRECTION_MODE across different color temperatures and tints, verifying changes in RGB ratios against the capture scene, scene8 .
APIs tested:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE -
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_MODE -
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_COLOR_TEMPERATURE -
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_COLOR_TEMPERATURE -
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_COLOR_TINT -
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_COLOR_TINT -
android.hardware.camera2.CameraCharacteristics#COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE -
android.hardware.camera2.CameraMetadata#COLOR_CORRECTION_MODE_CCT -
android.hardware.camera2.CameraCharacteristics#COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES
Pass: RGB ratios exhibit the anticipated increases or decreases relative to the selected color temperatures and tints.
Test skip criteria
The test_color_correction_mode_cct test is skipped if any of the following criteria are met:
- The device has a first API level (
first_api_level) of 35 or lower. - The device doesn't advertise
COLOR_CORRECTION_MODE_CCTinCOLOR_CORRECTION_AVAILABLE_ABERRATION_MODES.
scene9
scene9 consists of thousands of randomly sized and colored circles to create a scene with very low repeatability to stress JPEG compression algorithms.

Figure 132. scene9 example.
test_jpeg_high_entropy
Tests that camera JPEG compression works on scene9 with high entropy and the JPEG quality factor set to 100%. The zoom factor is increased to verify that the scene displayed on the tablet fills the camera FoV.
APIs tested:
Pass: JPEG file is compressed properly, written, and read back from disk.
test_jpeg_quality
Tests the camera JPEG compression quality. Step JPEG qualities through android.jpeg.quality and verifies that the quantization tables change correctly.
APIs tested:
Pass: Quantization matrix decreases with quality increase. (The matrix represents the division factor.)

Figure 133. Pixel 4 rear camera luma and chroma DQT matrix averages versus JPEG quality.

Figure 134. Failed test example.
scene_video
scene_video is a video scene consisting of four different colored circles moving back and forth at different frame rates against a white background.
Figure 135. scene_video example.
test_preview_frame_drop
Tests that the requested preview frame rate is maintained with a dynamic scene. This test runs on all cameras that are exposed to third-party apps.
APIs tested:
-
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
Pass: The preview frame rate is at the maximum of the requested frame rate range, and the average variation between consecutive frames is less than the relative tolerance set in the test.
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. Additionally, all light leakage must be controlled. This might require covering the test rig, DUT, and tablet with a drop cloth as well as eliminating light leakage from the front screen of the DUT.
scene_hdr
The scene_hdr scene consists of a portrait on the left and a low-contrast QR code on the right.

Figure 136. scene_hdr example.
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_low_light
The scene_low_light scene consists of a grid of squares of varying shades of gray against a black background and the grid of squares are bound by a red outline. The squares are arranged in a Hilbert curve orientation.

Figure 137. scene_low_light example.
test_night_extension
Tests the Night extension . Takes captures with the extension enabled, and performs the following:
- Detects the presence of 20 squares
- Computes the luma bounded by each square
- Computes the average luma value of the first 6 squares according to the Hilbert curve grid orientation
- Computes the difference in luma value of consecutive squares (for example, square2 - square1) up to squares 5 and 6 (square6 - square5), and finds the average of the five computed differences.
For devices running Android 16 or higher, the capture request includes a metered region corresponding to the rectangle bounding the grid of squares. This addition changes the threshold pass criteria.
APIs tested:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions -
android.hardware.camera2.CameraExtensionSession#capture
Проходить:
- For devices running Android 16 or higher, the average luma value of the first 6 squares must be at least 80, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 18.75.
- For devices running Android 15 and lower, the average luma value of the first 6 squares must be at least 85, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 17.
The following luminance plot shows what a passing test result looks like.

Figure 138. Low light night scene passing test example.
test_low_light_boost_extension
Tests the Low Light Boost AE mode . If Camera2 supports low light boost AE mode, then this test is performed for Camera2. If the night mode camera extension is supported and the extension supports low light boost AE mode, then this test is also performed for the night mode camera extension. This test sets the AE mode to low light boost, takes a frame from the preview, and performs the following:
- Detects the presence of 20 boxes
- Computes the luma bounded by each box
- Computes the average luma value of the first 6 squares according to the Hilbert curve grid orientation
- Computes the difference in luma value of consecutive squares (for example, square2 - square1) up to squares 5 and 6 (square6 - square5), and finds the average of the five computed differences.
For devices running Android 16 or higher, the capture request includes a metered region corresponding to the rectangle bounding the grid of squares. This addition changes the threshold pass criteria.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES -
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY -
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
Проходить:
For devices running Android 16 or higher, the average luma value of the first 6 squares must be at least 54, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 17.
For devices running Android 15 and lower, the average luma value of the first 6 squares must be at least 70, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 18.
scene_tele
A key requirement for scene_tele tests is that the chart distance must be at least the minimum focus distance of the telephoto lens. As this minimum focus distance can differ between devices, you must configure your setup to suit the specific telephoto camera.

Figure 139. scene_tele setup based on focus distance of wide and tele camera.
For more information on test hardware setup, see Tele extension rig setup .
scene6_tele
The scene6_tele scene consists of a grid of ArUco markers on a white background.
If scene6_tele captures look overexposed in the modular rig , remove the front plate of the modular rig .
Disconnect the WFoV test rig from the extension and remove the phone mount.

Figure 140. Disconnect the WFoV test rig from the extension and remove the phone mount.

Figure 141. Remove the front plate.
test_zoom_tele
Tests the camera zoom behavior from the wide lens to the telephoto lens. The test is identical to test_zoom , but tests the camera zoom behavior from the wide lens to the telephoto lens.
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 ArUco marker is accurate against requested zoom ratio to verify that the camera is zooming correctly, and marker distance to the image center changes according to the criteria listed in test_zoom .
test_preview_zoom_tele
Tests the camera zoom behavior for preview frames from the wide lens to the telephoto lens. The test is identical to test_preview_zoom , but tests the camera zoom behavior for preview frames from the wide lens to the telephoto lens.
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 ArUco marker is accurate against requested zoom ratio to verify that the camera is zooming correctly, and marker distance to the image center changes according to the criteria listed in test_preview_zoom .
scene7_tele
scene7_tele is identical to scene7 , but set up for telephoto lens testing. It's a rectangular frame divided into four equal quadrants, each filled with a different color. In the center of the rectangle is a slanted edge chart for sharpness checks. Four ArUco markers are aligned with the four outer corners of the rectangle to assist in obtaining accurate coordinates of the main rectangle frame at varying zoom ratios.
test_multi_camera_switch_tele
This test verifies that during preview recording at varying zoom ratios, the switch between the wide (W) and telephoto (tele) lenses results in similar RGB values.
The test uses different zoom ratios within the predefined range to perform a dynamic preview recording and identify the point at which the physical camera changes. This point marks the crossover from the W to the tele lens.
The frames captured at and before the crossover point are analyzed for AE, AWB, and AF.
The AE check verifies that the luma change is within the expected range for both W and tele lens images. The AWB check verifies that the ratios of red-green and blue-green are within threshold values for both W and tele lens images. The AF check evaluates the sharpness estimation value based on the average gradient magnitude between W and tele lens images.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE -
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO -
android.media.CamcorderProfile -
android.media.MediaRecorder
Pass: For the test to pass, the AE, AWB, and AF checks must all pass. The following are the criteria for each check:
- AE check: The luma change between the W and tele lens images must be less than 4%.
- AWB check: In the LAB color space, the delta C between red-green and blue-green for wide and telephoto cannot exceed 10.
- AF check: The image sharpness of the tele lens must be higher than the W lens.
scene_flash
The scene_flash tests require a dark scene in the sensor fusion box.
test_auto_flash
Tests that auto-flash is triggered in a dark scene for rear-facing and front-facing cameras. For front-facing cameras, auto-flash uses the screen to illuminate the scene, not a physical flash unit. The test verifies that auto-flash is fired by checking that the center of the tile image is brighter with auto-flash enabled. To trigger auto-flash, the lights in the test rig must be turned off. The lights can be turned off automatically with the Arduino controller. The scene must be completely dark for the test to work correctly. The Jetpack Camera App ( JCA ) must be installed on the device before testing. Auto-flash for rear-facing cameras relies on the AE state to be triggered, but auto-flash for front-facing cameras doesn't rely on AE and is always triggered.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE -
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE -
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER -
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE -
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass: The center of the tile image with auto-flash enabled is brighter than the original scene image for all cameras.
test_flash_strength
Tests that flash strength control in SINGLE mode is implemented correctly.
Verifies that if the device supports flash strength control during camera use in SINGLE mode, the flash strength changes with different requested strength levels. Verifies that flash strength control works with different AE_MODES . For example, if the auto-exposure mode is ON or OFF , the flash strength level has an effect on brightness, and if the mode is ON_AUTO_FLASH , the flash strength level has no effect on brightness.
To conduct the test, lights in the test rig must be turned off. The lights can be turned off automatically with the Arduino controller. The scene must be completely dark for the test to work correctly.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL -
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL -
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL -
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_MAX_LEVEL
Проходить:
When the auto-exposure mode is ON or OFF , the brightness of the image patches increases as the flash strength level increases from no flash to FLASH_SINGLE_STRENGTH_MAX_LEVEL . When the auto-exposure mode is ON_AUTO_FLASH , the difference in brightness of the image patches is within tolerance as the flash strength level increases from no flash to FLASH_SINGLE_STRENGTH_MAX_LEVEL .
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 red-green and blue-green 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 red-green and blue-green ratios are within 0.95 and 1.05. The flash image mean is within the (68, 102) range.
test_night_mode_indicator
Tests the functionality of the night mode indicator, a feature that indicates whether the camera is operating in low light conditions and will benefit from a Night Mode Camera extension still capture. This feature is available only on devices that support Night Mode Camera extensions.
This test checks that the night mode indicator correctly reflects the lighting conditions during camera preview. The test performs the following steps:
- Initialization: The test initializes an
ItsSessionand retrieves camera properties. It also establishes a connection with the lighting controller. - Skip Conditions: The test is skipped if the device doesn't support the required API level or the night mode indicator feature.
- Camera2 Session:
- The test starts a preview capture session using a
Camera2session. - The light is turned on and a preview frame is captured.
- The test verifies that the night mode indicator is in the
OFFstate. - The light is turned off and a preview frame is captured.
- The test verifies that the night mode indicator is in the
ONstate.
- The test starts a preview capture session using a
- Camera extension session:
- The test repeats the same procedure as for the
Camera2session, but using aCameraExtensionsession with theEXTENSION_NIGHTextension.
- The test repeats the same procedure as for the
- Cleanup: The test closes
ItsSessionand releases the lighting controller.
APIs tested:
Проходить:
- When the light is on, the night mode indicator should be in the
OFFstate. - When the light is off, the night mode indicator should be in the
ONstate. - Applies to both
Camera2andCameraExtensionsessions.
test_preview_min_frame_rate
Tests that the preview frame rate decreases correctly in a dark scene. For this test to work correctly, the lights in the test rig must be turned off by the controller or manually by the test operator.
APIs tested:
-
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
Pass: The preview frame rate is at the minimum of the requested frame rate range, and the variation between frames is less than the absolute tolerance set in the test.
test_torch_strength
Tests that flash strength control in TORCH mode is implemented correctly.
Verifies that if the device supports flash strength control during camera use in TORCH mode, the torch strength changes with different requested strength levels. Verifies that flash strength control works with different AE_MODES . For example, if the auto-exposure mode is ON or OFF , the flash strength level has an effect on brightness, and if the mode is ON_AUTO_FLASH , the flash strength level has no effect on brightness. Verifies that the torch strength stays the same throughout the duration of a burst, simulating a video capture session. To conduct the test, lights in the test rig must be turned off. The lights can be turned off automatically with the Arduino controller. The scene must be completely dark for the test to work correctly.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL -
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL -
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_DEFAULT_LEVEL -
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_MAX_LEVEL
Проходить:
When the auto-exposure mode is ON or OFF , the brightness of the image burst patches increases as the flash strength level increases from no flash to FLASH_TORCH_STRENGTH_MAX_LEVEL . When the auto-exposure mode is ON_AUTO_FLASH , the difference in brightness of the image burst patches are within tolerance as the flash strength level increases from no flash to FLASH_TORCH_STRENGTH_MAX_LEVEL .
sensor_fusion
Sensor fusion tests require specific phone movement in front of a checkerboard pattern and ArUco markers. For optimum results, verify that the test chart is mounted flat. Charts that aren't flat affect the rotation calculations for many of the tests. The chart must fill the back of the sensor fusion box by printing at 17x17 in. (43x43 cm). The sensor_fusion tests can be automated with the Sensor Fusion Box .

Figure 142. Sensor fusion chart.

Figure 143. Sensor fusion chart that fills the back of the sensor fusion box.
test_lens_intrinsic_calibration
Tests that the optical center of the lens intrinsic changes when the lens moves due to optical image stabilization (OIS). If lens intrinsic samples are supported, tests that the optical center of the lens intrinsic samples changes when the lens moves due to OIS.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION -
android.media.MediaRecorder -
android.media.CamcorderProfile
Pass: The optical center of the lens intrinsic changes by 1 pixel or more. If lens intrinsic samples are supported, the optical centers of the lens intrinsic samples change by 1 pixel or more.
The following figure is an example test_lens_intrinsic_calibration plot showing changes of principal points in pixels for each frame:

Figure 144. Example of test_lens_intrinsic_calibration plot showing changes of principal points in pixels for each frame.
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: The angle between images from each camera doesn't change appreciably as the phone is rotated.
test_preview_distortion
Tests that distortion is corrected throughout each preview frame taken at various zoom levels. For each preview frame, the test calculates ideal points based on camera intrinsics and extrinsics.
In the example image, ideal points are shown in green; actual points are shown in red. The distortion error is calculated based on the RMS pixel distance between the actual points and ideal points. The green and red highlights on the image are used to visually detect the area of distortion error.

Figure 145. Image of checkerboard with ideal points as green and actual points as red.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE -
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO -
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds() -
android.media.CamcorderProfile -
android.media.MediaRecorder
Pass: The normalized distortion error of each preview frame is less than the threshold set in the test.
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: Maximum angle rotation over frames is less than 70% of gyroscope rotation.
The following are sample videos with and without stabilization:
Figure 146. Sample video with stabilization.
Figure 147. Sample video without stabilization.
test_sensor_fusion
Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. The 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 isn't 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.
Figure 148. test_sensor_fusion gyroscope events example.
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.
Figure 149. test_sensor_fusion plot rotations example.
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 7.3.9 High Fidelity Sensors in the CDD.
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:
adbcan't reliably connect to the DUT long enough to execute the test. - The chart isn't mounted flat. The plot
test_sensor_fusion_plot_rotationshas 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_eventsshows 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: Maximum angle rotation over frames is less than 60% of gyroscope rotation.
The following are sample videos with and without stabilization.
Figure 150. Sample video with stabilization.
Figure 151. Sample video without stabilization.
test_video_stabilization_jca
Tests that stabilized video captured using the JCA rotates less than the gyroscope. The JCA must be installed on the device before testing.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES -
android.media.CamcorderProfile -
android.media.MediaRecorder
Pass: The maximum angle rotation over frames extracted from video captured using the JCA is less than 70% of gyroscope rotation.
feature_combination
The feature_combination tests verify that features work correctly when multiple camera features are enabled at the same time. These tests use the same checkerboard image that is used in the sensor fusion scene .
test_feature_combination
Tests all combinations of different stream combinations, video stabilization mode, target FPS range, 10-bit HDR video, and Ultra HDR that are supported by the camera device.
For Android 16 and higher, the test runs all combinations of supported features, and logs the results into a proto file. Failure assertions are called only for combinations of features for which isSessionConfigurationSupported returns True .
APIs tested:
-
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported -
android.hardware.camera2.CameraDevice.CameraDeviceSetup#createCaptureRequest
Pass: For each supported feature combination:
- The preview stream is stabilized if preview stabilization is on.
- The preview frame rate falls within the configured
AE_TARGET_FPS_RANGE. - The recorded preview stream's color space matches what's set.
- The Ultra HDR capture has a valid gain map.
scene_ip
In Android 16 and higher, scene scene_ip enables image parity checks between the default camera app and the Jetpack camera app (JCA) to identify major differences between captured images. The JCA replicates social media app captures and provides a baseline image that that social media apps then process and refine.
Hardware setup requirements
The following hardware setup is required for scene_ip tests:
- Tests are executed in the Gen2 camera ITS-in-a-box .
- The lighting and servo controllers that are part of the Gen2 rig are used to control the test environment
- A test feature chart is placed inside the Gen2 rig.

Figure 152. Gen2chart_sample example.
Test skip criteria
The scene_ip tests are skipped if any of the following criteria are met:
- The device has a first API level (
first_api_level) of 35 or lower. - The device isn't a phone device with front and rear primary camera devices (for example, a tablet or TV).
test_default_jca_ip
Takes captures of the test feature chart under controlled lighting conditions using the default camera app and the JCA and performs the following checks:
FoV: Checks that the default camera app and JCA captures have the same FoV. This check uses the center QR Code feature extracted from the captures chart image.
Brightness: Checks that the brightness difference measured between the default camera app and JCA doesn't exceed 10. This check uses the dynamic range patch for brightness measurement.
White balance: Checks that the white balance difference between the default camera app and JCA doesn't exceed 4. This check uses the dynamic range patch for brightness measurement.
Basic section pass: Test passes the FoV, brightness, and white balance checks. In Android 16, this test isn't mandated ( NOT_YET_MANDATED ).