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

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

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

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

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

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

Типы испытаний камеры

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

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

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

Тесты набора тестов поставщика (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 для API android.hardware.Camera

Эти тесты камер можно найти в разделе 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 # .

Дополнительную информацию о настройке и проведении тестов см. в разделе Camera ITS .

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

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

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

Тесты Media Framework

Пройдите все тесты медиа, связанные с камерой, в 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 ).

Например:

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 class аргумент, например, такой:

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 итераций. Тест не будет пройден, если разница превысит 150kM.

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

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 прошла этот тест, ей потребуется либо замкнутая система управления АФ, либо какая-то SW-коррекция, основанная на использовании данных акселерометра для определения ориентации камеры. Также потребуется надежная заводская калибровка положения бесконечности объектива.

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

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

JPEG-захват

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