← 返回课程

CTS认证

Camera全栈开发(Qcom Camx) 第 26 / 30 节

第 24 章:CTS / ITS / 认证测试


本章导读

CTS 和 ITS 是 Android 设备上市必须通过的两套 Google 认证测试。

CTS(Compatibility Test Suite) 测试设备的功能兼容性——Camera HAL 实现是否正确、格式是否支持、帧率是否达标、Metadata 是否正确。CTS 不测试图像质量。

ITS(Image Test Suite) 测试设备的图像质量——颜色准不准、噪声大不大、动态范围够不够。ITS 测试的是"拍出来的照片好不好看"。

这两套测试都在 android.hardware.camera2.cts.*android.hardware.camera2.its.* 中。下面分别讲清楚它们测什么、怎么测、失败了怎么排查。


24.1 CTS——兼容性测试

24.1.1 CTS 是什么

CTS 是 Google 为了保证 Android 设备兼容性而设计的一套自动化测试。通过 CTS 是 Android 设备上市的必要条件。 如果 CTS 不通过,设备无法获得 Google Mobile Services(GMS)授权。

Camera CTS 覆盖的范围:

① 基础功能:     CameraDevice 状态机是否正确
② 格式支持:     YUV_420_888 / JPEG / RAW 的输出格式是否标准
③ 帧率要求:     配置 30fps 时实际帧率需 ≥ 28fps
④ 3A 行为:      AE/AWB/AF 是否在规定帧数内收敛
⑤ Metadata:     CameraCharacteristics 和 CaptureResult 的 key/value 是否正确
⑥ Flush 行为:   Flush 必须在 1000ms 内完成
⑦ 多摄像头:      Logical Camera 的 Physical Camera 切换是否正确
⑧ 资源管理:     多次 open/close 后是否有内存泄漏

24.1.2 Camera CTS 测试项

android.hardware.camera2.cts.*

CameraTest             → 基础功能(open/close/状态转换)
CameraDeviceTest       → CameraDevice 状态机正确性
CaptureRequestTest     → CaptureRequest 参数验证
StillCaptureTest       → 拍照(JPEG 输出分辨率/格式)
VideoCaptureTest       → 录像
MultiCameraTest        → 多摄像头行为
RawCaptureTest         → RAW 传感器输出
YuvCaptureTest         → YUV_420_888 格式验证
ReprocessTest          → 重处理(ZSL/输入 Surface)
CameraExtensionTest    → 相机扩展(Android 12+)
PerformanceTest        → 帧率测试

24.1.3 CTS 测试环境要求

CTS Camera 测试对光照环境有要求:
  - 暗箱或可控光照环境
  - 标准 D65 光源(色温 6500K)
  - 光照强度 300~500 lux
  - 测试图表(ColorChecker、灰卡、解析力图)

如果不在标准环境下测试:
  - AE 可能在暗光下拉长曝光 → 帧率不达标
  - AWB 可能在不同色温下偏色 → 3A 收敛失败
  - AF 可能在低对比度场景下拉风箱 → AF 锁定失败

24.1.4 运行 CTS

# 运行全部 Camera CTS
./cts-tradefed run cts -m CtsCameraTestCases

# 只跑某个测试类
./cts-tradefed run cts -m CtsCameraTestCases \
    -t android.hardware.camera2.cts.StillCaptureTest

# 只跑某个方法
./cts-tradefed run cts -m CtsCameraTestCases \
    -t android.hardware.camera2.cts.StillCaptureTest#testJpegCapture

# 失败后重试
./cts-tradefed run cts --retry <session_id>

24.1.5 高频失败项排查

帧率不达标

测试项: PerformanceTest#testPreviewFpsRange
要求: 配置 30fps,实际 ≥ 28fps

失败日志:
  java.lang.AssertionError: Expected fps >= 28, but got 22.5

排查:
  ① 确认环境光照是否足够(暗光→AE 拉长曝光→帧率下降)
  ② logcat 中查 exposureTime 是否 > 33ms(30fps 的帧间隔)
  ③ 查 ISP 带宽(docker 分辨率降低对比,看帧率是否恢复)

