ИТС тесты камеры

На этой странице представлен полный список тестов в рамках набора тестов изображения камеры (ITS), который является частью набора тестов совместимости Android (CTS) Verifier. Тесты ITS являются функциональными тестами, то есть они не измеряют качество изображения, а показывают, что все заявленные функции камеры работают должным образом. Этот документ позволяет разработчикам и тестировщикам понять, что делают отдельные тесты и как устранять сбои тестов.

Камера ITS проверяет тесты по требуемым свойствам камеры, уровню API и уровню класса производительности мультимедиа (MPC). На уровне API ITS использует ro.product.first_api_level для проверки добавленных на определенном уровне API тестов, проверяющих негативное взаимодействие с пользователем функциональности на более низких уровнях API. ITS использует ro.vendor.api_level для тестирования функций, добавленных на определенном уровне API, которые требуют новых аппаратных возможностей. Если для устройства определен ro.odm.build.media_performance_class , ITS требует выполнения определенных тестов в зависимости от уровня MPC.

Тесты сгруппированы по сценам следующим образом:

  • Scene0 : Захват метаданных, дрожания, гироскопа, вибрации.
  • сцена 1 : экспозиция, чувствительность, компенсация EV, YUV против JPEG/RAW.
  • сцена2 : распознавание лиц, тесты, требующие цветных сцен.
  • сцена 3 : улучшение краев, движение объектива.
  • сцена4 : Соотношение сторон, обрезка, поле зрения.
  • сцена5 : Затенение линзы
  • сцена6 : масштабирование
  • Scene7 : Переключение нескольких камер.
  • Scene8 : измерение региона AE и AWB
  • сцена9 : сжатие JPEG.
  • Scene_extensions : Расширения камеры.
  • Scene_flash : автоматическая вспышка, минимальная частота кадров.
  • Scene_video : Пропадает кадр.
  • Sensor_fusion : смещение времени камеры/гироскопа
  • Feature_combination : Комбинации функций.

См. отдельные разделы для описания каждой сцены.

сцена0

Тесты сцены 0 не требуют никакой конкретной информации о сцене. Однако для тестирования гироскопа и вибрации телефон должен быть неподвижен.

test_jitter

Измеряет дрожание временных меток камеры.

Протестированные API:

Пройдено: разница между кадрами составляет не менее 30 мс.

test_jitter_plot.png

test_jitter_plot.png (Обратите внимание на небольшой диапазон по оси Y. На этом графике джиттер на самом деле небольшой.)

test_metadata

Проверяет достоверность записей метаданных. Просматривает результаты захвата и характеристики объектов камеры. В этом тесте используются значения экспозиции и усиления auto_capture_request , поскольку содержимое изображения не важно.

Протестированные API:

Пройдено: аппаратный уровень, rollingShutterSkew , frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FoV, гиперфокальное расстояние присутствуют и имеют допустимые значения.

test_request_capture_match

Проверяет, что устройство записывает правильные значения экспозиции и усиления, считывая метаданные захвата.

Протестированные API:

Пройдено: значения метаданных запроса и захвата совпадают для всех снимков.

test_sensor_events

Тестирует, что устройство запрашивает и распечатывает события датчиков для устройств, рекламирующих поддержку объединения датчиков. Ожидаемые датчики — акселерометр, гироскоп и магнитометр. Этот тест работает только в том случае, если экран включен, то есть устройство не находится в режиме ожидания.

Протестированные API:

Pass: Получены события для каждого датчика.

test_solid_color_test_pattern

Проверяет правильность создания сплошных цветных тестовых шаблонов для отключения звука камеры. Если поддерживается отключение звука камеры, должны поддерживаться сплошные цветные тестовые шаблоны. Если отключение звука камеры не поддерживается, тестовые шаблоны сплошного цвета проверяются только в том случае, если такая возможность заявлена.

Если поддерживаются изображения RAW, также проверяется назначение цветов. Тестируемые цвета: черный, белый, красный, синий и зеленый. Для камер, которые не поддерживают изображения RAW, тестируется только черный цвет.

Протестированные API:

Пройдено: поддерживаются сплошные тестовые шаблоны правильного цвета и небольшая дисперсия изображения.

test_test_pattern

Проверяет параметр android.sensor.testPatternMode для захвата кадров для каждого допустимого тестового шаблона и проверяет правильность формирования кадров для сплошных цветов и цветных полос. Этот тест включает в себя следующие шаги:

  1. Захватывает изображения для всех поддерживаемых тестовых шаблонов.
  2. Выполняет простую проверку правильности тестового шаблона сплошного цвета и цветных полос.

Протестированные API:

Пройдено: поддерживаемые тестовые шаблоны генерируются правильно.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Тестирует преобразование тестового шаблона из RAW в YUV с линейной картой тонов. Для этого теста требуется android.sensor.testPatternMode = 2 (COLOR_BARS) для создания идеального шаблона изображения для преобразования тональной карты. Гарантирует, что конвейер имеет правильные выходные цвета с линейной картой тонов и идеальным входным изображением (зависит от test_test_patterns ).

Протестированные API:

Пройдено: YUV и RAW похожи друг на друга.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

Проверяет, находятся ли события изображения и датчика движения в одном временном интервале.

Протестированные API:

Пройдено: временные метки движения находятся между двумя временными метками изображения.

test_vibration_restriction

Проверяет, работает ли вибрация устройства должным образом.

Протестированные API:

Пройдено: устройство не вибрирует при отключении звука с помощью API ограничения звука камеры.

сцена 1

сцена1 представляет собой серую диаграмму. Серая диаграмма должна охватывать центральные 30 % поля зрения камеры. Ожидается, что серая диаграмма будет в некоторой степени бросать вызов 3A (автоэкспозиция, автоматический баланс белого, автофокусировка), поскольку в центральной области нет никаких особенностей. Однако запрос на захват определяет всю сцену, которая включает в себя достаточные функции для сходимости 3A.

Камеры RFoV можно тестировать на испытательном стенде WFoV или RFoV. Если камера RFoV тестируется на испытательном стенде WFoV, диаграмма масштабируется на ⅔, чтобы обеспечить некоторые границы серой диаграммы в поле зрения и помочь сходимости 3A. Более подробное описание стендов для тестирования камер см. в разделе Camera ITS-in-a-box .

сцена 1

сцена 1: полноразмерная диаграмма (слева). ⅔ масштабированная диаграмма (справа).

test_ae_precapture_trigger

Тестирует конечный автомат AE при использовании триггера предварительного захвата. Захватывает пять ручных запросов с отключенным AE. Последний запрос имеет триггер предварительного захвата AE, который следует игнорировать, поскольку AE отключен.

Протестированные API:

Пройдено: AE сходится.

test_auto_vs_manual

Тесты, в которых были сделаны автоматические и ручные снимки, выглядят одинаково.

Протестированные API:

Пройдено: усиление и преобразование баланса белого вручную, сообщаемые в каждом результате съемки, совпадают с estimate автоматического баланса белого по алгоритму 3A камеры.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_black_white

Проверяет, что устройство создает полностью черно-белые изображения. Делается два снимка: первый с чрезвычайно низким усилением и короткой выдержкой, в результате которого получается черная фотография, а второй с чрезвычайно высоким усилением и длинной выдержкой, в результате чего получается белая фотография.

Протестированные API:

Pass: Создает черно-белые изображения. Насыщенные каналы белых изображений имеют значения RGB [255, 255, 255] с погрешностью менее 1%.

test_black_white_blacktest_black_white_black
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_capture

Проверяет, что весь конвейер захвата может соответствовать скорости полноразмерного захвата и процессорному времени.

Протестированные API:

Пройдено: захватывает серию полноразмерных изображений, проверяет отсутствие кадров и яркость изображения.

test_burst_sameness_manual

Делает 5 серий по 50 изображений с ручной настройкой захвата и проверяет их идентичность. Этот тест можно использовать для определения наличия спорадических кадров, которые обрабатываются по-разному или содержат артефакты.

Протестированные API:

Пройдено: изображения идентичны визуально и в значениях RGB.

Неудачно: показывает скачок или падение средней диаграммы RGB в начале каждого пакета.

  • Допуск составляет 3% для first_API_level < 30.
  • Допуск составляет 2 % для first_API_level >= 30.

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

Проверяет, что действительные данные возвращаются в объекты CaptureResult . Выполняет автоматический, ручной и автоматический захват.

Протестированные API:

Пройдено: метаданные действительны для всех захватов, а ручные настройки не попадают во второй автоматический захват. Выводит на график коррекцию затенения объектива для снимков.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Проверяет, что потоки RAW невозможно обрезать.

Протестированные API:

Пройдено: изображения YUV обрезаются по центру, но не изображения RAW.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Тесты на то, что регионы посева работают. Делает полное изображение и создает фрагменты из 5 различных областей (углы и центр). Делает изображения с кадрированием для 5 областей. Сравнивает значения патча и изображения обрезки.

Протестированные API:

Пройдено: изображение обрезанной области соответствует фрагменту, соответствующему обрезанному изображению.

test_dng_noise_model

Проверяет правильность параметров необработанной модели DNG. На графике изображена измеренная дисперсия центрального участка серой карты в необработанных снимках, снятых в диапазоне чувствительности, и сравниваются эти значения с дисперсией, ожидаемой при каждой чувствительности с помощью модели шума DNG в камере HAL (на основе Параметры O,S, возвращаемые в объектах результатов захвата). Для получения более подробной информации о модели шума DNG загрузите следующий документ о модели шума DNG .

Протестированные API:

Пройдено: параметры необработанной модели DNG верны. Ожидаемые значения RGB соответствуют фактически измеренным значениям RGB.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Проверяет, применяется ли компенсация величины экспозиции (EV). Тест увеличивает экспозицию в восемь этапов и сравнивает измеренную яркость с ожидаемой. Ожидаемые значения рассчитываются на основе яркости изображения без применения компенсации EV, и ожидаемое значение будет насыщаться, если рассчитанные значения превышают диапазон фактических значений изображения. Тест не пройден, если ожидаемые значения и измеренные значения не совпадают или изображения переэкспонированы в течение пяти шагов.

Протестированные API:

Пройдено: изображения показывают увеличение экспозиции без переэкспонирования в течение пяти шагов.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Проверяет, что компенсация EV применяется с использованием диапазона, созданного с помощью CONTROL_AE_COMPENSATION_STEP . При каждом значении компенсации захватывается восемь кадров.

Протестированные API:

Пройдено: фиксируется увеличение яркости с увеличенной настройкой компенсации EV, и восемь кадров, снятых для каждой настройки компенсации EV, имеют стабильные значения яркости.

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure_x_iso

Тесты на достижение постоянной экспозиции при изменении ISO и времени экспозиции. Делает серию снимков, в которых ISO и время экспозиции выбраны так, чтобы сбалансировать друг друга. Результаты должны иметь одинаковую яркость, но с течением времени изображение должно становиться более шумным. Проверяет, что средние значения пикселей выборки близки друг к другу. Гарантирует, что изображения не привязаны к 0 или 1 (из-за чего они будут выглядеть как плоские линии). Тест также можно запустить с изображениями RAW, установив флаг debug в файле конфигурации.

Протестированные API:

Пройдено: изображения имеют одинаковую яркость, но становятся более шумными при более высоком значении ISO. Плоскости RGB являются плоскими, когда значение экспозиции ISO* постоянно в тестируемом пространстве усиления.

Механизм отказа:

  • В test_exposure_plot_means.png по мере увеличения значений множителя усиления (ось X) нормализованные средние значения плоскости RGB (ось Y) начинают отклоняться от значений множителя низкого усиления.

test_exposure_plot_means

test_exposure_plot_means.png

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

test_jpeg

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

Протестированные API:

Пройдено: средняя разница RGB между каждым изображением составляет менее 3%.

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

test_latching

Проверяет, что настройки (экспозиция и усиление) фиксируются на правом кадре для камер FULL и LEVEL_3 . Делает серию снимков, используя последовательные запросы, изменяя параметры запроса захвата между кадрами. Проверяет, имеют ли изображения ожидаемые свойства.

Протестированные API:

Пройдено: изображения [2, 3, 6, 8, 10, 12, 13] имеют увеличенное значение ISO или экспозицию и отображаются с более высокими средними значениями RGB в test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

Тестирует, что обработку устройства можно инвертировать в линейные пиксели. Захватывает последовательность снимков, когда устройство направлено на однородную цель.

Протестированные API:

Успешно: значения R, G, B должны увеличиваться линейно с увеличением чувствительности.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Тестирует блокировку 3A и пакет YUV (с использованием автоматической настройки). Этот тест предназначен для прохождения даже на ограниченных устройствах, у которых нет MANUAL_SENSOR или PER_FRAME_CONTROLS . Тест проверяет согласованность изображения YUV, в то время как проверка частоты кадров выполняется в CTS.

Протестированные API:

Пройдено: снимки выглядят стабильно.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_param_color_correction

Проверяет, что параметры android.colorCorrection.* применяются, если они установлены. Делает снимки с разными значениями преобразования и усиления и проверяет, выглядят ли они соответственно по-разному. Преобразование и коэффициенты усиления выбираются таким образом, чтобы выходной сигнал стал все более красным или синим. Использует линейную карту тонов. Тональное отображение — это метод, используемый при обработке изображений для сопоставления одного набора цветов с другим, чтобы аппроксимировать внешний вид изображений с расширенным динамическим диапазоном в среде с более ограниченным динамическим диапазоном.

Протестированные API:

Пройдено: значения R и B увеличиваются в соответствии с трансформацией.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*Ось X — запросы на захват: 0 = единица, 1 = усиление красного цвета, 2 = усиление синего цвета.

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (усиление R)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (увеличение B)

test_param_flash_mode

Проверяет применение параметра android.flash.mode . Вручную устанавливает экспозицию на темной стороне, чтобы было видно, сработала вспышка или нет, и использует линейную карту тонов. Проверяет центр изображения плитки, чтобы увидеть, создан ли большой градиент, чтобы проверить, сработала ли вспышка.

Протестированные API:

