На этой странице перечислены все доступные тесты для оценки уровня аппаратной абстракции камеры Android (HAL). Она предназначена для производителей оригинального оборудования (OEM) и поставщиков процессоров приложений (AP), чтобы они могли обеспечить правильную реализацию HAL камеры с минимальным количеством дефектов. Хотя это добровольное дополнение к набору тестов совместимости Android (CTS), оно значительно расширяет охват тестирования камеры и, безусловно, позволит выявить потенциальные ошибки.
Пройдя эти тесты, производители оборудования подтверждают, что они правильно интегрировали интерфейсы уровня аппаратной абстракции камеры Android (HAL) 3. При соблюдении всех пунктов контрольного списка реализация устройства может считаться полной в отношении интерфейсов HAL камеры Android. Это, в свою очередь, позволит устройству корректно поддерживать пакет android.hardware.camera2 , на основе которого создаются приложения камеры.
Спецификация камеры HAL3
Спецификация Android Camera HAL3 является авторитетным источником информации о том, каким требованиям должны соответствовать устройства; на этой странице представлено краткое описание всех тестов, которое можно использовать в качестве контрольного списка. Разработчики Camera HAL (например, производители точек доступа) должны построчно изучить спецификацию Camera HAL3 и убедиться, что их устройства ей соответствуют.
Текущая спецификация HAL определена в этих файлах в составе универсального комплекта разработки платформы Android (PDK) для Android 5.0 и более поздних версий:
- Интерфейс и спецификация Camera HAL 3.x :
hardware/libhardware/include/hardware/camera3.h,hardware/libhardware/include/hardware/camera_common.h - Спецификация метаданных Camera 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 для обеспечения совместимости устройств. Для получения более подробной информации см. разделы «Набор тестов на совместимость» и «Обзор торговой федерации» .
- Набор тестов изображений (ITS) : запускает тесты вручную для обеспечения корректности изображения. Для получения более подробной информации см. Camera ITS .
- Тестирование камеры вручную : запустите из исходного кода в
pdk/apps/TestingCamera/ - Тестирование Cam2.1 вручную : запустите из исходного кода в
pdk/apps/TestingCamera2/
Все эти типы испытаний подробно описаны ниже. Испытания представлены в хронологическом порядке, в котором производители оригинального оборудования (OEM) должны их выполнять.
Например, если устройство не проходит собственные тесты, оно наверняка не пройдет и последующие тесты набора тестов совместимости (CTS). А если устройство не проходит CTS, нет смысла переходить к набору тестов образов (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-веб-камеры), необходимо, чтобы устройство было подключено к компьютеру, иначе тесты автоматически завершатся неудачей. Примеры внешних камер: Logitech HD Pro Webcam C920 и Microsoft LifeCam HD-3000 .
Общие инструкции по работе с 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 на рабочей станции с подключенным через USB устройством Android.
Инфраструктура и тесты Camera ITS расположены в каталоге cts/apps/CameraITS . Каждый тест находится в подкаталоге tests/scene # .
Для получения дополнительной информации о настройке и запуске тестов см. Camera ITS .
Описание сцен и тестов см. в разделе «Тесты Camera ITS» .
Тесты ITS либо проходят, либо не проходят. Все обязательные тесты в каждой папке сцены должны пройти успешно. Тесты, не являющиеся обязательными, могут не пройти, но при этом считаться пройденными в CtsVerifier .
Тесты ITS проверяют сценарии, которые не тестируются в CTS и являются важной составляющей плана тестирования HAL 3.2.
Тесты медиафреймворка
Пройдите все тесты, связанные с камерой, в MediaFrameworkTest. Обратите внимание, что для этих тестов требуется установленный на устройстве Android файл mediaframeworktest.apk. Вам нужно будет make mediaframeworktest , а затем использовать adb для установки полученного файла .apk. Примеры команд приведены ниже.
Начальный путь для тестов медиафреймворка, связанного с камерой, следующий: platform/frameworks/base
Исходный код тестов можно найти здесь: frameworks/base/media/tests/MediaFrameworkTest
Для настройки этих тестов:
make mediaframeworktestadb 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 итераций. Тест завершится неудачей, если разница превысит 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
Все тесты должны быть пройдены успешно.
Ручное тестирование. Тесты камеры.
Приложение TestingCam следует запускать вручную, выполнив следующие проверки. Исходный код TestingCam находится здесь: pdk/apps/TestingCamera/
Бесконечная фокусировка с возможностью наклона камеры
Запустите TestingCam, включите предварительный просмотр и убедитесь, что режим автофокусировки установлен на бесконечность. С помощью кнопки «Сделать снимок» сделайте снимки удаленных объектов (на расстоянии не менее 10 м), направив камеру горизонтально, вверх (почти вертикально) и вниз (почти вертикально); например, при съемке вверх можно увидеть листья/ветки дерева снизу, а при съемке вниз — улицу, снятую с крыши здания. Во всех случаях удаленный объект должен быть резким и в фокусе. Сохраните и просмотрите снимки в галерее, чтобы можно было увеличить изображение и легче оценить резкость.
Обратите внимание, что для прохождения этого теста камере с приводом VCM потребуется либо система управления автофокусировкой с обратной связью, либо программная коррекция, основанная на данных акселерометра для определения ориентации камеры. Также потребуется надежная заводская калибровка положения объектива на бесконечность.
Ручное тестирование. Тесты Cam2.
Приложение TestingCam2 следует запускать вручную, выполнив следующие проверки. Исходный код TestingCam2 находится здесь: pdk/apps/TestingCamera2/
захват JPEG
Запустите TestingCam2 и нажмите кнопку JPEG . Изображение, которое появится справа от изображения в видоискателе, должно совпадать с изображением в видоискателе, включая ту же ориентацию.