В этом документе перечислены все тесты, доступные для оценки уровня аппаратной абстракции камеры 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):
- Интерфейс и спецификация камеры 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, а также ссылки на соответствующие инструкции ниже:
- Vendor Test Suite (VTS) : тесты, которые напрямую тестируют интерфейс HAL камеры.
- Набор тестов совместимости (CTS) : стандартные автоматизированные тесты Android для обеспечения совместимости устройств — см. введение CTS и обзор Торговой федерации .
- Image Test Suite (ITS) : запустите тесты вручную, чтобы убедиться в правильности изображения. Инструкции по настройке см. в файлах
README
верхнего уровня и для конкретных тестов, а также вtutorial.py
. - Ручные тесты TestingCam : запустите из исходного кода в
pdk/apps/TestingCamera/
- Ручные тесты TestingCam2.1 : запустить из исходного кода в
pdk/apps/TestingCamera2/
Все эти типы тестов подробно описаны ниже. Эти тесты представлены в хронологическом порядке, в котором 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 . Изображение, которое появляется справа от изображения в видоискателе, должно выглядеть так же, как и изображение в видоискателе, в том числе иметь ту же ориентацию.