2、高通ISP硬件架构:骁龙ISP硬件模块介绍(IFE、IPE、BPS等)、数据流走向
做ISP调试,第一件事不是调参数,而是看懂硬件怎么干活。
很多人一上来就对着3A算法猛调,结果发现效果出不来——其实问题出在数据流上。你想想看,如果连图像数据从哪个模块进、哪个模块出都没搞清楚,调出来的参数很可能被后面的模块“吃掉”了。
这一章,我带你把骁龙ISP的硬件骨架摸一遍。不搞玄学,只讲你调试时真正需要知道的东西。
2.1 骁龙ISP整体架构概览
高通的ISP不是一个单一模块,而是一套流水线。我习惯把它分成三段:
- 前端接收:从传感器拿原始数据,做初步处理
- 中间处理:核心图像处理,降噪、锐化、色彩
- 后端输出:编码、显示、存储
这套流水线里,有三个模块你必须要记住:IFE、IPE、BPS。它们就是高通ISP的“三驾马车”。
核心记忆点:
- IFE:Image Front-End,图像前端,处理RAW数据
- IPE:Image Processing Engine,图像处理引擎,做YUV处理
- BPS:Bayer Processing Segment,Bayer处理段,做Bayer域处理
嗯,这里要注意:不同骁龙平台,这三个模块的集成方式可能不一样。比如有些平台把BPS和IFE合并了,有些则分开。但逻辑功能是不变的。
2.2 IFE(图像前端)——传感器的“翻译官”
IFE是ISP的第一道关卡。传感器送过来的RAW数据,直接进IFE。
我在项目中遇到过一个问题:某款传感器输出的RAW数据有坏点,IFE的坏点校正没开,结果后面的IPE怎么调都调不干净。后来才发现,坏点校正必须在IFE阶段做,过了这个村就没这个店了。
IFE主要干这几件事:
- 坏点校正(DPC):静态和动态坏点都得处理
- 黑电平校正(BLC):去掉传感器暗电流的影响
- 增益控制:模拟增益和数字增益
- 线性化:把传感器的非线性响应拉直
调试小技巧:
IFE阶段的参数调整,直接影响后面所有模块。我建议你在调IPE之前,先确认IFE的输出是干净的。否则后面调得再好,也是“垃圾进,垃圾出”。
2.3 BPS(Bayer处理段)——Bayer域的“精加工”
BPS这个模块,说白了就是专门处理Bayer格式数据的。它和IFE的区别在于:IFE做的是“粗加工”,BPS做的是“精加工”。
BPS的核心功能:
- 去马赛克(Demosaic):把Bayer数据变成RGB
- 白平衡(AWB):调整色温
- 颜色校正(CCM):把传感器色彩空间映射到标准色彩空间
- Gamma校正:调整亮度响应曲线
我曾经踩过一个坑:某次调试时,BPS的白平衡参数没配好,导致IPE阶段的色彩校正怎么调都偏色。后来查了半天,发现是BPS的AWB增益给错了。记住,BPS的输出质量决定了IPE的上限。
避坑指南:
我曾经在BPS阶段把Gamma曲线调得太陡,结果暗部细节全丢了。后来花了三天才追回来。Gamma校正要谨慎,尤其是暗部区域,宁可留一点余量,也不要切得太狠。
2.4 IPE(图像处理引擎)——YUV域的“总导演”
IPE是ISP流水线的最后一站。这时候数据已经变成YUV格式了。IPE负责做所有“看起来好看”的处理。
IPE的主要模块:
| 模块 | 功能 | 调试要点 |
|---|---|---|
| 降噪(NR) | 去除亮度和色度噪声 | 注意亮噪和色噪的平衡,别把细节磨没了 |
| 锐化(Sharpening) | 增强边缘细节 | 过度锐化会产生振铃,宁欠勿过 |
| 色彩增强(CE) | 提升色彩饱和度 | 肤色保护要单独处理 |
| 亮度映射(LTM) | 局部亮度调整 | 高动态场景下特别有用 |
我个人习惯在IPE阶段先调降噪,再调锐化。因为降噪会模糊细节,如果先锐化再降噪,锐化的效果会被降噪抵消掉,白费功夫。
2.5 数据流走向——一张图看懂
说了这么多,不如一张图来得直观。下面这张图展示了骁龙ISP的典型数据流:
2.6 多摄场景下的数据流
现在的手机至少三个摄像头。多摄场景下,数据流会变得复杂。
我记得有一次调试双摄虚化,发现主摄和副摄的画面始终对不上。后来查数据流才发现,两个摄像头的IFE参数不一致,导致输出延迟不同步。
多摄场景的关键点:
- 同步:所有摄像头的IFE必须使用同一套时序
- 带宽:多路数据同时进IPE,带宽容易成为瓶颈
- 融合:BPS输出的RGB数据,需要在IPE之前做对齐
实战经验:
多摄调试时,我建议你先单独调好每个摄像头,再开融合。否则出了问题,你根本不知道是哪个摄像头的问题。
2.7 总结一下
这一章我们把高通ISP的硬件骨架过了一遍。你记住三件事:
- IFE:RAW数据入口,做基础校正
- BPS:Bayer域精加工,输出RGB
- IPE:YUV域总导演,做最终美化
数据流就是:传感器 → IFE → BPS → IPE → 输出。这个顺序不能乱,每个模块的输入输出格式也不能搞错。
嗯,这一章的内容就到这里。你把这些硬件模块的关系理清了,后面调参数的时候,心里就有底了。