Контрольный список тестирования HAL камеры

В этом документе перечислены все тесты, доступные для оценки уровня аппаратной абстракции камеры Android (HAL). Он предназначен для производителей оригинального оборудования (OEM) и поставщиков процессоров приложений (AP), чтобы они могли обеспечить правильную реализацию камеры HAL с минимальным количеством дефектов. Хотя это добровольное дополнение к набору тестов на совместимость с Android (CTS), оно значительно увеличивает охват тестирования камеры и, безусловно, выявляет потенциальные ошибки.

Проходя эти тесты, OEM-производители проверяют, правильно ли они интегрировали интерфейсы уровня аппаратной абстракции камеры Android (HAL) 3. При соответствии всем элементам контрольного списка реализация устройства может считаться полной в отношении интерфейсов Android Camera HAL. Это, в свою очередь, позволит устройству правильно поддерживать пакет android.hardware.camera2 , на котором основаны приложения камеры.

Спецификация камеры HAL3

Спецификация Android Camera HAL3 является авторитетным источником информации о том, какие устройства должны удовлетворять; на этой странице представлена ​​сводка всех тестов, которые можно использовать в качестве контрольного списка. Разработчики Camera HAL (например, поставщики точек доступа) должны последовательно изучить спецификацию Camera HAL3 и убедиться, что их устройства соответствуют ей.

Текущая спецификация HAL определяется в этих файлах в Android 5.0 и более поздних версиях общего комплекта разработки платформы Android (PDK):

Типы тестов камеры

Вот основные типы тестов, доступных для последней версии камеры Android, а также ссылки на соответствующие инструкции ниже:

Все эти типы тестов подробно описаны ниже. Эти тесты представлены в хронологическом порядке, в котором OEM-производители должны их выполнять.

Например, если устройство не проходит собственные тесты, оно обязательно не пройдет последующие тесты Compatibility Test Suite (CTS). И если устройство не проходит тест CTS, переход к Image Test Suite (ITS) бесполезен. Мы рекомендуем устранять сбои в каждом типе тестов, прежде чем переходить к следующему набору тестов.

Тесты Vendor Test Suite (VTS)

Android Vendor Test Suite (VTS) — это набор для тестирования, который работает на уровне интерфейса HIDL. Дополнительные сведения об использовании VTS см. в разделе Vendor Test Suite .

Тесты набора тестов совместимости (CTS)

Тесты Camera Android Compatibility Test Suite (CTS) сосредоточены на совместимости устройств. Сведения о настройке тестовой среды см. в разделе Настройка CTS .

Начальный путь для тестов камеры CTS: platform/cts .

При запуске CTS камеры для устройств, поддерживающих внешние камеры (например, веб-камеры USB), вы должны иметь подключенное устройство при запуске CTS, иначе тесты автоматически завершатся ошибкой. Примеры внешних камер: Logitech HD Pro Webcam C920 и Microsoft LifeCam HD-3000 .

См. введение в CTS и его подстраницы для получения общих инструкций по запуску CTS.

Тесты CTS для android.hardware.Camera API

Найдите эти тесты камеры в cts/tests/tests/ :

  • hardware/src/android/hardware/cts/CameraTest.java
  • hardware/src/android/hardware/cts/CameraGLTest.java
  • hardware/src/android/hardware/cts/Camera_SizeTest.java
  • permission/src/android/permission/cts/CameraPermissionTest.java

Тесты CTS для API android.hardware.camera2

