Тестовая камера HAL

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

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

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

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

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

Типы тестов камеры

Ниже приведены основные типы тестов, доступные для новейшей камеры 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-веб-камеры), необходимо подключить устройство, иначе тест автоматически завершится неудачей. Примеры внешних камер: 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 на рабочей станции с подключенным по USB устройством Android.

Инфраструктура и тесты 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 , а затем установить полученный файл .apk с помощью adb. Примеры команд приведены ниже.

Начальный путь для тестов медиа-фреймворка, связанного с камерой: 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 аргумент, например такой:

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 . Изображение справа от изображения в видоискателе должно выглядеть так же, как в видоискателе, включая ту же ориентацию.