Пройдено: центр изображения плитки имеет большой градиент, что означает, что сработала вспышка.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Проверяет правильность применения параметра android.noiseReduction.mode , если он установлен. Съемка изображений при слабом освещении камеры. Использует высокое аналоговое усиление, чтобы обеспечить зашумленность захваченного изображения. Захватывает три изображения: отключенное шумоподавление, «быстрое» и «высокое качество». Также захватывает изображение с низким усилением и отключенным шумоподавлением и использует его дисперсию в качестве базовой линии. Чем выше SNR (отношение сигнал/шум), тем лучше качество изображения.

Протестированные API:

Pass: SNR варьируется в зависимости от режима шумоподавления и ведет себя так же, как показано на графике ниже.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: ВЫКЛ, 1: БЫСТРО, 2: HQ, 3: МИН, 4: ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

test_param_shading_mode

Проверяет применение параметра android.shading.mode .

Протестированные API:

Пройдено: режимы затенения переключаются, а карты затенения объектива изменяются, как ожидалось.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

Проверяет применение параметра android.tonemap.mode. Применяет разные кривые карты тонов к каждому каналу R, G, B и проверяет, что выходные изображения изменяются должным образом. Этот тест состоит из двух тестов: test1 и test2.

Протестированные API:

Проходить:

  • test1: Оба изображения имеют линейную карту тонов, но n=1 имеет более крутой градиент. Канал G (зеленый) ярче для изображения n=1.
  • test2: Та же карта тонов, но разная длина. Изображения те же самые.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

Проверяет повышение чувствительности после RAW. Захватывает набор изображений RAW и YUV с разной чувствительностью, публикует комбинацию повышения чувствительности RAW и проверяет, соответствует ли среднее значение выходного пикселя настройкам запроса.

Протестированные API:

Пройдено: изображения RAW становятся темнее по мере увеличения усиления, в то время как изображения YUV остаются постоянной яркости.

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

Захватывает набор необработанных изображений с возрастающим усилением и измеряет шум. Захватывает только в сыром виде, пакетно.

Протестированные API:

Pass: каждый выстрел шумнее предыдущего, так как усиление увеличивается.

Использует дисперсию центральной ячейки сетки статистики.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Захватывает набор необработанных изображений с увеличением времени экспозиции и измеряет значения пикселей.

Протестированные API:

Пройдено: увеличение ISO (усиления) делает пиксели более чувствительными к свету, поэтому график смещается влево.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ — 1 мс, 10¹ — 10 мс, 10⁻¹ — 0,1 мс)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

Захватывает набор необработанных изображений с повышенной чувствительностью и измеряет шум (дисперсию) в центре 10% изображения. Тестирует, что каждый выстрел шумнее предыдущего.

Протестированные API:

Пас: дисперсия увеличивается с каждым выстрелом.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Проверяет, что android.noiseReduction.mode применяется для повторной обработки запросов. Захватывает обработанные изображения при слабом освещении камеры. Использует высокое аналоговое усиление, чтобы обеспечить зашумленность захватываемого изображения. Захватывает три обработанных изображения: отключенное шумоподавление, «быстрое» и «высокое качество». Захватывает обработанное изображение с низким усилением и отключенным шумоподавлением и использует его дисперсию в качестве базовой линии.

Протестированные API:

Пройдено: FAST >= OFF, HQ >= FAST, HQ >> OFF

Типичный график зависимости SNR от NR_MODE

Типичный график зависимости SNR от NR_MODE

test_tonemap_sequence

Тестирует последовательность снимков с различными кривыми тональной карты. Делает 3 ручных снимка с линейной картой тонов. Делает 3 ручных снимка с тональной картой по умолчанию. Вычисляет дельту между каждой последовательной парой кадров.

Протестированные API:

Пройдено: есть 3 одинаковых кадра, за которыми следует другой набор из 3 одинаковых кадров.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

Проверяется работоспособность всех заявленных размеров и форматов для захвата изображений. Использует ручной запрос с линейной картой тонов, чтобы YUV и JPEG выглядели одинаково при преобразовании модулем image_processing_utils . Изображения не сохраняются по умолчанию, но их можно сохранить, включив debug_mode .

Протестированные API:

Пройдено: все центры изображений имеют максимальную разницу RMS (среднеквадратичное значение сигнала) в изображениях, преобразованных в RGB, с 3% от изображения YUV с самым высоким разрешением.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Проверяет работоспособность заявленных размеров и форматов для захвата изображений.

Протестированные API:

Пройдено: тест завершается и возвращает запрошенные изображения.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Тестирует захват одного кадра как в формате YUV, так и в формате JPEG. Использует ручной запрос с линейной картой тонов, чтобы YUV и JPEG выглядели одинаково при преобразовании модулем image_processing_utils .

Протестированные API:

Пройдено: изображения YUV и JPEG схожи и имеют разницу менее 1 % RMS (среднеквадратичное значение сигнала).

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

Тестируется захват одного кадра как в формате RAW/RAW10/RAW12, так и в формате YUV, если он поддерживается. Использует ручной запрос с линейной картой тонов, поэтому ожидается, что RAW и YUV будут одинаковыми. Сравнивает центральные 10% значений RGB преобразованных в RGB изображений. Журналы android.shading.mode .

Протестированные API:

Пройдено: YUV и необработанные изображения схожи и имеют разницу менее 3,5% RMS (среднеквадратичное значение сигнала).

test_yuv_plus_raw_shading=1_raw.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

сцена2_а

Scene2_a имеет три лица на сером фоне и нейтральную одежду. Лица выбираются с учетом широкого спектра оттенков кожи. Диаграмма должна иметь правильную ориентацию, чтобы распознавание лиц работало оптимально.

сцена2_а

сцена2_а

test_autoframing

Тестирует поведение автокадрирования устройства камеры. Выполняет большое масштабирование, чтобы ни одно из лиц в сцене не было видно, включает режим автокадрирования, устанавливая AUTOFRAMING в CaptureRequest значение True , и проверяет, можно ли обнаружить все лица в исходной сцене, когда состояние сходится (то есть, когда Для AUTOFRAMING_STATE в CaptureResult установлено значение AUTOFRAMING_STATE_CONVERGED ).

Протестированные API:

Пройдено: обнаружены все три лица.

test_display_p3

Тесты Отображение захвата P3 в формате JPEG с использованием API ColorSpaceProfiles . Проверяет, что захваченный JPEG имеет соответствующий профиль ICC в заголовке и что изображение содержит цвета за пределами гаммы sRGB.

Протестированные API:

Пройдено: JPEG содержит профиль Display P3 ICC и цвета за пределами гаммы sRGB.

test_effects

Захватывает кадр для поддерживаемых эффектов камеры и проверяет, правильно ли они сгенерированы. Тест проверяет только эффекты OFF и MONO , но сохраняет изображения для всех поддерживаемых эффектов.

Протестированные API:

Пройдено: захватывается изображение сцены с OFF эффектами и монохромное изображение с эффектами, установленными на MONO .

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

Тестирует различные комбинации выходных форматов.

Протестированные API:

Пас: Все комбинации успешно собраны.

test_num_faces

Тестирует распознавание лиц.

Протестированные API:

Пройти: находит три лица.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_reprocess_uv_swap

Проверяет, что обработка YUV не меняет местами плоскости U и V. Это обнаруживается путем расчета суммы абсолютных разностей (SAD) между обработанным изображением и необработанным снимком. Если замена выходных плоскостей U и V повторно обработанного захвата приводит к увеличению SAD, то предполагается, что выходные данные имеют правильные плоскости U и V.

Протестированные API:

Пройдено: плоскости U и V не меняются местами.

test_reprocess_uv_swap

test_reprocess_uv_swap.png

сцена2_б

test_num_faces

Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Пройти: находит 3 лица.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Захватывает два изображения, используя самые большие распространенные форматы YUV и JPEG с тем же соотношением сторон, что и самый большой формат JPEG, но не превышающее разрешение 1920x1440. Устанавливает jpeg.quality равным 100 и фиксирует запрос двойной поверхности. Преобразует оба изображения в массивы RGB и вычисляет трехмерную среднеквадратическую разницу (RMS) между двумя изображениями.

Кроме того, этот тест проверяет, что выходные данные YUV для всех поддерживаемых вариантов использования потока достаточно похожи на YUV со сценарием использования STILL_CAPTURE .

Протестированные API:

Пройдено: изображения YUV и JPEG для варианта использования STILL_CAPTURE имеют разницу менее 3% RMS (среднеквадратичное значение сигнала); Изображения YUV для всех поддерживаемых вариантов использования имеют среднеквадратичное отличие менее 10 % от изображений YUV со сценарием использования STILL_CAPTURE .

сцена2_с

test_num_faces

Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Пройти: находит 3 лица.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

Тестирует задержку захвата JPEG для класса производительности S, как указано в разделе 2.2.7.2 Камера на CDD.

Пройдено: ДОЛЖНА иметь задержку захвата JPEG камерой 2 < 1000 мс для разрешения 1080p, измеренную с помощью теста производительности камеры CTS в условиях освещения ITS (3000K) для обеих основных камер.

test_camera_launch_perf_class

Тестирует задержку запуска камеры для класса производительности S, как указано в разделе 2.2.7.2 Камера в CDD.

Пройдено: ДОЛЖНА иметь задержку запуска камеры 2 (открытая камера до первого кадра предварительного просмотра) < 600 мс, измеренная с помощью теста производительности камеры CTS в условиях освещения ITS (3000K) для обеих основных камер.

test_default_camera_hdr

Проверяет, что по умолчанию захват камеры осуществляется в режиме Ultra HDR для класса производительности 15, как указано в разделе 2.2.7.2 Камера CDD.

Пройдено: захват камеры по умолчанию ДОЛЖЕН быть Ultra HDR для устройства с классом производительности 15.

сцена2_d

test_num_faces

Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Пройти: находит 3 лица.

сцена2_е

test_continous_picture

50 кадров разрешения VGA захватываются с первой установкой запроса захвата android.control.afMode = 4 (CONTINUOUS_PICTURE).

Протестированные API:

Пройдено: система 3A стабилизируется к концу захвата 50 кадров.

test_num_faces

Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Пройти: находит 3 лица.

сцена2_ф

Scene2_f имеет три лица на белом фоне и белую одежду. Лица имеют широкий диапазон оттенков кожи и высокий контраст с фоном.

сцена2_f.png

сцена2_ф

test_num_faces

Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Пройти: находит 3 лица.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

сцена3

В сцене 3 используется диаграмма ISO12233, и в большинстве тестов используется метод извлечения диаграммы для поиска диаграммы в сцене. По этой причине большинство сохраненных изображений не имеют границ, как изображения для сцен 1, 2 или 4, а имеют только диаграмму. Для оптимальной работы искателя карт карта должна быть в правильной ориентации.

test_edge_enhancement

Проверяет правильность применения параметра android.edge.mode . Захватывает изображения без повторной обработки для каждого режима границ и возвращает резкость выходного изображения и метаданные результата захвата. Обрабатывает запрос захвата с заданным режимом края, чувствительностью, временем экспозиции, расстоянием фокусировки и параметром выходной поверхности.

Пройдено: режим HQ (2) резче, чем режим OFF (0). Режим FAST (1) резче, чем режим OFF . Режим HQ более резкий или равен режиму FAST .

Протестированные API:

Затронутые параметры камеры:

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (быстрый режим)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (режим высокого качества)

test_flip_mirror

Проверяет правильность ориентации изображения в соответствии с разделом CDD 7.5.2 «Фронтальная камера» [C-1-5] .

Зеркальные, перевернутые или повернутые изображения можно отличить по ромбу рядом с центром.

Пройдено: изображение не перевернуто, не зеркально отражено и не повернуто.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_imu_drift

Проверяет, имеет ли инерциальный измерительный блок (IMU) стабильный выходной сигнал в течение 30 секунд, пока устройство неподвижно и осуществляет предварительный просмотр в высоком разрешении.

Протестированные API:

Проходить:

  • Дрейф гироскопа за время испытаний составляет менее 0,01 рад.
  • Отклонение показаний гироскопа составляет менее 1E-7 рад 22 /Гц за время испытания.
  • Дрейф вектора вращения составляет менее 0,01 рад за время испытаний.
  • (Пока не обязательно) дрейф гироскопа составляет менее 1 градуса в секунду.

test_imu_drift_gyro_drift.png

test_imu_drift_gyro_drift.png

test_imu_drift_rotation_vector_drift.png

test_imu_drift_rotation_vector_drift.png

test_landscape_to_portrait

Проверяет, правильно ли работает переопределение альбомной ориентации на портретную для датчиков, ориентированных на альбомную ориентацию.

Протестированные API:

Пройдено: тест позволяет найти диаграмму с ожидаемым поворотом (0 градусов, если переопределение альбомной ориентации отключено, 90 градусов, если включено).

test_landscape_to_portrait

test_landscape_to_portrait.png

test_lens_movement_reporting

Проверяет, правильно ли сообщается о флаге движения объектива. Снимает серию из 24 изображений, причем первые 12 кадров находятся на оптимальном расстоянии фокусировки (согласно 3A), а последние 12 кадров — на минимальном расстоянии фокусировки. Вокруг кадра 12 линза движется, вызывая резкость падать. Резкость в конечном итоге стабилизируется, когда объектив перемещается в конечную позицию. Флаг движения линз должен быть утвержден во всех кадрах, где резкость является промежуточной до резкости в первых нескольких кадрах с объективом, стационарным на оптимальном фокусном расстоянии, и в последних нескольких кадрах, где объектив является стационарным на минимальном фокусном расстоянии. Точная кадра, которую движутся линзы, не важна: то, что проверяется, так это то, что флаг движения утверждается, когда объектив движется.

Протестировано API:

Пропуск: флаг движения объектива True в кадре с резкостью изменения.