Найдите эти тесты камеры в cts/tests/tests/ :

  • hardware/src/android/hardware/camera2/cts/*
  • permission/src/android/permission/cts/Camera2PermissionTest.java

Тесты камеры CTS Verifier

Найдите эти тесты камеры в: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Тесты Image Test Suite (ITS)

Тесты Camera Image Test Suite (ITS) сосредоточены на правильности изображения. Чтобы выполнить тесты, запустите сценарии Python на рабочей станции с устройством Android, подключенным через USB.

Инфраструктура Camera ITS и тесты расположены в каталоге cts/apps/CameraITS . Каждый тест находится в подкаталоге tests/scene # .

Чтобы настроить тестовую среду, запустите:
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh

Дополнительные сведения о настройке и запуске тестов см. в PDF-файле CameraITS в папке cts/apps/CameraITS . См. tutorial.py в подкаталоге tests , чтобы узнать, как использовать скрипты.

Для тестов ITS требуется среда Linux. Подробную информацию о конкретных версиях Python, необходимых для запуска тестов ITS, см. в PDF-файле CameraITS для выпуска или в примечаниях к выпуску Android 12 для Android 12.

Рекомендуемая настройка для статических сцен описана в разделе Camera ITS-in-a-box . Рекомендуемая настройка для сцены sensor_fusion описана в Руководстве по быстрому запуску Sensor Fusion Box .

Чтобы запустить ИТС вручную, подготовьте простую физическую среду с определенной многократно используемой целью, такой как белая стена, серая карта и настольная лампа. Установите Android-устройство на штатив и запустите сценарии для проверки функций камеры. Большинство тестов проходят или не проходят, но некоторые предлагают метрики.

Эти сценарии тестируют сценарии, которые не тестируются в CTS, и являются важным компонентом плана тестирования HAL 3.2.

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

Описание сцен и тестов см. в разделе ITS-тесты камеры .

Медиафреймворковые тесты

Пройдите все мультимедийные тесты, связанные с камерой, в MediaFrameworkTest. Обратите внимание, что для этих тестов требуется, чтобы на устройстве Android был установлен файл mediaframeworktest.apk. Вам нужно будет make mediaframeworktest а затем использовать adb для установки полученного .apk. Примеры команд приведены ниже.

Начальный путь для тестов медиафреймворка, связанного с камерой, следующий: platform/frameworks/base .

Исходный код тестов можно найти здесь: frameworks/base/media/tests/MediaFrameworkTest

Чтобы настроить эти тесты:

make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk

Где переменная name представляет каталог, содержащий продукт поставщика.

Найдите все тесты в следующем каталоге или его подкаталогах:

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest

Каждый подкаталог представляет собой класс тестов:

  • functional/
  • integration/
  • performance/
  • power/
  • stress/
  • unit/

Запуск тестов Media Framework

Чтобы увидеть все доступные тесты:

adb shell pm list instrumentation

Это даст результаты, похожие на:

instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
(target=com.android.mediaframeworktest)

Определите и извлеките компонент (между instrumentation: и (target=com.android.mediaframeworktest) из каждой тестовой строки. Компонент состоит из имени целевого пакета ( com.android.mediaframeworktest ) и имени исполнителя теста ( MediaFramework TestRunner MediaFramework TestRunner ).

Например:

com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner

Затем вы можете передать каждый компонент adb shell am instrument следующим образом:

adb shell am instrument -w component.name

Где component.name равно извлеченному значению выше. Например:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Обратите внимание, что хотя путь к классу — это пакет Java + имя класса, пакет инструментария не обязательно совпадает с пакетом Java. Убедитесь, что вы используете пакет AndroidManifest.xml при объединении имени компонента, а не пакет Java, в котором находится класс исполнителя тестов.

Чтобы запустить один класс тестов, передайте класс -e аргумент, например:

adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Чтобы запустить только один метод в тестовом классе, добавьте знак решетки (#) и имя метода (в данном случае testConnectPro ) к имени класса, например:

adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Функциональные тесты настроек мультимедиа

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

Запустите тестовую команду:

adb shell am instrument -w -r  -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner

Медиа-интеграционные тесты

Вот пример запуска интеграционного теста, в данном случае mediaframeworktest/integration/CameraBinderTest.java и mediaframeworktest/CameraStressTestRunner.java:

adb  shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'

В случае успеха это приводит к выводу, похожему на:

-----

com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328

OK (11 tests)

-----

Тесты производительности мультимедиа

Этот предварительный тест памяти откроется и выпустит предварительный просмотр камеры 200 раз. В каждых 20 итерациях будет записываться моментальный снимок ps mediaserver, и он будет сравнивать использование памяти после 200 итераций. Тест не пройден, если разница превышает 150 км.

Запустите тестовую команду:

adb shell am instrument -w -r  -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner

Более подробный вывод можно найти в: /sdcard/mediaMemOutput.txt

Медиа модульные тесты

Все команды для запуска модульных тестов похожи. Например, для CameraMetadataTest.java команда будет выглядеть так:

adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'

Стресс-тесты СМИ

Этот тест предназначен для проверки захвата изображения камерой и записи видео.

Запустите тестовую команду:

adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner

Все тесты должны пройти.

Ручное тестированиеCam тесты

Приложение TestingCam следует запускать вручную с выполнением следующих проверок. Исходный код TestingCam находится здесь: pdk/apps/TestingCamera/

Бесконечный фокус с наклоном камеры

Запустите TestingCam, включите предварительный просмотр и убедитесь, что режим автофокуса установлен на бесконечность. Используя кнопку « Сделать снимок », делайте снимки удаленных объектов (на расстоянии не менее 10 м), направляя камеру горизонтально, вверх (близко к вертикали) и вниз (близко к вертикали); примером съемки вверх могут быть высокие листья/ветви дерева снизу, а примером съемки вниз может быть улица, видимая с крыши здания. Во всех случаях удаленный объект должен быть резким и в фокусе. Сохраняйте и просматривайте снимки в представлении галереи, чтобы вам было легче увеличивать масштаб и проверять резкость.

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

Ручное тестированиеТесты Cam2

Приложение TestingCam2 следует запустить вручную, выполнив следующие проверки. Исходный код TestingCam2 находится здесь: pdk/apps/TestingCamera2/

Захват в формате JPEG

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