Контрольный список тестирования камеры HAL

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

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

Вот основные типы тестов, доступные для последней камеры Android, а также ссылки на соответствующие инструкции ниже:

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