Механизмы провал:

  • lens_moving: True ( android.hardware.camera2.CaptureResult#LENS_STATE = 1) в test_log.DEBUG утверждается только в кадрах, где резкость не меняется.
  • Рамки с lens_moving: False ( android.hardware.camera2.CaptureResult#LENS_STATE = 0) в test_log.DEBUG имеет разность резкости по сравнению с первыми несколькими кадрами на оптимальном фокусном расстоянии или последними кадрами на минимальном расстоянии фокусировки.

test_reprocess_edge_enhancement

Тесты, если поддерживаются методы переработки для улучшения краев, работают должным образом. Обрабатывает запрос на захват с данным режимом режима переработки и сравнивает различные режимы для захвата с отключенными режимами переработки режима.

Протестировано API:

Проход: резкость для различных режимов края верна. HQ (режим 2) является острее, чем OFF (режим 0), и улучшение между различными режимами аналогично.

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

Сцена4

Scene4 состоит из черного круга на белом фоне внутри квадрата. Тесты в сцене4 могут быть чувствительны к выравниванию, поэтому начиная с 15, вы можете использовать check_alignment.py в каталоге инструментов, чтобы обеспечить проверку выравнивания DUT и диаграммы.

Сцена4

Сцена4

test_30_60fps_preview_fov_match

Проверяет, что 30 кадров в секунду и 60 кадров в секунду предварительного просмотра имеют такой же FOV. Тест снимает два видео, один с 30 кадром в секунду, а другой - 60 кадров в секунду. Репрезентативный кадр выбирается из каждого видео и анализируется, чтобы убедиться, что изменения FOV в двух видео находятся в рамках спецификаций. Испытания о том, что соотношение сторон круга остается постоянным, центр круга остается стабильным, а радиус круга остается постоянным.

Протестировано API:

Пропустите: изображения не растянуты, центр изображений не отличается более чем на 3%, а максимальное изменение соотношения сторон от 30 кадров в секунду и 60 кадров в секунду не более 7,5%

Механизмы провал:

  • Круг из видео 30 кадров в секунду значительно отличается по размеру от 60 -кадтного видео.
  • Круг в захваченном изображении искажен в процессе обработки.
  • Круг в захваченном изображении обрезан из -за чрезвычайного запроса по захвату соотношения сторон, снижающего высоту или ширину изображения.
  • Круг на захваченном изображении имеет отражение в центре и не выглядит полностью заполненным.

test_aspect_ratio_and_crop

Тесты, если изображения искажены или неожиданно обрезаются в трубопроводе изображения. Фотографирует круг по всем форматам. Проверяет круг не искажен, круг не движется от центра изображения, и круг не изменяется неправильно с различными соотношениями сторон или разрешениями.

Протестировано API:

Пропуск: изображения не растянуты, центр изображений не отличается более чем на 3%, и сохранится максимально возможный FOV (поле зрения).

Механизмы провал:

  • Камера не выровнена с кругом, отображаемым на планшете в центре захваченной сцены.
  • Круг в захваченном изображении искажен в процессе обработки.
  • Изображение с более низким разрешением двойное обрезано в трубопроводе изображения, создавая различные FOV между изображениями с высоким и низким разрешением.
  • Круг в захваченном изображении обрезан из -за чрезвычайного запроса по захвату соотношения сторон, снижающего высоту или ширину изображения.
  • Круг на захваченном изображении имеет отражение в центре и не выглядит полностью заполненным.

test_multi_camera_alenment

Проверяет параметры калибровки камеры, связанные с позиционированием камеры для систем нескольких камеры. Используя многокамерные физические суб-камеры, сфотографируется с одной из физических камер. Находит центр круга. Проецирует Circle Center к миру координаты для каждой камеры. Сравнивает разницу между центрами круга камер в мировых координатах. Воспроизведения мировой координации координат пикселя и сравнение с оригиналами как проверка достоверности. Сравнивает размеры круга, проверяя, различаются ли фокусные расстояния камер.

Протестировано API:

Проход: Центры кружков и размеры, как и ожидалось, на прогнозируемых изображениях по сравнению с захваченными изображениями, использующими данные калибровки камеры и фокусные расстояния.

Механизмы провал:

  • LENS_INTRINSIC_CALIBRATION , LENS_POSE_TRANSLATION или LENS_POSE_ROTATION - это проектные значения, а не фактические данные калибровки.
  • Система камеры не подходит для тестовой настройки. Например, тестирование широкой и сверхуровневой системы камеры с помощью испытательной установки RFOV. Для получения дополнительной информации см. Camera ITS IT-в-коробку FAQ1 .

test_preview_aspect_ratio_and_crop

Подобно тесту TEST_ASPECT_RATIO_AND_CROP для до сих пор захватывает, этот тест проверяет поддерживаемые форматы предварительного просмотра, чтобы гарантировать, что рамки предварительного просмотра не растянуты или не обрезаны ненадлежащим образом. Проверяет, что соотношение сторон не меняется, обрезанные изображения сохраняют круг в центре кадра, а размер круга не изменяется для постоянного формата или с различными разрешениями (проверка поля зрения).

Протестировано API:

Пропуск: изображения не растянуты, центр изображений не отличается более чем на 3%, и сохранится максимально возможный FOV (поле зрения).

test_preview_stabilization_fov

Проверяет поддерживаемые размеры предварительного просмотра, чтобы убедиться, что FOV обрезан соответствующим образом. Тест снимает два видео, один со ON предварительной просмотра, а другой - с OFF . Стабилизация. Репрезентативный кадр выбирается из каждого видео и анализируется, чтобы убедиться, что изменения FOV в двух видео находятся в пределах спецификации.

Протестировано API:

Проход: соотношение сторон округа остается постоянным, центральное местоположение круга остается стабильным, а размер круга не изменяется больше, чем на 20%.

test_video_aspect_ratio_and_crop

Снимает видео с кругом внутри квадрата над всеми форматами видео. Извлекает ключевые кадры, и проверяет соотношение сторон круга не изменяется, обрезанные изображения сохраняют круг в центре, а размер круга не изменяется для постоянного формата или с различным разрешением (проверка поля зрения).

Протестировано API:

Pass: видео кадры не растянуты, центр кадров не отличается более чем на 3%, а максимально возможный FOV (поле зрения) сохраняется.

Сцена5

Сцена5 требует равномерно освещенной серой сцены. Это достигается диффузором, помещенным над объективом камеры. Мы рекомендуем следующий диффузор: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168 .

Чтобы подготовить сцену, прикрепите диффузор перед камерой и укажите камеру на источник освещения около 2000 года. Изображения, снятые для сцены5, требуют диффузного освещения без очевидных функций. Ниже приведен пример изображения:

Сцена5

Сцена5 захват

test_lens_shading_and_color_uniformity

Испытания о том, что коррекция затенения объектива применяется соответствующим образом, и цвет монохромной единой сцены, равномерно распределяется. Выполняет этот тест на кадре YUV с Auto 3A. Затенение линз оценивается на основе канала Y. Измеряют среднее значение y для каждого указанного блока выборки и определяет проход или сбой, сравнивая с центром y. Тест на однородность цвета оценивается в пространстве R/G и B/G.

Протестировано API:

Пропуск: при указанном радиусе изображения дисперсия значения R/G и B/G должна составлять менее 20% для прохождения теста.

Сцена6

Сцена6 - это сетка с небольшими кругами с квадратом в одном углу, чтобы указать ориентацию. Небольшие круги необходимы для проверки функции масштабирования в большом диапазоне. Тесты в сцене6 могут быть чувствительны к выравниванию, поэтому, начиная с 15, вы можете использовать check_alignment.py в каталоге инструментов, чтобы обеспечить проверку выравнивания DUT и диаграммы.

Сцена6

Сцена6

test_in_sensor_zoom

Проверяет поведение функции Zoom Zoom in-Camer, которая создает обрезанные необработанные изображения.

С вариантом использования потока, установленным в CROPPED_RAW , тест берет два захвата над диапазоном масштабирования, полное полевое изображение (FOV) и обрезанное сырое изображение. Тест преобразует изображения в массивы RGB, снижает полноразмерное обрезанное сырое изображение в размер, сообщаемый SCALER_RAW_CROP_REGION , и вычисляет разницу средней квадратной (среднеквадратичной) трехмерного корня (среднеквадратичных) между двумя изображениями.

Протестировано API:

Проход: разница средней квадратной (среднеквадратичной (среднеквадратичной) трехмерного корня между обрезанным сырым изображением и полным изображением сырого FOV составляет менее 1%.

test_zoom

Проверяет поведение масштабирования камеры. Принимает захваты в диапазоне Zoom и проверяет, становятся ли круги больше по мере увеличения камеры. Для каждого формата (YUV, JPEG) тот же сеанс захвата камеры используется для сходимости 3A и захвата.

Протестировано API:

Пропуск: относительный размер захваченного круга является точным по сравнению с запрошенным соотношением масштабирования, чтобы гарантировать, что камера правильно увеличивается.

test_zoom

test_zoom, чтобы найти контур круга, ближайший к центру.

test_low_latency_zoom

Проверяет камеру низкого уровня задержки. Принимает захваты в диапазоне Zoom с android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) и проверяет, соответствуют ли круги в выходных изображениях соотношениях Zoom в метаданных захвата. Тот же сеанс захвата камеры используется для сходимости 3A и захвата.

Протестировано API:

Пропуск: Относительный размер захваченного круга является точным по сравнению с метаданными результатами масштабирования.

test_preview_video_zoom_match

Проверяет это при записи и масштабировании, предварительный просмотр видео и вывод видео и записывает один и тот же вывод. Вычисляет размер круга, ближайший к центру при различных соотношениях масштабирования, и проверяет, увеличивается ли размер круга с увеличением соотношения Zoom.

Протестировано API:

Пропуск: Относительный размер захваченного круга является точным против запрошенного соотношения масштабирования в видео и предварительном просмотре.

Vga_640x480_key_frame.png

Vga_640x480_key_frame.png (до Zoom)

preview_640x480_key_frame.png

preview_640x480_key_frame.png (до Zoom)

Vga_640x480_key_frame_zoomed.png

Vga_640x480_key_frame.png (после Zoom)

preview_640x480_key_frame_zoomed.png

preview_640x480_key_frame.png (после Zoom)

test_preview_zoom

Тесты, что соотношение Zoom каждой рамки предварительного просмотра соответствует соответствующим метаданным захвату. Тест берет предварительные кадры над диапазоном масштабирования и находит контур круга, ближайший к центру. Затем тест проверяет, что выбранный круг становится больше и что центр круга уходит от центра изображения, когда камера увеличивается.

Протестировано API:

Пропуск: относительный размер выбранного круга является точным для сообщенного соотношения Zoom соответствующего результата захвата для всех кадров предварительного просмотра. Относительное расстояние от выбранного круга от центра изображения является точным для сообщаемого соотношения зумного уровня соответствующего результата захвата всех кадров предварительного просмотра.

test_zoom

test_preview_zoom Изображения, показывающие выбранное кружок, ближайший к центру

test_session_characteristics_zoom

Проверяет диапазон соотношения Zoom для всех поддерживаемых конфигураций сеанса, перечисленных в CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION . Для каждой из этих конфигураций, если CameraDeviceSetup#isSessionConfigurationSupported возврат истина, тест подтверждает, что диапазон соотношений Zoom возвращается в CameraDeviceSetup#getSessionCharacteristics может быть достигнут.

Протестировано API:

Пропуск: как с минимальным, так и максимальным соотношением масштабирования можно достичь для каждого поддерживаемого SessionConfiguration указанного в CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION .

Сцена7

Сцена7 - это прямоугольная рама, разделенная на четыре равных квадранта, каждый из которых заполнен различным цветом. В центре прямоугольника находится наклонная график краев для проверки резкости. Четыре маркера ARUCO выровнены с четырьмя наружными углами прямоугольника, чтобы помочь в получении точных координат основной рамы прямоугольника при различных соотношениях увеличения.

Сцена7

Сцена7

test_multi_camera_switch

Этот тест проверяет, что во время записи предварительного просмотра при различных отношениях увеличения переключение между линзами Ultrawide (UW) и широкими (W) линзами приводит к аналогичным значениям RGB.

Тест использует различные коэффициенты масштабирования в предопределенном диапазоне для выполнения динамической записи предварительного просмотра и определения точки, в которой изменяется физическая камера. Эта точка отмечает кроссовер от UW до объектива W.

Кадры, захваченные в точке кроссовера, анализируются на автомобильную экспозицию (AE), автоматический баланс белого (AWB) и автофокус (AF).

Проверка AE гарантирует, что изменение LUMA находится в пределах ожидаемого диапазона как для изображений UW, так и для W Lens. Проверка AWB проверяет, что отношения R/G и B/G находятся в пределах порогового значения для изображений UW и W Lens. Проверка AF оценивает значение оценки резкости на основе средней величины градиента между изображениями UW и W Lens.

Протестировано API:

Пропустите: для прохождения теста, проверки AE, AWB и AF должны пройти. Ниже приведены критерии для каждой проверки:

  • Проверка AE: изменение LUMA между изображениями UW и W Lens должно составлять менее 0,5%.
  • Проверка AWB: разница между значениями R/G и B/G для изображений UW и W Lens должна составлять менее 0,5%.
  • Проверка AF: изменение резкости изображения между изображениями UW и W Lens должно составлять менее 2%.

Сцена8

Scene8 - это прямоугольная рама, разделенная на четыре равных областях, каждый из которых содержит портрет, снятый с различным воздействием или наложенный с различным цветовым оттенком (синий оттенок, повышенное воздействие, уменьшение воздействия, желтый оттенок). Четыре маркера ARUCO выровнены с четырьмя наружными углами прямоугольника, чтобы получить точные координаты основной рамы прямоугольника.

Сцена8

Сцена8

test_ae_awb_regions

Проверки, что значения RGB и LUMA различаются, когда просмотр записи в различных регионах Auto Expusi (AE) и Auto Balance Balance (AWB).

Тест записывает запись предварительного просмотра восьми секунд, выполняющая измерение AE и AWB на каждом квадранте в течение двух секунд каждая. Затем тест извлекает кадр из записи предварительного просмотра каждого региона и использует извлеченные кадры для выполнения следующих проверок AE и AWB:

  • Проверка AE: проверяет, что измерение рамки в области с уменьшенным воздействием имеет повышенное значение LUMA более чем на 1%, чем измерение рамки с увеличением воздействия. Это проверяет, что изображения осветляются при измерении темной области.
  • Проверка AWB: проверяет, что отношение от красного к синим (средних значений RGB изображения) в раме с областью синего измерения более чем на 2% выше, чем кадр с помощью области желтого измерения. Это проверяет, что изображения имеют сбалансированное значение RGB при измерении желтой (теплой) или синей (прохладной) области.

Протестировано API:

Проход: AE и AWB проверяют оба прохода.

Сцена9

Scene9 состоит из тысяч случайных и цветных кругов, чтобы создать сцену с очень низкой повторяемостью для стресса алгоритмов сжатия JPEG.

Сцена9

Сцена9

test_jpeg_high_entropy

Тестирует, что сжатие камеры JPEG работает на сцене9 с высокой энтропией, а коэффициент качества JPEG составляет 100%. Коэффициент масштабирования увеличивается, чтобы убедиться, что сцена, отображаемая на планшете, заполняет поле зрения камеры.

Протестировано API:

Pass: файл JPEG сжимается правильно, написан и читайте обратно с диска.

test_jpeg_quality

Тестирует качество сжатия камеры JPEG. Шаг JPEG качества через android.jpeg.quality и обеспечивает правильное изменение таблиц квантования.

Протестировано API:

Проход: Матрица квантования уменьшается с увеличением качества. (Матрица представляет фактор деления.)

test_jpeg_quality

Pixel 4 Задняя камера Luma/Chroma DQT Матрица Средняя по сравнению с качеством JPEG

test_jpeg_quality не удалось

Неудачный тестовый пример

Обратите внимание, что для очень низких качественных изображений (jpeg.quality <50) нет увеличения сжатия в матрице квантования.

Scene_video

Сцена сцены scene_video - это видео -сцена. Он состоит из четырех разных цветных кругов, движущихся взад -вперед с разными частотами кадров на белом фоне.

Scene_video

test_preview_frame_drop

Испытания, которые поддерживается запрошенной частотой кадров предварительного просмотра с динамической сценой. Этот тест проходит на всех камерах, которые подвергаются воздействию сторонних приложений.

Протестировано API:

Пропуск: частота кадров предварительного просмотра находится на максимуме запрашиваемого диапазона частоты кадров, а среднее изменение между последовательными кадрами меньше, чем относительная допуск, установленная в тесте.

Scene_extensions

Тесты scene_extensions предназначены для расширений камеры и должны использовать камеру ITS в коробке , поскольку они требуют точного управления средой тестирования. Кроме того, вся утечка света должна контролироваться. Это может потребовать покрытия испытательной установки, DUT и планшета капельной тканью, а также устранение утечки света с переднего экрана DUT.

Scene_hdr

Сцена scene_hdr состоит из портрета слева и низкоконтрастного QR-кода справа.

Scene_hdr

Scene_hdr

test_hdr_extension

Проверка расширения HDR . Принимает захваты с включенным расширением и без него, и проверяет, делает ли расширение QR -код более обнаруживаемым.

Протестировано API:

Пропуск: расширение HDR уменьшает количество изменений контрастности, необходимых для обнаружения QR -кода или уменьшения градиента по QR -коду.

Scene_low_light

Сцена scene_low_light состоит из сетки квадратов с различными оттенками серого на черном фоне, а сетка квадратов связана красным контуром. Квадраты расположены в ориентации кривой Гильберта.

Scene_low_light

Scene_low_light

test_night_extension

Проверка ночи расширения . Принимает захваты с включенным расширением и выполняет следующее:

  • Обнаруживает наличие 20 квадратов
  • Вычисляет люму, ограниченную каждым квадратом
  • Вычисляет среднее значение LUMA первых 6 квадратов в соответствии с ориентацией сетки Hilbert Curve
  • Вычисляет разницу в значении LUMA последовательных квадратов (например, Square2 - Square1) до квадратов 5 и 6 (Square6 - Square5), и находит среднее из пяти вычисленных различий.

Протестировано API:

Пропуск: Среднее значение LUMA первых 6 квадратов должно составлять не менее 90, а средняя разница в значении LUMA последовательных квадратов до квадратов 5 и 6 должна составлять не менее 18.

test_low_light_boost_extension

Тестирует режим повышения Low Light AE . Если Camera2 поддерживает режим Low Light Boost AE, то этот тест выполняется для Camera2. Если поддерживается расширение камеры ночного режима, а расширение поддерживает режим Low Light Boost AE, то этот тест также выполняется для расширения камеры ночного режима. Этот тест устанавливает режим AE на повышение слабых освещений, берет раму из предварительного просмотра и выполняет следующее:

  • Обнаруживает наличие 20 коробок
  • Вычисляет Luma, ограниченную каждой коробкой
  • Вычисляет среднее значение LUMA первых 6 квадратов в соответствии с ориентацией сетки Hilbert Curve
  • Вычисляет разницу в значении LUMA последовательных квадратов (например, Square2 - Square1) до квадратов 5 и 6 (Square6 - Square5), и находит среднее из пяти вычисленных различий.

Протестировано API:

Пропуск: Среднее значение LUMA первых 6 квадратов должно составлять не менее 90, а средняя разница в значении LUMA последовательных квадратов до квадратов 5 и 6 должна составлять не менее 18.

Scene_flash

Тесты scene_flash требуют темной сцены в ящике слияния датчика.

test_auto_flash

Тесты, которые автоматическая флеша запускаются в темной сцене для камер обращаются к задней части и фронта. Для фронтальных камер Auto-Flash использует экран, чтобы осветить сцену, а не физическую вспышку. Тест проверяет, что автоматическая флеша упускается путем проверки того, что центр изображения плитки ярче с включенным автоматическим флашом. Чтобы вызвать автоматическую плату, свет в испытательной установке должен быть выключен. Огни можно отключить автоматически с помощью контроллера Arduino. Сцена должна быть совершенно темной, чтобы тест работал правильно. Приложение JetPack Camera ( JCA ) должно быть установлено на устройстве перед тестированием. Автофлляция для камер, обращенных к задней части, полагается на то, что состояние AE будет вызвано, но автоматическая флэша для фронтальных камер не полагается на AE и всегда запускается.

Протестировано API:

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

test_flash_strength

Тесты, которые управляют прочностью вспышки в SINGLE режиме, реализованы правильно.

Проверяет, что если устройство поддерживает управление силой вспышки во время использования камеры в SINGLE режиме, прочность вспышки изменяется с различными запрошенными уровнями прочности. Проверяет, что управление силой вспышки работает с различными AE_MODES . Например, если режим автоматического эксплуатации ON или OFF , уровень прочности вспышки влияет на яркость, и если режим ON_AUTO_FLASH , уровень прочности вспышки не влияет на яркость. Чтобы провести тест, свет в испытательной установке должен быть выключен. Огни можно отключить автоматически с помощью контроллера Arduino. Сцена должна быть совершенно темной, чтобы тест работал правильно.

Протестировано API:

Проходить:

Когда режим автоматического эксплуатации ON или OFF , яркость патчей изображения увеличивается, когда уровень прочности вспышки увеличивается от NO Flash до FLASH_SINGLE_STRENGTH_MAX_LEVEL . Когда режим автоматического экспозиции ON_AUTO_FLASH , разница в яркости патчей изображения находится в пределах допуска, поскольку уровень прочности вспышки увеличивается от NO Flash до FLASH_SINGLE_STRENGTH_MAX_LEVEL .

test_led_snapshot

Проверки, которые светодиодные снимки не насыщают и не протягивают изображение.

Этот тест добавляет контроллер освещения в фьюжн -коробку датчика для управления огнями. С OFF огнями, тест берет захват с режимом AUTO_FLASH установленным для ON . Во время этого захвата тест запускает последовательность предшественников запуска с START триггера aePrecapture , и устанавливает намерение захвата Preview , чтобы взять захват с помощью Flash.

Поскольку захват имеет отличительную горячую точку из -за вспышки, тест вычисляет среднее изображение вспышки всего захвата и проверяет, находится ли значение в диапазоне (68, 102). Чтобы проверить, разумно ли изображение сбалансировано, тест рассчитывает соотношения R/G и B/G и проверяет, находятся ли соотношения в пределах 0,95 и 1,05.

Протестировано API:

Проход: соотношения R/G и B/G находятся в пределах 0,95 и 1,05. Среднее среднее изображение находится в пределах диапазона (68, 102).

test_preview_min_frame_rate

Испытания о том, что частота кадров предварительного просмотра правильно уменьшается в темной сцене. Для того, чтобы этот тест был правильно работать, свет в испытательной установке должен быть отключен контроллером или вручную оператором тестирования.

Протестировано API:

Проход: частота кадров предварительного просмотра находится на минимальном диапазоне частоты кадров, а изменение между кадрами меньше, чем абсолютная допуск, установленная в тесте.

test_torch_strength

Тесты, которые управляют силой вспышки в режиме TORCH , реализованы правильно.

Проверяет, что если устройство поддерживает управление силой вспышки во время использования камеры в режиме TORCH , сила факела изменяется с различными запрошенными уровнями прочности. Проверяет, что управление силой вспышки работает с различными AE_MODES . Например, если режим автоматического экспозиции ON или OFF , уровень прочности вспышки влияет на яркость, и если режим ON_AUTO_FLASH , уровень прочности вспышки не влияет на яркость. Проверяет, что сила факела остается неизменной на протяжении всего взрыва, имитируя сеанс захвата видео. Чтобы провести тест, свет в испытательной установке должен быть выключен. Огни можно отключить автоматически с помощью контроллера Arduino. Сцена должна быть совершенно темной, чтобы тест работал правильно.

Протестировано API:

Проходить:

Когда режим автоматического эксплуатации ON или OFF , яркость патчей разрыва изображения увеличивается, когда уровень прочности вспышки увеличивается от NO Flash до FLASH_TORCH_STRENGTH_MAX_LEVEL . Когда режим автоматического эксплуатации ON_AUTO_FLASH , разница в яркости патчей разрыва изображения находится в пределах толерантности, поскольку уровень прочности вспышки увеличивается от NO Flash до FLASH_TORCH_STRENGTH_MAX_LEVEL .

Sensor_fusion

Тест на слияние датчиков требует определенного движения телефона перед шаблоном шахматной доски и маркеров ARUCO. Для оптимальных результатов убедитесь, что тестовая диаграмма установлена ​​плоской. Диаграммы, которые не плоские, влияют на расчеты вращения для многих тестов. Диаграмма должна заполнить заднюю часть фьюжн -коробки датчика путем печати при 17 "x17" (43x43 см). Тесты sensor_fusion могут быть автоматизированы с помощью слияния датчика .

Диаграмма слияния датчика

Диаграмма слияния датчика

Диаграмма слияния датчика в буровой установке

Диаграмма слияния датчика, которая заполняет заднюю часть слияния датчика

test_lens_intrinsic_calibration

Испытания того, что оптический центр линзы внутренних изменяется, когда линза перемещается из -за оптической стабилизации изображения (OIS). Если поддерживаются внутренние образцы линзы, тесты на то, что оптический центр внутренних образцов линзы меняется, когда линза перемещается из -за оптической стабилизации изображения (OIS).

Протестировано API:

Пропуск: оптический центр внутренних изменений линзы на один пиксель или более. Если поддерживаются внутренние образцы линзы, оптические центры внутренних образцов линзы изменяются на один пиксель или несколько.

test_lens_intrinsic_calibration_example.png

Пример графика test_lens_intrinsic_calibration показывает изменения основных точек в пикселях для каждого кадра

test_multi_camera_frame_sync

Тесты, которые создают временные метки, захватываемые логической камерой, находятся в пределах 10 мс путем вычисления углов квадратов в шахматной доске для определения метки времени.

Протестировано API:

Пропуск: Угол между изображениями с каждой камеры не меняется заметно, поскольку телефон вращается.

test_preview_distortion

Испытания, которые искажают, корректируются на протяжении каждой кадры предварительного просмотра, взятые на различных уровнях масштабирования. Для каждой кадры предварительного просмотра тест вычисляет идеальные точки на основе внутренней камеры и внешней линии. На примере изображения идеальные точки показаны зелеными; Фактические точки показаны красными. Ошибка искажения рассчитывается на основе среднего квадратного пиксельного расстояния между фактическими точками и идеальными точками. Зеленые и красные блики на изображении используются для визуального обнаружения области ошибки искажения.

test_preview_distortort_example.jpg

Изображение шахматной доски с идеальными точками в виде зеленых и фактических точек в качестве красных

Протестировано API:

Пропуск: нормализованная ошибка искажения каждой кадры предварительного просмотра составляет менее 0,1.

test_preview_stabilization

Тесты, которые стабилизировали предварительное видео видео, вращаются меньше, чем гироскоп.

Протестировано API:

Пропуск: максимальное угловое вращение над кадрами составляет менее 70% вращения гироскопа.

Ниже приведены примеры видео со стабилизацией и без них.

  • Образец видео со стабилизацией

  • Образец видео без стабилизации

test_sensor_fusion

Проверяет разницу временных метков между камерой и гироскопом для приложений AR и VR. Телефон вращается на 90 градусов 10 раз перед шаблоном шахматной доски. Движение составляет около 2 с. Этот тест пропускается, если гироскоп не включен или если параметр REALTIME параметра времени не включен.

Тест test_sensor_fusion генерирует несколько участков. Два наиболее важных участка для отладки:

  • test_sensor_fusion_gyro_events : показывает события гироскопа для телефона во время теста. Движение в направлении x и y подразумевает, что телефон не надежно установлен на монтажной пластине, уменьшая вероятность прохождения теста. Количество циклов на графике зависит от скорости записи для сохранения кадров.

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations : показывает выравнивание событий гироскопа и камеры. Этот сюжет должен показывать соответствующее движение между камерой и гироскопом до +/- 1 мс.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

Протестировано API:

Проход: камера и гироскоп TimeStests 'Смещение составляет менее 1 мс в соответствии с CDD Разделом 7.3.9 Датчики высокой верности [C-2-14] .

Механизмы провал:

  • Ошибка смещения: смещение камеры-гироскопа не правильно калибровано в пределах +/-1 мс.
  • Кадры кадров: трубопровод недостаточно быстр, чтобы последовательно захватить 200 кадров.
  • Ошибки сокета: adb не может надежно подключиться к DUT достаточно много времени, чтобы выполнить тест.
  • Диаграмма не монтированная. У сюжета test_sensor_fusion_plot_rotations есть кадры, в которых гироскоп и вращение камеры значительно различаются, когда камера вращается через части диаграммы, которые не плоские.
  • Камера не монтирована плоская. Участок test_sensor_fusion_gyro_events показывает движение в плоскостях x и y. Этот сбой чаще встречается в передних камерах, так как задняя камера часто имеет приподнятую удар до остальной части телефона, создавая наклон при установлении задней части телефона к монтажной пластине.

test_video_stabilization

Тесты, которые стабилизировали видео, вращаются меньше, чем гироскоп.

Протестировано API:

Пропуск: максимальное угловое вращение над кадрами составляет менее 60% вращения гироскопа.

Ниже приведены примеры видео со стабилизацией и без них.

  • Образец видео со стабилизацией

  • Образец видео без стабилизации

feature_combination

Тесты feature_combination проверяют, что функции работают правильно, когда несколько функций камеры включены одновременно. Эти тесты используют то же изображение шахматной доски, которое используется в сцене слияния датчика .

test_feature_combination

Тестирование все комбинации различных комбинаций потока, стабилизация предварительного просмотра, целевой диапазон FPS, 10-битное видео HDR и Ultra HDR, которые поддерживаются устройством камеры. Этот тест очень интенсивный память, поэтому мы рекомендуем использовать хост с не менее 128 ГБ оперативной памяти.

Для Android 15 и выше файл конфигурации включает в себя поле log_feature_combo_support , которое по умолчанию по False . Когда поле log_feature_combo_support устанавливается на True , тест запускает все комбинации поддерживаемых функций и регистрирует результаты в прото -файл, не выполняя тест. Для тестирования соответствия поле log_feature_combo_support должно быть установлено на False .

Протестировано API:

Проход: для каждой поддерживаемой комбинации функций:

  • Предварительный просмотр стабилизируется, если включен превью.
  • Частота кадров предварительного просмотра попадает в настройку AE_TARGET_FPS_RANGE .
  • Цветное пространство Preview Stream соответствует тому, что установлено.
  • Ультра HDR захват имеет действительную карту усиления.
,

На этой странице содержится полный список тестов под набором тестирования изображений камеры (ITS), который является частью проверки теста на совместимость Android (CTS). Его тесты представляют собой функциональные тесты, что означает, что они не измеряют качество изображения, но что все рекламируемые функции камеры работают, как и ожидалось. Этот документ позволяет разработчикам и тестерам понять, что делают отдельные тесты и как отлаживать сбои тестов.

Камера его ворота тестирует по необходимым свойствам камеры, уровню API и уровню класса Media Performance (MPC). Для уровня API его использует ro.product.first_api_level для тестирования затвора, добавленных на определенном уровне API, которые тестируют на отрицательный опыт пользователя для функциональности в более низких уровнях API. Его использует ro.vendor.api_level для тестирования затвора для функций, добавленных в определенном уровне API, которые требуют новых аппаратных возможностей. Если ro.odm.build.media_performance_class определяется для устройства, его требуют, чтобы конкретные тесты были выполнены в зависимости от уровня MPC.

Тесты сгруппированы по сцене следующим образом:

  • Сцена0 : метаданные захвата, джиттер, гироскоп, вибрация
  • Сцена1 : экспозиция, чувствительность, компенсация EV, YUV против JPEG/RAW
  • Сцена2 : обнаружение лица, тесты, требующие цветовых сцен
  • Сцена3 : улучшение края, движение объектива
  • scene4 : Aspect ratio, cropping, field-of-view
  • scene5 : Lens shading
  • scene6 : Zoom
  • scene7 : Multi camera switch
  • scene8 : AE and AWB region metering
  • scene9 : JPEG compression
  • scene_extensions : Camera extensions
  • scene_flash : Autoflash, min frame rate
  • scene_video : Frame drops
  • sensor_fusion : Camera/gyroscope timing offset
  • feature_combination : Feature combinations

See individual sections for a description of each scene.

scene0

Scene0 tests require no specific scene information. However, the phone must be stationary for gyroscope and vibration testing.

test_jitter

Measures jitter in camera timestamps.

APIs tested:

Pass: There's at least a 30 ms delta between frames.

test_jitter_plot.png

test_jitter_plot.png (Note the small y-axis range. Jitter is actually small in this plot.)

test_metadata

Tests the validity of metadata entries. Looks at capture results and at the camera characteristics objects. This test uses auto_capture_request exposure and gain values because image content isn't important.

APIs tested:

Pass: Hardware level, rollingShutterSkew , frameDuration tags, timestampSource , croppingType , blackLevelPattern , pixel_pitch , FoV, hyperfocal distance are present and have valid values.

test_request_capture_match

Tests that the device writes the correct exposure and gain values by reading back the capture metadata.

APIs tested:

Pass: Request and capture metadata values match across all shots.

test_sensor_events

Tests that device queries and prints out sensor events for devices that advertise sensor fusion support. The sensors expected are accelerometer, gyroscope, and magnetometer. This test only works if the screen is on, meaning the device isn't in standby mode.

APIs tested:

Pass: Events for each sensor are received.

test_solid_color_test_pattern

Tests that solid color test patterns are generated properly for camera muting. If camera muting is supported, solid color test patterns must be supported. If camera muting is not supported, solid color test patterns are only tested if the capability is advertised.

If RAW images are supported, color assignment is tested as well. The colors tested are black, white, red, blue, and green. For cameras that don't support RAW images, only black is tested.

APIs tested:

Pass: Solid test patterns supported are the correct color and there is low variance in the image.

test_test_pattern

Tests the android.sensor.testPatternMode parameter to capture frames for each valid test pattern and checks that the frames are generated correctly for solid colors and color bars. This test includes the following steps:

  1. Captures images for all supported test patterns.
  2. Performs a simple correctness check for solid color test pattern and color bars.

APIs tested:

Pass: Supported test patterns are generated correctly.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Tests conversion of test pattern from RAW to YUV with linear tonemap. This test requires android.sensor.testPatternMode = 2 (COLOR_BARS) to generate a perfect image pattern for tonemap conversion. Ensures pipeline has proper color outputs with linear tonemap and ideal image input (relies on test_test_patterns ).

APIs tested:

Pass: The YUV and the RAW look similar to each other.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

Tests if image and motion sensor events are in the same time domain.

APIs tested:

Pass: Motion timestamps are between the two image timestamps.

test_vibration_restriction

Tests if the device's vibration is functioning as expected.

APIs tested:

Pass: The device doesn't vibrate when muted by the camera audio restriction API.

scene1

scene1 is a gray chart. The gray chart must cover the center 30% of the camera field of view. The gray chart is expected to challenge 3A (auto exposure, auto white balance, auto focus) moderately as the center region has no features. However, the capture request specifies the entire scene which includes sufficient features for 3A to converge.

RFoV cameras can be tested in the WFoV or the RFoV test rig. If a RFoV camera is tested in the WFoV test rig, the chart is scaled by ⅔ to ensure some boundaries for the gray chart in the FoV to help 3A converge. For more detailed descriptions of the camera test rigs, see Camera ITS-in-a-box .

scene1

scene1: Full size chart (left). ⅔ scaled chart (right).

test_ae_precapture_trigger

Tests the AE state machine when using the precapture trigger. Captures five manual requests with AE disabled. The last request has an AE precapture trigger, which should be ignored because AE is disabled.

APIs tested:

Pass: AE converges.

test_auto_vs_manual

Tests that captured auto and manual shots look the same.

APIs tested:

Pass: Manual white balance gains and transform reported in each capture result match with the auto white balance estimate from camera's 3A algorithm.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_black_white

Tests that the device produces full black and white images. Takes two captures, the first with extremely low gain and short exposure, which results in a black photo, and the second with extremely high gain and long exposure, which results in a white photo.

APIs tested:

Pass: Produces black and white images. Saturated channels of white images have RGB values of [255, 255, 255] with a margin of error of less than 1% difference.

test_black_white_blacktest_black_white_black
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_capture

Verifies that the entire capture pipeline can keep up with the speed of fullsize capture and CPU time.

APIs tested:

Pass: Captures a burst of full size images, checks for frame drops and image brightness.

test_burst_sameness_manual

Takes 5 bursts of 50 images with manual capture setting and checks that they're all identical. This test can be used to identify if there are sporadic frames that are processed differently or have artifacts.

APIs tested:

Pass: Images are identical visually and in RGB values.

Fail: Shows a spike or drop of the RGB average chart at the beginning of each burst

  • Tolerance is 3% for first_API_level < 30
  • Tolerance is 2% for first_API_level >= 30

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

Tests that valid data comes back in CaptureResult objects. Does an auto, manual, and auto capture.

APIs tested:

Pass: Metadata is valid for all captures and the manual settings don't leak into the second auto capture. Plots out the lens shading correction for the captures.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Tests that the RAW streams aren't croppable.

APIs tested:

Pass: YUV images get center-cropped but not RAW images.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Tests that crop regions work. Takes a full image and creates patches of 5 different regions (corners and center.) Takes images with crop set for the 5 regions. Compares the patch and the crop image values.

APIs tested:

Pass: Image of the cropped region matches the patch that corresponds to the crop image.

test_dng_noise_model

Verifies that the DNG raw model parameters are correct. The plot depicts the measured variance of a center patch of the grey card in raw shots captured over a range of sensitivities, and compares these values with the variance that is expected at each sensitivity by the DNG noise model in the camera HAL (based on the O,S parameters returned in the capture result objects). For a more details on the DNG noise model, download the following document on the DNG Noise Model .

APIs tested:

Pass: DNG raw model parameters are correct. Expected RGB values match that of the actual RGB values measured.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Tests that the exposure value (EV) compensation is applied. The test increases exposure in eight steps, and checks measured brightness versus expected brightness. Expected values are calculated from image brightness of image with no EV compensation applied and the expected value will saturate if the calculated values exceed the actual image value range. Test fails if the expected values and measured values don't match or images overexpose within five steps.

APIs tested:

Pass: Images show increasing exposure without overexposing within five steps.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Tests that the EV compensation is applied using a range created with CONTROL_AE_COMPENSATION_STEP . Eight frames are captured at each compensation value.

APIs tested:

Pass: Captures increase in luma with increased EV compensation setting, and the eight frames captured for each EV compensation setting have stable luma values.

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure_x_iso

Tests that a constant exposure is achieved as ISO and exposure time vary. Takes a series of shots that have ISO and exposure time chosen to balance each other. Results should have the same brightness, but over the sequence the image should get noisier. Verifies sample pixel mean values are close to each other. Ensures that the images aren't clamped to 0 or 1 (which would make them look like flat lines). The test can also be run with RAW images by setting the debug flag in your configuration file.

APIs tested:

Pass: Images have the same brightness, but get noisier with higher ISO. RGB planes are flat when the value of ISO*exposure is constant over the tested gain space.

Fail mechanism:

  • In test_exposure_plot_means.png , as the gain multiplier values (x-axis) increase, the normalized RGB plane average values (y-axis) start to deviate from the low gain multiplier values.

test_exposure_plot_means

test_exposure_plot_means.png

test_exposure_mult=1.00test_exposure_mult=64.00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

Tests that converted YUV images and device JPEG images look the same. Test takes the center 10% of the image and calculates the RGB value, and verifies that they match.

APIs tested:

Pass: The average RGB difference between each image is less than 3%.

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

test_latching

Tests that settings (exposure and gain) latch on the right frame for FULL and LEVEL_3 cameras. Takes a series of shots using back-to-back requests, varying the capture request parameters between shots. Checks that the images have the expected properties.

APIs tested:

Pass: Images [2, 3, 6, 8, 10, 12, 13] have increased ISO or exposure and show up with higher RGB means on test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

Tests that device processing can be inverted to linear pixels. Captures a sequence of shots with the device pointed at a uniform target.

APIs tested:

Pass: R, G, B values must increase linearly with increased sensitivity.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Tests 3A lock and YUV burst (using auto setting). This test is designed to pass even on limited devices that don't have MANUAL_SENSOR or PER_FRAME_CONTROLS . The test checks YUV image consistency while the frame rate check is in CTS.

APIs tested:

Pass: Captures look consistent.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_param_color_correction

Tests that the android.colorCorrection.* parameters are applied when set. Takes shots with different transform and gain values, and tests that they look correspondingly different. The transform and gains are chosen to make the output increasingly red or blue. Uses a linear tonemap. Tone mapping is a technique used in image processing to map one set of colors to another to approximate the appearance of high-dynamic-range images in a medium that has a more limited dynamic range.

APIs tested:

Pass: R and B values boost according to transformation.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*The x-axis is the capture requests: 0 = unity, 1=red boost, 2= blue boost

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (R boost)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (B boost)

test_param_flash_mode

Tests that the android.flash.mode parameter is applied. Manually sets the exposure to be on the dark side, so that it is obvious whether the flash fired or not, and uses a linear tonemap. Checks the center with the tile image to see if there's a large gradient that's created to verify whether the flash fired.

APIs tested:

Pass: The center of the tile image has a large gradient meaning that the flash fired.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Tests that the android.noiseReduction.mode parameter is applied correctly when set. Captures images with the camera dimly lit. Uses a high analog gain to ensure the captured image is noisy. Captures three images, for NR off, "fast", and "high quality". Also captures an image with low gain and NR off, and uses the variance of this as the baseline. The higher the SNR (Signal to Noise Ratio), the better the image quality.

APIs tested:

Pass: SNR varies with different noise reduction modes and behaves similarly as the graph below.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: OFF, 1: FAST, 2: HQ, 3: MIN , 4: ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

test_param_shading_mode

Tests that the android.shading.mode parameter is applied.

APIs tested:

Pass: Shading modes are switched and the lens shading maps are modified as expected.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

Tests that the android.tonemap.mode parameter is applied. Applies different tonemap curves to each R, G, B channel, and checks that the output images are modified as expected. This test consists of two tests, test1 and test2.

APIs tested:

Проходить:

  • test1: Both images have a linear tonemap, but n=1 has a steeper gradient. The G (green) channel is brighter for the n=1 image.
  • test2: Same tonemap, but different length. Images are the same.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

Checks post RAW sensitivity boost. Captures a set of RAW and YUV images with different sensitivity, posts RAW sensitivity boost combination and checks if the output pixel mean matches request settings.

APIs tested:

Pass: RAW images get darker as boost increases while YUV images stay constant in brightness

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

Captures a set of raw images with increasing gains and measures the noise. Captures raw-only, in a burst.

APIs tested:

Pass: Each shot is noisier than the previous shot, as the gain is increasing.

Uses the variance of the center stats grid cell.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Captures a set of raw images with increasing exposure time and measures the pixel values.

APIs tested:

Pass: Increasing the ISO (gain) makes the pixels more sensitive to light, so the plot moves towards the left.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ is 1 ms, 10¹ is 10 ms, 10⁻¹ is 0.1 ms)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

Captures a set of raw images with increasing sensitivities and measures the noise (variance) in the center 10% of image. Tests that each shot is noisier than the previous one.

APIs tested:

Pass: Variance increases with each shot.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Tests that android.noiseReduction.mode is applied for reprocessing requests. Captures reprocessed images with the camera dimly lit. Uses a high analog gain to ensure the capture image is noisy. Captures three reprocessed images, for NR off, "fast", and "high quality". Captures a reprocessed image with low gain and NR off, and uses the variance of this as the baseline.

APIs tested:

Pass: FAST >= OFF, HQ >= FAST, HQ >> OFF

Typical SNR vs NR_MODE plot

Typical SNR vs NR_MODE plot

test_tonemap_sequence

Tests a sequence of shots with different tonemap curves. Captures 3 manual shots with a linear tonemap. Captures 3 manual shots with default tonemap. Computes the delta between each consecutive frame pair.

APIs tested:

Pass: There are 3 identical frames followed by a different set of 3 identical frames.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

Tests that all reported sizes and formats for image capture work. Uses a manual request with a linear tonemap so that the YUV and JPEG look the same when converted by the image_processing_utils module. Images aren't saved by default, but can be saved by enabling debug_mode .

APIs tested:

Pass: All image centers have a max RMS (root-mean-square value of a signal) difference in RGB converted images with 3% of highest resolution YUV image.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Tests that the reported sizes and formats for image capture work.

APIs tested:

Pass: Test completes and returns the images requested.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Tests capturing a single frame as both YUV and JPEG outputs. Uses a manual request with a linear tonemap so that the YUV and JPEG look the same when converted by the image_processing_utils module.

APIs tested:

Pass: YUV and JPEG images are similar and have less than 1% RMS (root-mean-square value of a signal) difference.

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

Tests capturing a single frame as both RAW/RAW10/RAW12 and YUV outputs if supported. Uses a manual request with linear tonemap so raw and YUV are expected to be the same. Compares RGB converted images' center 10% RGB values. Logs android.shading.mode .

APIs tested:

Pass: YUV and raw images are similar and have less than 3.5% RMS (root-mean-square value of a signal) difference.

test_yuv_plus_raw_shading=1_raw.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

scene2_a

scene2_a has three faces with a gray background and neutral clothing. The faces are chosen to have a wide range of skin tones. The chart must have the correct orientation for face detection to work optimally.

scene2_a

scene2_a

test_autoframing

Tests the camera device's autoframing behavior. Performs a large zoom such that none of the faces in the scene are visible, enables the autoframing mode by setting AUTOFRAMING in CaptureRequest to True , and verifies whether all the faces in the original scene can be detected when the state converges (that is, when AUTOFRAMING_STATE in CaptureResult is set to AUTOFRAMING_STATE_CONVERGED ).

APIs tested:

Pass: All three faces are detected.

test_display_p3

Tests Display P3 capture in JPEG using the ColorSpaceProfiles API. Tests that the captured JPEG has an appropriate ICC profile in its header, and that the image contains colors outside of the sRGB gamut.

APIs tested:

Pass: The JPEG contains a Display P3 ICC profile and colors outside the sRGB gamut.

test_effects

Captures frame for supported camera effects and checks if they are generated correctly. The test only checks effects OFF and MONO , but saves images for all supported effects.

APIs tested:

Pass: Captures the scene image with effects OFF and a monochrome image with effects set to MONO .

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

Tests different combinations of output formats.

APIs tested:

Pass: All the combinations are successfully captured.

test_num_faces

Tests face detection.

APIs tested:

Pass: Finds three faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_reprocess_uv_swap

Tests that YUV reprocessing doesn't swap the U and V planes. This is detected by calculating the sum of absolute differences (SAD) between the reprocessed image and a non-reprocessed capture. If swapping the output U and V planes of the reprocessed capture results in an increased SAD, then the output is assumed to have the correct U and V planes.

APIs tested:

Pass: The U and V planes aren't swapped.

test_reprocess_uv_swap

test_reprocess_uv_swap.png

scene2_b

test_num_faces

Tests face detection with increased skin tone diversity in face scenes.

APIs tested:

Pass: Finds 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Captures two images using the largest common YUV and JPEG formats with the same aspect ratio as the largest JPEG format not exceeding a resolution of 1920x1440. Sets jpeg.quality to 100 and captures a dual surface request. Converts both images to RGB arrays and calculates the 3D root mean square (RMS) difference between the two images.

In addition, this test verifies that the YUV outputs for all supported stream use cases are reasonably similar to the YUV with the STILL_CAPTURE use case.

APIs tested:

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:

Pass: Finds 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

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 < 1000ms 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_num_faces

Tests face detection with increased skin tone diversity in face scenes.

APIs tested:

Pass: Finds 3 faces.

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:

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:

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.

scene2_f.png

scene2_f

test_num_faces

Tests face detection with increased skin tone diversity in face scenes.

APIs tested:

Pass: Finds 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

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

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (fast mode)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (high quality mode)

test_flip_mirror

Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .

Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.

Pass: Image isn't flipped, mirrored or rotated.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_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:

Проходить:

  • The drift of the gyro is less than 0.01 rad over the test time.
  • The variance of the gyro 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 gyro is less than 1 degree per second.

test_imu_drift_gyro_drift.png

test_imu_drift_gyro_drift.png

test_imu_drift_rotation_vector_drift.png

test_imu_drift_rotation_vector_drift.png

test_landscape_to_portrait

Tests if the landscape to portrait override functions correctly for landscape-oriented sensors.

APIs tested:

Pass: The test is able to locate a chart with the expected rotation (0 degrees when the landscape to portrait override is disabled, 90 degrees when enabled).

test_landscape_to_portrait

test_landscape_to_portrait.png

test_lens_movement_reporting

Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilizes as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first few frames with the lens stationary at optimum focal distance, and the final few frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.

APIs tested:

Pass: Lens movement flag is True in the frame with sharpness change.

Fail mechanisms:

  • lens_moving: True ( android.hardware.camera2.CaptureResult#LENS_STATE = 1) in test_log.DEBUG is asserted only in frames where sharpness isn't changing.
  • Frames with lens_moving: False ( android.hardware.camera2.CaptureResult#LENS_STATE = 0) in test_log.DEBUG has a sharpness difference compared to the first few frames at optimum focal distance or the last few frames at minimum focus distance.

test_reprocess_edge_enhancement

Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.

APIs tested:

Pass: Sharpness for the different edge modes is correct. HQ (mode 2) is sharper than OFF (mode 0), and improvement between different modes is similar.

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 consists of a black circle on a white background inside a square. Tests in scene4 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.

scene4

scene4

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 ensure 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:

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:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

Fail mechanisms:

  • The 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.
  • Lower resolution image is double cropped in the image pipeline creating different FoV between high and low resolution images.
  • The circle in the captured image is cropped due to an extreme aspect ratio capture request reducing the height or width of the image.
  • The circle in the captured image has a reflection in the center and doesn't appear fully filled.

test_multi_camera_alignment

Tests the camera calibration parameters related to camera positioning for multi-camera systems. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.

APIs tested:

Pass: Circle centers and sizes are as expected in projected images compared to captured images using camera calibration data and focal lengths.

Fail mechanisms:

  • LENS_INTRINSIC_CALIBRATION , LENS_POSE_TRANSLATION , or LENS_POSE_ROTATION are design values and not actual calibration data.
  • The camera system isn't appropriate for the test setup. For example, testing a wide and an ultra-wide camera system with the RFoV test rig. For more information, see Camera ITS-in-a-box FAQ1 .

test_preview_aspect_ratio_and_crop

Similar to the test_aspect_ratio_and_crop test for still captures, this test checks the supported preview formats to ensure the preview frames aren't stretched or cropped inappropriately. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center of the frame, and the circle size doesn't change for a constant format or with different resolutions (field of view check).

APIs tested:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

test_preview_stabilization_fov

Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON , and another with preview stabilization OFF . A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.

APIs tested:

Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%.

test_video_aspect_ratio_and_crop

Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

scene5

Scene5 requires a uniformly lit gray scene. This is accomplished by a diffuser placed over the camera lens. We recommend the following diffuser: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168 .

To prepare the scene, attach a diffuser in front of the camera and point the camera to a lighting source of around 2000 lux. Images captured for scene5 require diffuse lighting with no features evident. The following is a sample image:

scene5

scene5 capture

test_lens_shading_and_color_uniformity

Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.

APIs tested:

Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.

scene6

Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range. 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.

scene6

scene6

test_in_sensor_zoom

Tests the behavior of the camera in-sensor zoom feature, which produces cropped RAW images.

With the stream use case set to CROPPED_RAW , the test takes two captures over the zoom range, a full field of view (FoV) RAW image and a cropped RAW image. The test converts the images to RGB arrays, downscales the full-sized cropped RAW image to the size reported by SCALER_RAW_CROP_REGION , and calculates the 3D root mean square (RMS) difference between the two images.

APIs tested:

Pass: The 3D root mean square (RMS) difference between the downscaled cropped RAW image and the full FoV RAW image is less than 1%.

test_zoom

Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in. For each format (YUV, JPEG), the same camera capture session is used to converge 3A and take captures.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

test_zoom to find the contour of the circle closest to the center.

test_low_latency_zoom

Tests the camera low latency zoom behavior. Takes captures over the zoom range with android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) , and checks if the circles in the output images match the zoom ratios in the capture metadata. The same camera capture session is used to converge 3A and take captures.

APIs tested:

Pass: Relative size of captured circle is accurate against the zoom ratio result metadata.

test_preview_video_zoom_match

Tests that while recording and zooming, video preview and video output display and record the same output. Calculates the size of the circle closest to the center at different zoom ratios and checks whether the size of the circle increases as the zoom ratio increases.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio in video and preview.

VGA_640x480_key_frame.png

VGA_640x480_key_frame.png (before zoom)

preview_640x480_key_frame.png

preview_640x480_key_frame.png (before zoom)

VGA_640x480_key_frame_zoomed.png

VGA_640x480_key_frame.png (after zoom)

preview_640x480_key_frame_zoomed.png

preview_640x480_key_frame.png (after zoom)

test_preview_zoom

Tests that the zoom ratio of each preview frame matches the corresponding capture metadata. The test takes preview frames over the zoom range and finds the contour of the circle closest to the center. The test then checks that the selected circle gets bigger and that the center of the circle moves away from the center of the image as the camera zooms in.

APIs tested:

Pass: The relative size of the selected circle is accurate for the reported zoom ratio of the corresponding capture result for all of the preview frames. The relative distance of the selected circle from the center of the image is accurate for the reported zoom ratio of the corresponding capture result of all the preview frames.

test_zoom

test_preview_zoom images showing selected circle 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:

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.

scene7

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 ensures that the luma change is within the expected range for both UW and W lens images. The AWB check verifies that the ratios of R/G and B/G 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.

APIs tested:

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 UW and W lens images must be less than 0.5%.
  • AWB check: The difference between the R/G and B/G values for the UW and W lens images must be less than 0.5%.
  • AF check: The image sharpness change between the UW and W lens images must be less than 2%.

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.

scene8

scene8

test_ae_awb_regions

Tests that the RGB and luma values differ when preview recording at different auto exposure (AE) and auto white balance (AWB) regions.

The test records an eight second preview recording, performing AE and AWB metering on each quadrant for two 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:

Pass: The AE and AWB checks both pass.

scene9

Scene9 consists of thousands of randomly sized and colored circles to create a scene with very low repeatability to stress JPEG compression algorithms.

scene9

scene9

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 ensure the scene displayed on the tablet fills the camera field of view.

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 ensures Quantization Tables change correctly.

APIs tested:

Pass: Quantization matrix decreases with quality increase. (Matrix represents the division factor.)

test_jpeg_quality

Pixel 4 rear camera luma/chroma DQT matrix averages vs JPEG quality

test_jpeg_quality failed

Failed test example

Note that for very low quality images (jpeg.quality < 50), there is no increase in compression in the quantization matrix.

scene_video

The scene_video scene is a video scene. It consists of four different colored circles moving back and forth at different frame rates against a white background.

scene_video

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:

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.

scene_hdr

scene_hdr

test_hdr_extension

Tests the HDR extension . Takes captures with and without the extension enabled, and checks if the extension makes the QR code more detectable.

APIs tested:

Pass: The HDR extension reduces the number of contrast changes needed to detect the QR code or reduces the gradient across the QR code.

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

scene_low_light

scene_low_light

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.

APIs tested:

Pass: The average luma value of the first 6 squares must be at least 90, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 18.

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.

APIs tested:

Pass: The average luma value of the first 6 squares must be at least 90, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 18.

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:

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:

Проходить:

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 R/G and B/G ratios and verifies whether the ratios are within 0.95 and 1.05.

APIs tested:

Pass: The R/G and B/G ratios are within 0.95 and 1.05. The flash image mean is within the (68, 102) range.

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:

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:

Проходить:

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, ensure 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 17"x17" (43x43 cm). The sensor_fusion tests can be automated with the Sensor Fusion Box .

Sensor fusion chart

Sensor fusion chart

Sensor fusion chart in Rig

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 optical image stabilization (OIS).

APIs tested:

Pass: The optical center of the lens intrinsic changes by one pixel or more. If lens intrinsic samples are supported, the optical centers of the lens intrinsic samples change by one pixel or more.

test_lens_intrinsic_calibration_example.png

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:

Pass: Angle between images from each camera doesn't change appreciably as 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 root mean square (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.

test_preview_distortion_example.jpg

Image of checkerboard with ideal points as green and actual points as red

APIs tested:

Pass: The normalized distortion error of each preview frame is less than 0.1.

test_preview_stabilization

Tests that stabilized preview video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

test_sensor_fusion

Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME parameter is not enabled.

The test_sensor_fusion test generates a number of plots. The two most important plots for debugging are:

  • test_sensor_fusion_gyro_events : Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations : Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

APIs tested:

Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .

Fail mechanisms:

  • Offset error: The camera-gyroscope offset isn't correctly calibrated to within +/-1 ms.
  • Frame drops: The pipeline isn't fast enough to capture 200 frames consecutively.
  • Socket errors: adb can't reliably connect to the DUT long enough to execute the test.
  • The chart isn't mounted flat. The plot test_sensor_fusion_plot_rotations has frames where the gyroscope and camera rotation vary considerably as the camera rotates through the parts of the chart that aren't flat.
  • The camera isn't mounted flat. The plot test_sensor_fusion_gyro_events shows movement in the X and Y planes. This failure is more common in front-facing cameras as the rear camera often has a raised bump to the rest of the phone body, creating a tilt when mounting the rear of the phone to the mounting plate.

test_video_stabilization

Tests that stabilized video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

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, preview stabilization, target FPS range, 10-bit HDR video, and Ultra HDR that are supported by the camera device. This test is very memory intensive, so we recommend using a host with at least 128 GB of RAM.

For Android 15 and higher, the configuration file includes a log_feature_combo_support field, which defaults to False . When the log_feature_combo_support field is set to True , the test runs all combinations of supported features, and logs the results into a proto file without failing the test. For compliance testing, the log_feature_combo_support field must be set to False .

APIs tested:

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

This page provides a comprehensive list of the tests under the Camera Image Test Suite (ITS), which is part of the Android Compatibility Test Suite (CTS) Verifier. ITS tests are functional tests, meaning that they don't measure image quality, but that all of the advertised camera functions are working as expected. This document lets developers and testers understand what the individual tests do and how to debug test failures.

Camera ITS gates tests by required camera properties, API level, and media performance class (MPC) level. For API level, ITS uses ro.product.first_api_level to gate tests added in a specific API level that test for negative user experiences for functionality in lower API levels. ITS uses ro.vendor.api_level to gate tests for features added in a specific API level that require new hardware capability. If ro.odm.build.media_performance_class is defined for a device, ITS requires specific tests to be run depending on the MPC level.

Tests are grouped by scene as follows:

See individual sections for a description of each scene.

scene0

Scene0 tests require no specific scene information. However, the phone must be stationary for gyroscope and vibration testing.

test_jitter

Measures jitter in camera timestamps.

APIs tested:

Pass: There's at least a 30 ms delta between frames.

test_jitter_plot.png

test_jitter_plot.png (Note the small y-axis range. Jitter is actually small in this plot.)

test_metadata

Tests the validity of metadata entries. Looks at capture results and at the camera characteristics objects. This test uses auto_capture_request exposure and gain values because image content isn't important.

APIs tested:

Pass: Hardware level, rollingShutterSkew , frameDuration tags, timestampSource , croppingType , blackLevelPattern , pixel_pitch , FoV, hyperfocal distance are present and have valid values.

test_request_capture_match

Tests that the device writes the correct exposure and gain values by reading back the capture metadata.

APIs tested:

Pass: Request and capture metadata values match across all shots.

test_sensor_events

Tests that device queries and prints out sensor events for devices that advertise sensor fusion support. The sensors expected are accelerometer, gyroscope, and magnetometer. This test only works if the screen is on, meaning the device isn't in standby mode.

APIs tested:

Pass: Events for each sensor are received.

test_solid_color_test_pattern

Tests that solid color test patterns are generated properly for camera muting. If camera muting is supported, solid color test patterns must be supported. If camera muting is not supported, solid color test patterns are only tested if the capability is advertised.

If RAW images are supported, color assignment is tested as well. The colors tested are black, white, red, blue, and green. For cameras that don't support RAW images, only black is tested.

APIs tested:

Pass: Solid test patterns supported are the correct color and there is low variance in the image.

test_test_pattern

Tests the android.sensor.testPatternMode parameter to capture frames for each valid test pattern and checks that the frames are generated correctly for solid colors and color bars. This test includes the following steps:

  1. Captures images for all supported test patterns.
  2. Performs a simple correctness check for solid color test pattern and color bars.

APIs tested:

Pass: Supported test patterns are generated correctly.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Tests conversion of test pattern from RAW to YUV with linear tonemap. This test requires android.sensor.testPatternMode = 2 (COLOR_BARS) to generate a perfect image pattern for tonemap conversion. Ensures pipeline has proper color outputs with linear tonemap and ideal image input (relies on test_test_patterns ).

APIs tested:

Pass: The YUV and the RAW look similar to each other.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

Tests if image and motion sensor events are in the same time domain.

APIs tested:

Pass: Motion timestamps are between the two image timestamps.

test_vibration_restriction

Tests if the device's vibration is functioning as expected.

APIs tested:

Pass: The device doesn't vibrate when muted by the camera audio restriction API.

scene1

scene1 is a gray chart. The gray chart must cover the center 30% of the camera field of view. The gray chart is expected to challenge 3A (auto exposure, auto white balance, auto focus) moderately as the center region has no features. However, the capture request specifies the entire scene which includes sufficient features for 3A to converge.

RFoV cameras can be tested in the WFoV or the RFoV test rig. If a RFoV camera is tested in the WFoV test rig, the chart is scaled by ⅔ to ensure some boundaries for the gray chart in the FoV to help 3A converge. For more detailed descriptions of the camera test rigs, see Camera ITS-in-a-box .

scene1

scene1: Full size chart (left). ⅔ scaled chart (right).

test_ae_precapture_trigger

Tests the AE state machine when using the precapture trigger. Captures five manual requests with AE disabled. The last request has an AE precapture trigger, which should be ignored because AE is disabled.

APIs tested:

Pass: AE converges.

test_auto_vs_manual

Tests that captured auto and manual shots look the same.

APIs tested:

Pass: Manual white balance gains and transform reported in each capture result match with the auto white balance estimate from camera's 3A algorithm.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_black_white

Tests that the device produces full black and white images. Takes two captures, the first with extremely low gain and short exposure, which results in a black photo, and the second with extremely high gain and long exposure, which results in a white photo.

APIs tested:

Pass: Produces black and white images. Saturated channels of white images have RGB values of [255, 255, 255] with a margin of error of less than 1% difference.

test_black_white_blacktest_black_white_black
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_capture

Verifies that the entire capture pipeline can keep up with the speed of fullsize capture and CPU time.

APIs tested:

Pass: Captures a burst of full size images, checks for frame drops and image brightness.

test_burst_sameness_manual

Takes 5 bursts of 50 images with manual capture setting and checks that they're all identical. This test can be used to identify if there are sporadic frames that are processed differently or have artifacts.

APIs tested:

Pass: Images are identical visually and in RGB values.

Fail: Shows a spike or drop of the RGB average chart at the beginning of each burst

  • Tolerance is 3% for first_API_level < 30
  • Tolerance is 2% for first_API_level >= 30

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

Tests that valid data comes back in CaptureResult objects. Does an auto, manual, and auto capture.

APIs tested:

Pass: Metadata is valid for all captures and the manual settings don't leak into the second auto capture. Plots out the lens shading correction for the captures.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Tests that the RAW streams aren't croppable.

APIs tested:

Pass: YUV images get center-cropped but not RAW images.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Tests that crop regions work. Takes a full image and creates patches of 5 different regions (corners and center.) Takes images with crop set for the 5 regions. Compares the patch and the crop image values.

APIs tested:

Pass: Image of the cropped region matches the patch that corresponds to the crop image.

test_dng_noise_model

Verifies that the DNG raw model parameters are correct. The plot depicts the measured variance of a center patch of the grey card in raw shots captured over a range of sensitivities, and compares these values with the variance that is expected at each sensitivity by the DNG noise model in the camera HAL (based on the O,S parameters returned in the capture result objects). For a more details on the DNG noise model, download the following document on the DNG Noise Model .

APIs tested:

Pass: DNG raw model parameters are correct. Expected RGB values match that of the actual RGB values measured.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Tests that the exposure value (EV) compensation is applied. The test increases exposure in eight steps, and checks measured brightness versus expected brightness. Expected values are calculated from image brightness of image with no EV compensation applied and the expected value will saturate if the calculated values exceed the actual image value range. Test fails if the expected values and measured values don't match or images overexpose within five steps.

APIs tested:

Pass: Images show increasing exposure without overexposing within five steps.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Tests that the EV compensation is applied using a range created with CONTROL_AE_COMPENSATION_STEP . Eight frames are captured at each compensation value.

APIs tested:

Pass: Captures increase in luma with increased EV compensation setting, and the eight frames captured for each EV compensation setting have stable luma values.

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure_x_iso

Tests that a constant exposure is achieved as ISO and exposure time vary. Takes a series of shots that have ISO and exposure time chosen to balance each other. Results should have the same brightness, but over the sequence the image should get noisier. Verifies sample pixel mean values are close to each other. Ensures that the images aren't clamped to 0 or 1 (which would make them look like flat lines). The test can also be run with RAW images by setting the debug flag in your configuration file.

APIs tested:

Pass: Images have the same brightness, but get noisier with higher ISO. RGB planes are flat when the value of ISO*exposure is constant over the tested gain space.

Fail mechanism:

  • In test_exposure_plot_means.png , as the gain multiplier values (x-axis) increase, the normalized RGB plane average values (y-axis) start to deviate from the low gain multiplier values.

test_exposure_plot_means

test_exposure_plot_means.png

test_exposure_mult=1.00test_exposure_mult=64.00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

Tests that converted YUV images and device JPEG images look the same. Test takes the center 10% of the image and calculates the RGB value, and verifies that they match.

APIs tested:

Pass: The average RGB difference between each image is less than 3%.

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

test_latching

Tests that settings (exposure and gain) latch on the right frame for FULL and LEVEL_3 cameras. Takes a series of shots using back-to-back requests, varying the capture request parameters between shots. Checks that the images have the expected properties.

APIs tested:

Pass: Images [2, 3, 6, 8, 10, 12, 13] have increased ISO or exposure and show up with higher RGB means on test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

Tests that device processing can be inverted to linear pixels. Captures a sequence of shots with the device pointed at a uniform target.

APIs tested:

Pass: R, G, B values must increase linearly with increased sensitivity.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Tests 3A lock and YUV burst (using auto setting). This test is designed to pass even on limited devices that don't have MANUAL_SENSOR or PER_FRAME_CONTROLS . The test checks YUV image consistency while the frame rate check is in CTS.

APIs tested:

Pass: Captures look consistent.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_param_color_correction

Tests that the android.colorCorrection.* parameters are applied when set. Takes shots with different transform and gain values, and tests that they look correspondingly different. The transform and gains are chosen to make the output increasingly red or blue. Uses a linear tonemap. Tone mapping is a technique used in image processing to map one set of colors to another to approximate the appearance of high-dynamic-range images in a medium that has a more limited dynamic range.

APIs tested:

Pass: R and B values boost according to transformation.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*The x-axis is the capture requests: 0 = unity, 1=red boost, 2= blue boost

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (R boost)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (B boost)

test_param_flash_mode

Tests that the android.flash.mode parameter is applied. Manually sets the exposure to be on the dark side, so that it is obvious whether the flash fired or not, and uses a linear tonemap. Checks the center with the tile image to see if there's a large gradient that's created to verify whether the flash fired.

APIs tested:

Pass: The center of the tile image has a large gradient meaning that the flash fired.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Tests that the android.noiseReduction.mode parameter is applied correctly when set. Captures images with the camera dimly lit. Uses a high analog gain to ensure the captured image is noisy. Captures three images, for NR off, "fast", and "high quality". Also captures an image with low gain and NR off, and uses the variance of this as the baseline. The higher the SNR (Signal to Noise Ratio), the better the image quality.

APIs tested:

Pass: SNR varies with different noise reduction modes and behaves similarly as the graph below.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: OFF, 1: FAST, 2: HQ, 3: MIN , 4: ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

test_param_shading_mode

Tests that the android.shading.mode parameter is applied.

APIs tested:

Pass: Shading modes are switched and the lens shading maps are modified as expected.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

Tests that the android.tonemap.mode parameter is applied. Applies different tonemap curves to each R, G, B channel, and checks that the output images are modified as expected. This test consists of two tests, test1 and test2.

APIs tested:

Проходить:

  • test1: Both images have a linear tonemap, but n=1 has a steeper gradient. The G (green) channel is brighter for the n=1 image.
  • test2: Same tonemap, but different length. Images are the same.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

Checks post RAW sensitivity boost. Captures a set of RAW and YUV images with different sensitivity, posts RAW sensitivity boost combination and checks if the output pixel mean matches request settings.

APIs tested:

Pass: RAW images get darker as boost increases while YUV images stay constant in brightness

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

Captures a set of raw images with increasing gains and measures the noise. Captures raw-only, in a burst.

APIs tested:

Pass: Each shot is noisier than the previous shot, as the gain is increasing.

Uses the variance of the center stats grid cell.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Captures a set of raw images with increasing exposure time and measures the pixel values.

APIs tested:

Pass: Increasing the ISO (gain) makes the pixels more sensitive to light, so the plot moves towards the left.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ is 1 ms, 10¹ is 10 ms, 10⁻¹ is 0.1 ms)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

Captures a set of raw images with increasing sensitivities and measures the noise (variance) in the center 10% of image. Tests that each shot is noisier than the previous one.

APIs tested:

Pass: Variance increases with each shot.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Tests that android.noiseReduction.mode is applied for reprocessing requests. Captures reprocessed images with the camera dimly lit. Uses a high analog gain to ensure the capture image is noisy. Captures three reprocessed images, for NR off, "fast", and "high quality". Captures a reprocessed image with low gain and NR off, and uses the variance of this as the baseline.

APIs tested:

Pass: FAST >= OFF, HQ >= FAST, HQ >> OFF

Typical SNR vs NR_MODE plot

Typical SNR vs NR_MODE plot

test_tonemap_sequence

Tests a sequence of shots with different tonemap curves. Captures 3 manual shots with a linear tonemap. Captures 3 manual shots with default tonemap. Computes the delta between each consecutive frame pair.

APIs tested:

Pass: There are 3 identical frames followed by a different set of 3 identical frames.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

Tests that all reported sizes and formats for image capture work. Uses a manual request with a linear tonemap so that the YUV and JPEG look the same when converted by the image_processing_utils module. Images aren't saved by default, but can be saved by enabling debug_mode .

APIs tested:

Pass: All image centers have a max RMS (root-mean-square value of a signal) difference in RGB converted images with 3% of highest resolution YUV image.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Tests that the reported sizes and formats for image capture work.

APIs tested:

Pass: Test completes and returns the images requested.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Tests capturing a single frame as both YUV and JPEG outputs. Uses a manual request with a linear tonemap so that the YUV and JPEG look the same when converted by the image_processing_utils module.

APIs tested:

Pass: YUV and JPEG images are similar and have less than 1% RMS (root-mean-square value of a signal) difference.

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

Tests capturing a single frame as both RAW/RAW10/RAW12 and YUV outputs if supported. Uses a manual request with linear tonemap so raw and YUV are expected to be the same. Compares RGB converted images' center 10% RGB values. Logs android.shading.mode .

APIs tested:

Pass: YUV and raw images are similar and have less than 3.5% RMS (root-mean-square value of a signal) difference.

test_yuv_plus_raw_shading=1_raw.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

scene2_a

scene2_a has three faces with a gray background and neutral clothing. The faces are chosen to have a wide range of skin tones. The chart must have the correct orientation for face detection to work optimally.

scene2_a

scene2_a

test_autoframing

Tests the camera device's autoframing behavior. Performs a large zoom such that none of the faces in the scene are visible, enables the autoframing mode by setting AUTOFRAMING in CaptureRequest to True , and verifies whether all the faces in the original scene can be detected when the state converges (that is, when AUTOFRAMING_STATE in CaptureResult is set to AUTOFRAMING_STATE_CONVERGED ).

APIs tested:

Pass: All three faces are detected.

test_display_p3

Tests Display P3 capture in JPEG using the ColorSpaceProfiles API. Tests that the captured JPEG has an appropriate ICC profile in its header, and that the image contains colors outside of the sRGB gamut.

APIs tested:

Pass: The JPEG contains a Display P3 ICC profile and colors outside the sRGB gamut.

test_effects

Captures frame for supported camera effects and checks if they are generated correctly. The test only checks effects OFF and MONO , but saves images for all supported effects.

APIs tested:

Pass: Captures the scene image with effects OFF and a monochrome image with effects set to MONO .

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

Tests different combinations of output formats.

APIs tested:

Pass: All the combinations are successfully captured.

test_num_faces

Tests face detection.

APIs tested:

Pass: Finds three faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_reprocess_uv_swap

Tests that YUV reprocessing doesn't swap the U and V planes. This is detected by calculating the sum of absolute differences (SAD) between the reprocessed image and a non-reprocessed capture. If swapping the output U and V planes of the reprocessed capture results in an increased SAD, then the output is assumed to have the correct U and V planes.

APIs tested:

Pass: The U and V planes aren't swapped.

test_reprocess_uv_swap

test_reprocess_uv_swap.png

scene2_b

test_num_faces

Tests face detection with increased skin tone diversity in face scenes.

APIs tested:

Pass: Finds 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Captures two images using the largest common YUV and JPEG formats with the same aspect ratio as the largest JPEG format not exceeding a resolution of 1920x1440. Sets jpeg.quality to 100 and captures a dual surface request. Converts both images to RGB arrays and calculates the 3D root mean square (RMS) difference between the two images.

In addition, this test verifies that the YUV outputs for all supported stream use cases are reasonably similar to the YUV with the STILL_CAPTURE use case.

APIs tested:

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:

Pass: Finds 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

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 < 1000ms 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_num_faces

Tests face detection with increased skin tone diversity in face scenes.

APIs tested:

Pass: Finds 3 faces.

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:

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:

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.

scene2_f.png

scene2_f

test_num_faces

Tests face detection with increased skin tone diversity in face scenes.

APIs tested:

Pass: Finds 3 faces.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

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

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (fast mode)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (high quality mode)

test_flip_mirror

Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .

Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.

Pass: Image isn't flipped, mirrored or rotated.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_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:

Проходить:

  • The drift of the gyro is less than 0.01 rad over the test time.
  • The variance of the gyro 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 gyro is less than 1 degree per second.

test_imu_drift_gyro_drift.png

test_imu_drift_gyro_drift.png

test_imu_drift_rotation_vector_drift.png

test_imu_drift_rotation_vector_drift.png

test_landscape_to_portrait

Tests if the landscape to portrait override functions correctly for landscape-oriented sensors.

APIs tested:

Pass: The test is able to locate a chart with the expected rotation (0 degrees when the landscape to portrait override is disabled, 90 degrees when enabled).

test_landscape_to_portrait

test_landscape_to_portrait.png

test_lens_movement_reporting

Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilizes as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first few frames with the lens stationary at optimum focal distance, and the final few frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.

APIs tested:

Pass: Lens movement flag is True in the frame with sharpness change.

Fail mechanisms:

  • lens_moving: True ( android.hardware.camera2.CaptureResult#LENS_STATE = 1) in test_log.DEBUG is asserted only in frames where sharpness isn't changing.
  • Frames with lens_moving: False ( android.hardware.camera2.CaptureResult#LENS_STATE = 0) in test_log.DEBUG has a sharpness difference compared to the first few frames at optimum focal distance or the last few frames at minimum focus distance.

test_reprocess_edge_enhancement

Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.

APIs tested:

Pass: Sharpness for the different edge modes is correct. HQ (mode 2) is sharper than OFF (mode 0), and improvement between different modes is similar.

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 consists of a black circle on a white background inside a square. Tests in scene4 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.

scene4

scene4

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 ensure 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:

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:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

Fail mechanisms:

  • The 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.
  • Lower resolution image is double cropped in the image pipeline creating different FoV between high and low resolution images.
  • The circle in the captured image is cropped due to an extreme aspect ratio capture request reducing the height or width of the image.
  • The circle in the captured image has a reflection in the center and doesn't appear fully filled.

test_multi_camera_alignment

Tests the camera calibration parameters related to camera positioning for multi-camera systems. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.

APIs tested:

Pass: Circle centers and sizes are as expected in projected images compared to captured images using camera calibration data and focal lengths.

Fail mechanisms:

  • LENS_INTRINSIC_CALIBRATION , LENS_POSE_TRANSLATION , or LENS_POSE_ROTATION are design values and not actual calibration data.
  • The camera system isn't appropriate for the test setup. For example, testing a wide and an ultra-wide camera system with the RFoV test rig. For more information, see Camera ITS-in-a-box FAQ1 .

test_preview_aspect_ratio_and_crop

Similar to the test_aspect_ratio_and_crop test for still captures, this test checks the supported preview formats to ensure the preview frames aren't stretched or cropped inappropriately. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center of the frame, and the circle size doesn't change for a constant format or with different resolutions (field of view check).

APIs tested:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

test_preview_stabilization_fov

Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON , and another with preview stabilization OFF . A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.

APIs tested:

Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%.

test_video_aspect_ratio_and_crop

Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

scene5

Scene5 requires a uniformly lit gray scene. This is accomplished by a diffuser placed over the camera lens. We recommend the following diffuser: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168 .

To prepare the scene, attach a diffuser in front of the camera and point the camera to a lighting source of around 2000 lux. Images captured for scene5 require diffuse lighting with no features evident. The following is a sample image:

scene5

scene5 capture

test_lens_shading_and_color_uniformity

Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.

APIs tested:

Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.

scene6

Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range. 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.

scene6

scene6

test_in_sensor_zoom

Tests the behavior of the camera in-sensor zoom feature, which produces cropped RAW images.

With the stream use case set to CROPPED_RAW , the test takes two captures over the zoom range, a full field of view (FoV) RAW image and a cropped RAW image. The test converts the images to RGB arrays, downscales the full-sized cropped RAW image to the size reported by SCALER_RAW_CROP_REGION , and calculates the 3D root mean square (RMS) difference between the two images.

APIs tested:

Pass: The 3D root mean square (RMS) difference between the downscaled cropped RAW image and the full FoV RAW image is less than 1%.

test_zoom

Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in. For each format (YUV, JPEG), the same camera capture session is used to converge 3A and take captures.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

test_zoom to find the contour of the circle closest to the center.

test_low_latency_zoom

Tests the camera low latency zoom behavior. Takes captures over the zoom range with android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) , and checks if the circles in the output images match the zoom ratios in the capture metadata. The same camera capture session is used to converge 3A and take captures.

APIs tested:

Pass: Relative size of captured circle is accurate against the zoom ratio result metadata.

test_preview_video_zoom_match

Tests that while recording and zooming, video preview and video output display and record the same output. Calculates the size of the circle closest to the center at different zoom ratios and checks whether the size of the circle increases as the zoom ratio increases.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio in video and preview.

VGA_640x480_key_frame.png

VGA_640x480_key_frame.png (before zoom)

preview_640x480_key_frame.png

preview_640x480_key_frame.png (before zoom)

VGA_640x480_key_frame_zoomed.png

VGA_640x480_key_frame.png (after zoom)

preview_640x480_key_frame_zoomed.png

preview_640x480_key_frame.png (after zoom)

test_preview_zoom

Tests that the zoom ratio of each preview frame matches the corresponding capture metadata. The test takes preview frames over the zoom range and finds the contour of the circle closest to the center. The test then checks that the selected circle gets bigger and that the center of the circle moves away from the center of the image as the camera zooms in.

APIs tested:

Pass: The relative size of the selected circle is accurate for the reported zoom ratio of the corresponding capture result for all of the preview frames. The relative distance of the selected circle from the center of the image is accurate for the reported zoom ratio of the corresponding capture result of all the preview frames.

test_zoom

test_preview_zoom images showing selected circle 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:

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.

scene7

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 ensures that the luma change is within the expected range for both UW and W lens images. The AWB check verifies that the ratios of R/G and B/G 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.

APIs tested:

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 UW and W lens images must be less than 0.5%.
  • AWB check: The difference between the R/G and B/G values for the UW and W lens images must be less than 0.5%.
  • AF check: The image sharpness change between the UW and W lens images must be less than 2%.

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.

scene8

scene8

test_ae_awb_regions

Tests that the RGB and luma values differ when preview recording at different auto exposure (AE) and auto white balance (AWB) regions.

The test records an eight second preview recording, performing AE and AWB metering on each quadrant for two 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:

Pass: The AE and AWB checks both pass.

scene9

Scene9 consists of thousands of randomly sized and colored circles to create a scene with very low repeatability to stress JPEG compression algorithms.

scene9

scene9

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 ensure the scene displayed on the tablet fills the camera field of view.

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 ensures Quantization Tables change correctly.

APIs tested:

Pass: Quantization matrix decreases with quality increase. (Matrix represents the division factor.)

test_jpeg_quality

Pixel 4 rear camera luma/chroma DQT matrix averages vs JPEG quality

test_jpeg_quality failed

Failed test example

Note that for very low quality images (jpeg.quality < 50), there is no increase in compression in the quantization matrix.

scene_video

The scene_video scene is a video scene. It consists of four different colored circles moving back and forth at different frame rates against a white background.

scene_video

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:

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.

scene_hdr

scene_hdr

test_hdr_extension

Tests the HDR extension . Takes captures with and without the extension enabled, and checks if the extension makes the QR code more detectable.

APIs tested:

Pass: The HDR extension reduces the number of contrast changes needed to detect the QR code or reduces the gradient across the QR code.

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

scene_low_light

scene_low_light

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.

APIs tested:

Pass: The average luma value of the first 6 squares must be at least 90, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 18.

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.

APIs tested:

Pass: The average luma value of the first 6 squares must be at least 90, and the average difference in luma value of consecutive squares up to squares 5 and 6 must be at least 18.

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:

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:

Проходить:

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 R/G and B/G ratios and verifies whether the ratios are within 0.95 and 1.05.

APIs tested:

Pass: The R/G and B/G ratios are within 0.95 and 1.05. The flash image mean is within the (68, 102) range.

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:

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:

Проходить:

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, ensure 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 17"x17" (43x43 cm). The sensor_fusion tests can be automated with the Sensor Fusion Box .

Sensor fusion chart

Sensor fusion chart

Sensor fusion chart in Rig

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 optical image stabilization (OIS).

APIs tested:

Pass: The optical center of the lens intrinsic changes by one pixel or more. If lens intrinsic samples are supported, the optical centers of the lens intrinsic samples change by one pixel or more.

test_lens_intrinsic_calibration_example.png

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:

Pass: Angle between images from each camera doesn't change appreciably as 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 root mean square (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.

test_preview_distortion_example.jpg

Image of checkerboard with ideal points as green and actual points as red

APIs tested:

Pass: The normalized distortion error of each preview frame is less than 0.1.

test_preview_stabilization

Tests that stabilized preview video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

test_sensor_fusion

Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME parameter is not enabled.

The test_sensor_fusion test generates a number of plots. The two most important plots for debugging are:

  • test_sensor_fusion_gyro_events : Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations : Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

APIs tested:

Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .

Fail mechanisms:

  • Offset error: The camera-gyroscope offset isn't correctly calibrated to within +/-1 ms.
  • Frame drops: The pipeline isn't fast enough to capture 200 frames consecutively.
  • Socket errors: adb can't reliably connect to the DUT long enough to execute the test.
  • The chart isn't mounted flat. The plot test_sensor_fusion_plot_rotations has frames where the gyroscope and camera rotation vary considerably as the camera rotates through the parts of the chart that aren't flat.
  • The camera isn't mounted flat. The plot test_sensor_fusion_gyro_events shows movement in the X and Y planes. This failure is more common in front-facing cameras as the rear camera often has a raised bump to the rest of the phone body, creating a tilt when mounting the rear of the phone to the mounting plate.

test_video_stabilization

Tests that stabilized video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

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, preview stabilization, target FPS range, 10-bit HDR video, and Ultra HDR that are supported by the camera device. This test is very memory intensive, so we recommend using a host with at least 128 GB of RAM.

For Android 15 and higher, the configuration file includes a log_feature_combo_support field, which defaults to False . When the log_feature_combo_support field is set to True , the test runs all combinations of supported features, and logs the results into a proto file without failing the test. For compliance testing, the log_feature_combo_support field must be set to False .

APIs tested:

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.