相机 HAL 测试清单

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本文档列出了可用于评估 Android 相机硬件抽象层 (HAL) 的所有测试。它适用于原始设备制造商 (OEM) 和应用处理器 (AP) 供应商,因此他们可以确保正确实施相机 HAL,并将缺陷降至最低。尽管这是对 Android 兼容性测试套件 (CTS) 的自愿添加,但它大大增加了相机测试覆盖率,并且肯定会发现潜在的错误。

通过这些测试,OEM 可以验证他们是否正确集成了 Android 相机硬件抽象层 (HAL) 3 接口。当符合清单中的所有项目时,设备实现可能被认为是完整的 Android 相机 HAL 接口。这反过来将使设备能够正确支持相机应用程序构建的android.hardware.camera2包。

相机 HAL3 规范

Android Camera HAL3规范是有关设备必须满足哪些信息的权威信息源;此页面提供了可用作检查表的所有测试的摘要。相机 HAL 实施者(例如 AP 供应商)应逐行检查相机 HAL3 规范,并确保其设备符合该规范。

当前的 HAL 规范在 Android 5.0 及更高版本的通用 Android 平台开发工具包 (PDK) 中的这些文件中定义:

相机测试类型

以下是可用于最新 Android 摄像头的主要测试类型以及对以下相关说明的参考:

所有这些测试类型都在下面详细描述。这些测试按 OEM 预计执行它们的时间顺序呈现。

例如,如果设备未通过本机测试,它肯定会通过后续的兼容性测试套件 (CTS) 测试。如果设备未能通过 CTS,则继续执行图像测试套件 (ITS) 几乎没有用处。我们建议在进行下一组测试之前解决每种测试类型中的故障。

供应商测试套件 (VTS) 测试

Android 供应商测试套件 (VTS) 是一个适用于 HIDL 接口级别的测试套件。有关使用 VTS 的更多信息,请参阅供应商测试套件

兼容性测试套件 (CTS) 测试

相机 Android 兼容性测试套件 (CTS) 测试侧重于设备兼容性。有关设置测试环境的信息,请参阅设置 CTS

相机 CTS 测试的起始路径是: platform/cts

为支持外接摄像头的设备(如 USB 网络摄像头)运行摄像头 CTS 时,必须在运行 CTS 时插入设备,否则测试将自动失败。外部摄像头的示例包括: Logitech HD Pro Webcam C920Microsoft LifeCam HD-3000

有关运行 CTS 的一般说明,请参阅CTS 介绍及其子页面。

android.hardware.Camera API 的 CTS 测试

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

android.hardware.camera2 API 的 CTS 测试

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/*

图像测试套件 (ITS) 测试

相机图像测试套件 (ITS) 测试侧重于图像正确性。要执行测试,请在通过 USB 连接 Android 设备的工作站上运行 Python 脚本。

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

有关如何设置和运行测试的更多信息,请参阅cts/apps/CameraITS中的CameraITS PDF 文件。有关如何使用脚本的指南,请参阅tests子目录中的tutorial.py

ITS 测试需要 Linux 环境。有关运行 ITS 测试所需的特定 Python 版本的详细信息,请参阅该版本的CameraITS PDF 文件或 Android 12 的Android 12 发行说明

Camera ITS-in-a-box 中描述了静态场景的推荐设置。 Sensor_fusion 场景的推荐设置在Sensor Fusion Box 快速入门指南中进行了描述。

要手动运行 ITS,请准备一个简单的物理环境,其中包含特定的、可重复使用的目标,例如白墙、灰卡和台灯。将 Android 设备安装在三脚架上并运行脚本以测试相机功能。大多数测试通过或失败,但有些提供指标。

这些脚本测试未在 CTS 中测试的场景,是 HAL 3.2 测试计划的重要组成部分。

ITS 测试要么通过,要么失败。每个场景文件夹中的所有强制测试都必须通过。未强制执行的测试可能会失败,但仍算作CtsVerifier中的通过。

有关场景和测试说明,请参阅相机 ITS 测试

媒体框架测试

在 MediaFrameworkTest 中通过所有与相机相关的媒体测试。请注意,这些测试需要在 Android 设备上安装 mediaframeworktest.apk。您需要make mediaframeworktest ,然后使用 adb 安装生成的 .apk。下面包括示例命令。

Camera相关媒体框架测试的起始路径是: 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/

运行媒体框架测试

查看所有可用的测试::

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 次迭代后不同的内存使用情况。如果差异大于 150kM,测试将失败。

运行测试命令:

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,打开预览,并确保自动对焦模式设置为无限远。使用拍照按钮,以水平、向上(接近垂直)和向下(接近垂直)的相机指向远处拍摄对象(至少 10m 外);向上拍摄的一个例子可以是从下面看一棵树的高叶子/树枝,而向下拍摄的一个例子可以是从建筑物屋顶看到的街道。在所有情况下,远处的主体都应该清晰且清晰。在图库视图中保存和查看照片,以便您可以更轻松地放大和检查清晰度。

请注意,对于带有 VCM 执行器的相机要通过此测试,它需要一个闭环 AF 控制系统,或者需要基于使用加速度计数据来确定相机方向的某种 SW 校正。还需要对镜头无限远位置进行可靠的工厂校准。

手动测试Cam2 测试

TestingCam2 应用程序应手动运行,并执行以下检查。 TestingCam2 的来源在这里: pdk/apps/TestingCamera2/

JPEG 捕捉

启动 TestingCam2,然后按下JPEG按钮。出现在取景器图像右侧的图像应与取景器显示相同,包括具有相同的方向。