На этой странице перечислены все тесты, доступные для оценки уровня абстракции оборудования камеры 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 (PDK) Android 5.0 и более поздних версий:
- Интерфейс и характеристики камеры 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 для обеспечения совместимости устройств. Дополнительные сведения см. в разделах «Набор тестов совместимости» и «Обзор торговой федерации» .
- Image Test Suite (ITS) : запуск тестов вручную для проверки правильности изображения. Более подробную информацию см. в разделе Camera ITS .
- Ручные тесты TestingCam : запустите из исходного кода в
pdk/apps/TestingCamera/
- Ручные тесты TestingCam2.1 : запустите из исходного кода в
pdk/apps/TestingCamera2/
Все эти типы испытаний подробно описаны ниже. Эти тесты представлены в хронологическом порядке, в котором OEM-производители должны их выполнять.
Например, если устройство не проходит собственные тесты, оно обязательно не пройдет и последующие тесты набора тестов совместимости (CTS). А если устройство не проходит CTS, переход к Image Test Suite (ITS) бесполезен. Мы рекомендуем устранить сбои в каждом типе тестов, прежде чем переходить к следующему набору тестов.
Тесты Vendor Test Suite (VTS)
Android Vendor Test Suite (VTS) — это набор тестов, который работает на уровне интерфейса HIDL. Дополнительную информацию об использовании VTS см. в разделе Vendor Test Suite .
Тесты набора тестов совместимости (CTS)
Тесты пакета тестов совместимости Android (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 tests/scene #
.
Дополнительную информацию о настройке и запуске тестов см. в разделе Camera ITS .
Описания сцен и испытаний см. в разделе «Тесты 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 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
Все тесты должны пройти.
Ручные тесты TestingCam
Приложение TestingCam следует запустить вручную, выполнив следующие проверки. Исходный код TestingCam находится здесь: pdk/apps/TestingCamera/
Бесконечный фокус с наклоном камеры
Запустите TestingCam, включите предварительный просмотр и убедитесь, что режим автофокусировки установлен на бесконечность. Используя кнопку «Сделать снимок» , сделайте снимки удаленных объектов (на расстоянии не менее 10 м), направляя камеру горизонтально, вверх (близко к вертикали) и вниз (близко к вертикали); примером кадра вверх могут быть высокие листья/ветви дерева снизу, а примером кадра вниз — улица, вид с крыши здания. В любом случае удаленный объект должен быть резким и в фокусе. Сохраняйте и просматривайте снимки в галерее, чтобы можно было увеличивать масштаб и легче проверять резкость.
Обратите внимание, что для того, чтобы камера с приводом VCM прошла этот тест, ей потребуется либо система управления автофокусировкой с обратной связью, либо какая-то коррекция программного обеспечения, основанная на использовании данных акселерометра для определения ориентации камеры. Также потребуется надежная заводская калибровка положения бесконечности объектива.
Ручные тесты TestingCam2
Приложение TestingCam2 следует запустить вручную, выполнив следующие проверки. Исходный код TestingCam2 находится здесь: pdk/apps/TestingCamera2/
Захват JPEG
Запустите TestingCam2 и нажмите кнопку JPEG . Изображение, которое появляется справа от изображения в видоискателе, должно выглядеть так же, как видоискатель, в том числе иметь ту же ориентацию.