Camera HAL 测试清单

此页面列出了所有可用于评估 Android 相机硬件抽象层 (HAL) 的测试。它面向原始设备制造商 (OEM) 和应用处理器 (AP) 供应商,旨在帮助他们确保相机 HAL 的正确实现并尽可能减少缺陷。虽然这是对 Android 兼容性测试套件 (CTS) 的自愿补充,但它可以大大提高相机测试覆盖率,并且肯定会发现潜在的错误。

通过这些测试,OEM 可以验证他们是否正确集成了 Android 相机硬件抽象层 (HAL) 3 接口。如果设备实现符合清单中的所有项,则可以认为该实现就 Android Camera HAL 接口而言是完整的。这将反过来使设备能够正确支持相机应用构建于其上的 android.hardware.camera2 软件包。

Camera HAL3 规范

Android Camera HAL3 规范是关于设备必须满足哪些要求的权威信息来源;此页面总结了可用作清单的所有测试。Camera HAL 实现者(例如 AP 供应商)应逐行阅读 Camera 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 验证程序相机测试

在以下位置查找这些相机测试:cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

图像测试套件 (ITS) 测试

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

Camera ITS 基础架构和测试位于 cts/apps/CameraITS 目录中。每个测试都位于 tests/scene# 子目录中。

如需详细了解如何设置和运行测试,请参阅 Camera ITS

如需场景和测试说明,请参阅 Camera 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/

运行媒体框架测试

要查看所有可用的测试,请执行以下操作:

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) 和测试运行程序名称 (MediaFrameworkTestRunner) 组成。

例如

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 软件包 + 类名称,但 Instrumentation 软件包不一定与 Java 软件包相同。在连接组件名称时,请确保使用 AndroidManifest.xml 软件包,而不是测试运行程序类所在的 Java 软件包。

要运行单个测试类,请传递 -e class参数,如下所示

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 应用,并执行以下检查。TestingCam 的源代码位于此处:pdk/apps/TestingCamera/

具有相机倾斜的无限远对焦

启动 TestingCam,开启预览,并确保自动对焦模式设置为无限远。使用拍照按钮,在相机水平、向上(接近垂直)和向下(接近垂直)指向时拍摄远处物体(至少 10 米远)的快照;向上拍摄的示例可以是树木下方的高树叶/树枝,向下拍摄的示例可以是从建筑物屋顶看到的街道。在所有情况下,远处物体都应清晰对焦。在图库视图中保存和查看快照,以便您可以放大并更轻松地检查清晰度。

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

手动 TestingCam2 测试

应手动运行 TestingCam2 应用,并执行以下检查。TestingCam2 的源代码位于此处:pdk/apps/TestingCamera2/

JPEG 拍摄

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