高通ISP流水线核心模块与RAW域处理实战 - 第2节
高通骁龙ISP硬件架构概览
说到高通平台的ISP,我最早接触还是在做骁龙820的时候。那时候的ISP架构跟现在比,简直像两个物种。不过核心思路没变——把图像处理拆成几个专用硬件模块,各司其职。
高通的ISP流水线,说白了就是一条图像数据的“高速公路”。从传感器拿到原始数据,一路经过各种处理站,最后输出一张能看的照片。这条路上有三个关键角色:IFE、IPE 和 BP。
IFE(Image Front-End)——图像前端处理器
IFE是离传感器最近的模块。它直接接收RAW数据,做最基础的预处理。我习惯把它比作“粗加工车间”。
- 坏点校正:传感器上总有那么几个“死像素”,IFE先把它们修掉
- 黑电平校正:去掉传感器暗电流带来的偏移
- 线性化:把传感器的非线性响应拉直
- 增益控制:模拟增益和数字增益的初步调整
IPE(Image Processing Engine)——图像处理引擎
IPE是真正的“精加工车间”。RAW数据经过IFE的粗处理后,送到IPE做更复杂的处理。这里做的事情,决定了最终画质的上限。
| 处理模块 | 功能说明 | 我踩过的坑 |
|---|---|---|
| 去马赛克 | 把Bayer格式转成RGB | 边缘伪彩色很难压,后来用了方向自适应插值 |
| 降噪 | 空域+时域联合降噪 | 运动场景容易拖影,得做运动检测 |
| 锐化 | 提升细节清晰度 | 过度锐化会有光晕,我一般控制在1.2倍以内 |
| 色彩校正 | CCM矩阵变换 | 不同色温下CCM要切换,否则肤色偏紫 |
| Gamma校正 | 亮度映射 | 暗部提太亮噪点全出来了,得配合降噪一起调 |
BP(Back-End Processor)——后端处理器
BP负责最后的输出格式转换和显示适配。它把IPE处理好的数据,转成YUV或者RGB,再送给显示模块或者编码器。
嗯,这里要注意:BP不处理RAW数据了。它只处理已经“成图”的数据。所以RAW域的处理,到IPE基本就结束了。
关键理解:IFE和IPE处理的是RAW域数据,BP处理的是RGB/YUV域数据。RAW域处理的质量,直接决定了最终画质的天花板。
软件框架:TFE、CamX、ChiAPI
硬件有了,还得有软件来驱动。高通的相机软件框架,这些年也经历了几次大改。从最早的mm-camera,到现在的CamX + ChiAPI,架构越来越清晰。
TFE(Tuning Framework Engine)——调优框架引擎
TFE是连接算法和硬件的桥梁。它负责管理ISP的各个模块参数,让算法工程师能方便地调整每一级处理的效果。
- 参数管理:每个模块的tuning参数,都通过TFE加载
- 场景切换:不同光照条件下,自动切换参数集
- 调试接口:支持实时参数调整,方便调试
我记得第一次用TFE的时候,被它的参数树吓到了——光一个降噪模块就有上百个参数。后来习惯了,发现它其实很有条理,每个参数都有明确的物理意义。
CamX(Camera eXtension)——相机扩展框架
CamX是高通新一代的相机HAL层框架。它取代了老旧的mm-camera,设计上更灵活、更模块化。
| 特性 | 说明 | 相比mm-camera的优势 |
|---|---|---|
| Pipeline管理 | 支持多路并行pipeline | 双摄、三摄场景更容易实现 |
| Usecase抽象 | 把拍照、录像、预览抽象成usecase | 不同场景可以复用相同模块 |
| 插件机制 | 支持第三方算法插件 | OEM可以加入自己的算法 |
| 调试工具 | 内置性能分析和日志系统 | 定位问题快多了 |
ChiAPI(Camera Hardware Interface API)——相机硬件接口API
ChiAPI是CamX的上层接口,给应用层和算法层调用。它定义了一套标准化的API,让上层不用关心底层硬件细节。
说白了,ChiAPI就是“你只管告诉我想要什么效果,我来安排硬件怎么干”。
RAW域处理在高通平台中的位置
这个问题,我经常被刚入行的同事问。RAW域处理到底有多重要?
你想想看,传感器出来的原始数据就是RAW。所有后续处理,都是在这个基础上做的。如果RAW域处理没做好,后面的RGB/YUV处理再怎么调,也救不回来。
在高通平台上,RAW域处理覆盖了IFE和IPE的大部分模块:
- IFE阶段:坏点校正、黑电平、线性化、增益——这些都是RAW域操作
- IPE阶段:去马赛克、降噪、锐化、色彩校正——大部分也是RAW域
- BP阶段:已经离开RAW域了,做的是YUV/RGB处理
所以,RAW域处理占据了ISP流水线的前70%。这70%的质量,决定了最终画质的下限和上限。
一句话总结:RAW域处理是ISP的“地基”。地基不稳,上面盖的房子再漂亮也没用。
我在做骁龙888项目时,遇到过一个问题:夜景模式噪点特别多。团队花了两周调IPE的降噪参数,效果始终不理想。后来我回头检查IFE的增益设置——发现增益分配不合理,导致RAW域的信噪比已经损失了。改完IFE的增益策略,降噪效果立竿见影。
这个教训让我养成了一个习惯:遇到画质问题,先查RAW域,再查RGB域。顺序搞反了,容易做无用功。
这张图把整个流程串起来了。你可以看到,从传感器到BP,中间两个大块——IFE和IPE——都是RAW域处理。软件框架在底层支撑着这些硬件的调度和参数管理。
我个人习惯,在开始一个新平台的ISP调试时,第一件事就是确认RAW域的pipeline是否完整。传感器过来的数据,经过IFE和IPE后,能不能正确送到BP。这一步通了,后面的调优才有意义。