YUV 格式不匹配

测试项: YuvCaptureTest
要求: YUV_420_888 的 Plane/RowStride/PixelStride 符合 Android 规范

失败日志:
  java.lang.AssertionError: Plane[0].rowStride (656) != expected (640)

排查:
  RowStride 和 PixelStride 必须满足:
    Y plane:  rowStride ≥ width
    UV plane: pixelStride = 2(NV12 或 NV21)
    UV plane: rowStride = Y plane 的 rowStride
  查 BufferProperties 中的配置是否正确

3A 不稳定

AE 振荡:  exposureTime 在两个值之间来回跳
AWB 漂移: 色温在连续几帧之间持续变化
AF 拉风箱: actuator 在焦点附近来回移动

排查:
  AE 振荡 → 检查 AE hysteresis(滞回)参数
  AWB 漂移 → 检查 OTP AWB 数据是否正确
  AF 拉风箱 → 检查场景对比度是否足够

Flush 超时

HAL flush() 必须在 1000ms 内完成。

如果超时:
  CameraService 判定 HAL 挂死
  → 强制重启 CameraProvider 进程
  → CTS FAIL

排查:
  dumpsys 查 flush 过程中哪个 Node 卡住了:
    adb shell dumpsys media.camera | grep -A 20 "Pending"

24.2 ITS——图像质量测试

24.2.1 ITS 是什么

ITS 测试的是相机图像质量——和 CTS 不一样,ITS 是基于图像内容的测试。它拍摄特定的测试图表,然后分析图像中的内容来判断质量。

ITS 测试的维度:
  Color Accuracy      → 颜色准确度(通过 ColorChecker)
  Noise               → 噪声水平(通过灰卡)
  Spatial Resolution  → 解析力(通过解析力图)
  Lens Shading        → 亮度均匀性(均匀光照下)
  Distortion          →  镜头畸变
  Dynamic Range       → 动态范围(通过 HDR 测试卡)

24.2.2 ITS 测试项

android.hardware.camera2.its.*

test_color_consistency       → 颜色一致性
test_sensor_noise            → sensor 噪声
test_dynamic_range           → 动态范围
test_lens_shading            → 镜头阴影
test_spatial_resolution      → 解析力
test_distortion              → 镜头畸变
test_rear_camera_arrangement → 后摄排列(多摄)

24.2.3 ITS 测试环境要求

ITS 对环境要求比 CTS 更高:
  - 标准 D65 光源(色温 6500K ± 100K)
  - 光照强度 500 lux
  - X-Rite ColorChecker 24 色卡
  - 灰卡(用于噪声测试)
  - 解析力图(用于分辨率测试)
  - 暗环境(用于噪声和动态范围测试)

测试距离: 通常 30~50cm(视测试卡尺寸而定)

24.3 CTS 和 ITS 的区别

              CTS                               ITS
  ─────────   ──────────────────                ──────────────────
  测试内容    功能兼容性(格式/帧率/接口)          图像质量(颜色/噪声/解析力)
  测试方式    自动调用 API,检查返回值和日志        拍摄测试图表,分析图像内容
  失败原因    HAL 实现不符合 Google 规范            Tuning 参数未调优
  谁负责      HAL 工程师                            Tuning 工程师
  修复方式    HAL 代码 fix                          chromatix 参数调优

  通过 CTS = 功能正确
  通过 ITS = 图像质量达标

  两者都是上市的必要条件

24.4 本章总结

CTS 测兼容性: 帧率/YUV 格式/3A 收敛/Flush 超时 → HAL 工程师
ITS 测图像质量: 颜色/噪声/解析力/动态范围 → Tuning 工程师

CTS 高频失败:
  帧率 → 光照/曝光/ISP 带宽
  YUV 格式 → RowStride/PixelStride
  Flush 超时 → Node 卡住

ITS 高频失败:
  颜色偏差 → chromatix CCM 参数
  噪声过大 → chromatix Denoise 参数
  解析力不足 → chromatix Sharpen 参数