На этой странице перечислены все доступные тесты для оценки уровня абстракции оборудования камеры 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):
- Интерфейс и спецификация камеры HAL 3.x :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Спецификация метаданных камеры HAL 3.x :
system/media/camera/docs/docs.html
- Интерфейс и спецификация формата пикселей HAL :
system/core/libsystem/include/system/graphics.h
Типы испытаний камеры
Ниже приведены основные типы тестов, доступные для новейшей камеры Android, а также ссылки на соответствующие инструкции:
- Набор тестов поставщика (VTS) : тесты, которые напрямую проверяют интерфейс HAL камеры
- Compatibility Test Suite (CTS) : стандартные автоматизированные тесты Android для обеспечения совместимости устройств. Для получения более подробной информации см. Compatibility Test Suite и Trade Federation Overview .
- Image Test Suite (ITS) : Ручной запуск тестов для обеспечения корректности изображения. Для получения более подробной информации см. Camera ITS .
- Ручные тесты TestingCam : запускаются из исходного кода в
pdk/apps/TestingCamera/
- Ручные тесты TestingCam2.1 : запуск из исходного кода в
pdk/apps/TestingCamera2/
Все эти типы испытаний подробно описаны ниже. Эти испытания представлены в хронологическом порядке, в котором 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
).
Например:
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 . Изображение, которое появляется справа от изображения в видоискателе, должно выглядеть так же, как и в видоискателе, включая ту же ориентацию.