调试工具链:高通/MTK平台调试工具介绍、Chrome Trace分析、Logcat抓取与分析、图像dump与离线分析
做图像质量调优,说白了就是跟各种工具打交道。没有趁手的家伙,你连问题在哪都找不到。
我刚开始带项目那会儿,最头疼的就是平台差异。高通和MTK,两家思路完全不同。你拿着高通的套路去调MTK,大概率会碰一鼻子灰。反过来也一样。
今天咱们就把这套工具链捋一遍。从平台工具到Trace分析,再到Log抓取和图像dump,一条龙讲清楚。
高通平台调试工具
高通的工具链,我个人觉得是最完善的。但也正因为太完善,新手容易迷失。
QCARCamera
这是高通官方提供的调试工具。说白了就是一个带各种开关的相机应用。你可以用它来切换不同的算法模块,比如AEC、AWB、AF的开关。
我习惯在调优初期先用它做快速验证。比如怀疑某个场景下AWB偏色,直接关掉AWB,手动给一个色温值,看看是不是算法的问题。
- 实时切换ISP pipeline中的各个模块
- 导出当前帧的RAW图和YUV图
- 查看3A算法的中间状态值
- 模拟不同的光照场景
CamX / Chi API
高通从骁龙845开始推CamX架构。这个架构最大的变化,是把算法模块做成了插件。你可以自己写一个Chi node,插到pipeline里。
嗯,这里要注意。CamX的调试日志默认是关闭的。你需要通过adb设置属性才能打开:
adb shell setprop persist.vendor.camera.logs 0x1F
adb shell setprop persist.vendor.camera.enableHAL3 1
adb shell setprop persist.vendor.camera.global.debug 1
我曾经因为没开日志,查了一个星期的黑屏问题。最后发现是sensor驱动没加载成功。从那以后,我拿到新平台的第一件事,就是把所有调试开关打开。
MTK平台调试工具
MTK的工具,说实话,早期挺难用的。但最近几年进步很大。尤其是他们的Meta Tool,功能越来越强。
Meta Tool
MTK的Meta Tool相当于高通的QCARCamera。但它有个特点——它是个PC端工具,通过USB连接手机。
你可以在PC上实时调整参数,手机端立刻生效。这个对调试来说太方便了。我经常一边看着测试图卡,一边在PC上滑动滑块调AWB增益。
Camera Hal Debug
MTK的HAL层日志,通过属性控制:
adb shell setprop debug.camera.log 1
adb shell setprop debug.camera.hal 1
adb shell setprop debug.camera.isp 1
注意,MTK的日志量非常大。如果你全开,logcat会刷得飞起。我建议按需开启,比如只开HAL层或者只开ISP层。
Chrome Trace分析
这个工具,我强烈建议每个做图像的人都学会。Chrome Trace(也叫Perfetto)能让你看到每一帧里,每个模块花了多少时间。
为什么会这么重要?因为图像调优不只是调画质,还要调性能。你画质调得再好,如果帧率掉到15fps,用户照样骂娘。
抓取Trace
高通平台用这个命令:
adb shell atrace --async_start -c -b 40960 camera hal
... 操作相机 ...
adb shell atrace --async_dump -c -b 40960 > /data/local/tmp/trace_output
adb pull /data/local/tmp/trace_output
MTK平台稍微不同:
adb shell perfetto --out /data/misc/perfetto-traces/trace.perfetto \
--txt -c - <<EOF
buffers: {
size_kb: 102400
}
data_sources: {
config {
name: "android.hardware.camera"
}
}
EOF
分析要点
拿到Trace文件后,用浏览器打开 ui.perfetto.dev。我一般关注这几个点:
- Pipeline深度:当前有几帧在pipeline里?太深会导致延迟大
- ISP处理时间:是否超过了16ms(60fps)或33ms(30fps)?
- 3A收敛时间:从场景变化到AEC/AWB稳定,花了多少帧?
- CPU负载:哪个线程在吃CPU?是不是有死循环?
Logcat抓取与分析
Logcat是Android调试的基本功。但很多人只会用 logcat -s 过滤,其实远远不够。
高效抓取
我常用的几个命令:
# 带时间戳,方便定位
adb logcat -v time -b all > log.txt
# 只抓相机相关,且保存到文件
adb logcat -v threadtime | grep -E "Camera|HAL|ISP|3A" > camera_log.txt
# 实时查看,高亮错误
adb logcat -v color | grep --color=always -E "ERROR|FATAL|WARNING"
分析技巧
拿到日志后,别急着从头看到尾。我一般先搜这几个关键词:
FATAL或CRASH:程序挂了,优先解决ERROR:可能有功能异常WARNING:潜在风险,但未必是问题timeout:某个操作超时了,通常是性能瓶颈buffer:跟buffer分配相关的问题
图像dump与离线分析
这是最实在的一步。你调了半天,不如把图像dump出来,放到PC上用专业工具看。
如何dump图像
高通平台:
adb shell setprop persist.vendor.camera.raw.dump 1
adb shell setprop persist.vendor.camera.yuv.dump 1
MTK平台:
adb shell setprop debug.camera.dump 1
adb shell setprop debug.camera.dump.path /sdcard/dump
dump出来的文件通常是RAW格式(.raw或.dng)或者YUV格式(.yuv或.nv21)。
离线分析工具
我常用的工具链:
| 工具 | 用途 | 我的评价 |
|---|---|---|
| Imatest | 解析力、色彩、噪点分析 | 行业标准,贵但值 |
| IE (Image Engineering) | 综合图像质量分析 | 跟Imatest互补 |
| Python + OpenCV | 自定义分析脚本 | 灵活,我经常写脚本批量处理 |
| RawDigger | 查看RAW图数据 | 免费,看坏点和黑电平很好用 |
分析流程
我一般按这个步骤来:
- 看RAW图:检查是否有坏点、黑电平是否正常、是否有Bayer pattern异常
- 看YUV图:检查亮度、色彩、是否有噪声
- 跑Imatest:量化解析力(MTF)、色彩准确度(Delta E)、信噪比(SNR)
- 对比基准:跟竞品或者上一版固件对比,看是进步还是退步
知识体系总览
下面这张图,是我自己整理的调试工具链知识体系。你可以把它当成一张地图,遇到问题就知道该用哪个工具。
这套工具链,说白了就是你的「眼睛」和「手」。眼睛帮你看清问题在哪,手帮你去调整参数。两者缺一不可。
我见过很多工程师,只会用Meta Tool或者QCARCamera调参数,但不会看Trace,也不会分析Log。结果就是调了半天,问题复现不了,或者复现了也不知道根因。
所以我的建议是:把这四个工具都练熟。遇到问题,先用Trace看性能,再用Logcat定位错误,然后用图像dump做量化分析,最后用平台工具做参数调整。这套流程走下来,90%的问题都能搞定。
可可精品资料库