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.* 中。下面分别讲清楚它们测什么、怎么测、失败了怎么排查。
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 后是否有内存泄漏
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 → 帧率测试
CTS Camera 测试对光照环境有要求:
- 暗箱或可控光照环境
- 标准 D65 光源(色温 6500K)
- 光照强度 300~500 lux
- 测试图表(ColorChecker、灰卡、解析力图)
如果不在标准环境下测试:
- AE 可能在暗光下拉长曝光 → 帧率不达标
- AWB 可能在不同色温下偏色 → 3A 收敛失败
- AF 可能在低对比度场景下拉风箱 → AF 锁定失败
# 运行全部 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>
测试项: PerformanceTest#testPreviewFpsRange
要求: 配置 30fps,实际 ≥ 28fps
失败日志:
java.lang.AssertionError: Expected fps >= 28, but got 22.5
排查:
① 确认环境光照是否足够(暗光→AE 拉长曝光→帧率下降)
② logcat 中查 exposureTime 是否 > 33ms(30fps 的帧间隔)
③ 查 ISP 带宽(docker 分辨率降低对比,看帧率是否恢复)
测试项: 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 中的配置是否正确
AE 振荡: exposureTime 在两个值之间来回跳
AWB 漂移: 色温在连续几帧之间持续变化
AF 拉风箱: actuator 在焦点附近来回移动
排查:
AE 振荡 → 检查 AE hysteresis(滞回)参数
AWB 漂移 → 检查 OTP AWB 数据是否正确
AF 拉风箱 → 检查场景对比度是否足够
HAL flush() 必须在 1000ms 内完成。
如果超时:
CameraService 判定 HAL 挂死
→ 强制重启 CameraProvider 进程
→ CTS FAIL
排查:
dumpsys 查 flush 过程中哪个 Node 卡住了:
adb shell dumpsys media.camera | grep -A 20 "Pending"
ITS 测试的是相机图像质量——和 CTS 不一样,ITS 是基于图像内容的测试。它拍摄特定的测试图表,然后分析图像中的内容来判断质量。
ITS 测试的维度:
Color Accuracy → 颜色准确度(通过 ColorChecker)
Noise → 噪声水平(通过灰卡)
Spatial Resolution → 解析力(通过解析力图)
Lens Shading → 亮度均匀性(均匀光照下)
Distortion → 镜头畸变
Dynamic Range → 动态范围(通过 HDR 测试卡)
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 → 后摄排列(多摄)
ITS 对环境要求比 CTS 更高:
- 标准 D65 光源(色温 6500K ± 100K)
- 光照强度 500 lux
- X-Rite ColorChecker 24 色卡
- 灰卡(用于噪声测试)
- 解析力图(用于分辨率测试)
- 暗环境(用于噪声和动态范围测试)
测试距离: 通常 30~50cm(视测试卡尺寸而定)
CTS ITS
───────── ────────────────── ──────────────────
测试内容 功能兼容性(格式/帧率/接口) 图像质量(颜色/噪声/解析力)
测试方式 自动调用 API,检查返回值和日志 拍摄测试图表,分析图像内容
失败原因 HAL 实现不符合 Google 规范 Tuning 参数未调优
谁负责 HAL 工程师 Tuning 工程师
修复方式 HAL 代码 fix chromatix 参数调优
通过 CTS = 功能正确
通过 ITS = 图像质量达标
两者都是上市的必要条件
CTS 测兼容性: 帧率/YUV 格式/3A 收敛/Flush 超时 → HAL 工程师
ITS 测图像质量: 颜色/噪声/解析力/动态范围 → Tuning 工程师
CTS 高频失败:
帧率 → 光照/曝光/ISP 带宽
YUV 格式 → RowStride/PixelStride
Flush 超时 → Node 卡住
ITS 高频失败:
颜色偏差 → chromatix CCM 参数
噪声过大 → chromatix Denoise 参数
解析力不足 → chromatix Sharpen 参数