第一章 高通ISP架构概览
做图像处理这么多年,我始终觉得一件事很重要——你得先搞清楚硬件长什么样,再去谈算法怎么调。高通骁龙平台的ISP,说白了就是一套专门处理图像信号的硬件流水线。它不像CPU那样啥都能干,但干起图像活来,效率极高。
这一章,我带大家把高通ISP的骨架摸一遍。不扯太深,但该有的东西一个不能少。
1.1 高通骁龙平台ISP硬件架构
高通从骁龙800系列开始,就把ISP做成了独立的硬件模块,叫Spectra。到了骁龙8 Gen系列,Spectra已经迭代到ISP v3、v4甚至v5。每一代都在加核、加带宽、加算法硬件化。
我简单列一下核心硬件模块:
| 模块 | 功能 | 备注 |
|---|---|---|
| IFE(Image Front End) | 原始数据接收、Bayer处理、坏点校正 | 最靠近Sensor的模块 |
| IPE(Image Processing Engine) | 降噪、锐化、色彩校正、Gamma | 算法最密集的地方 |
| BPS(Bayer Processing Segment) | Bayer域统计、HDR融合 | 部分平台集成在IFE内 |
| VFE(Video Front End) | 视频通路处理 | 视频专用,与IFE并行 |
| DSP(Digital Signal Processor) | 辅助计算、AI降噪、超分 | Hexagon DSP,可编程 |
你看这个表,每个模块各司其职。IFE只管前端,IPE管后端,DSP做辅助。这种分工,让整个流水线可以并行跑,延迟很低。
关键点:高通ISP的硬件架构是典型的“流水线+并行”设计。IFE和IPE之间通过内部总线直连,数据不走DDR,延迟极低。这也是为什么高通平台的拍照预览延迟能做到50ms以内。
1.2 ISP Pipeline数据流
数据怎么流的?我画个图你就明白了。
这个图我建议你多看两眼。为什么?因为调试的时候,你得知道问题出在哪一段。比如预览有噪点,可能是IPE的降噪参数没给够;但如果RAW数据就有坏点,那是IFE的事,调IPE没用。
我的经验:有一次客户反馈暗光下预览有竖条纹。我排查了半天,最后发现是IFE的BLC(黑电平校正)没开。你想想看,如果我不了解数据流,可能还在IPE里调降噪,那永远调不好。
1.3 Camera子系统组成
一个完整的Camera子系统,不只是ISP。它还包括:
- Sensor:图像传感器,输出RAW数据。常见的有Sony IMX系列、三星ISOCELL系列。
- Lens:镜头模组,影响进光量和畸变。
- VCM(Voice Coil Motor):对焦马达,控制镜头移动。
- EEPROM:存储镜头校正数据(AF、AWB、LSC等)。
- ISP:图像信号处理器,就是我们上面讲的Spectra。
- MIPI接口:Sensor到ISP的传输通道,CSI-2协议。
- CPP(Camera Post Processor):后处理模块,做旋转、缩放、格式转换。
这些组件通过I2C、SPI、MIPI等总线连接。调试的时候,任何一个环节出问题,图像都可能翻车。
注意:很多新手只盯着ISP调参数,忽略了Sensor端的配置。我曾经遇到过一例——Sensor的曝光时间没配对,导致图像闪烁。查了两天才发现是VTS(垂直消隐时间)设错了。所以,子系统里的每个部件,你都得心里有数。
1.4 Spectra ISP介绍
Spectra是高通ISP的品牌名。从骁龙820开始,Spectra就作为独立IP存在。每一代都在升级:
| Spectra版本 | 对应平台 | 主要特性 |
|---|---|---|
| Spectra 160 | 骁龙820/821 | 14bit ISP,支持双摄 |
| Spectra 250 | 骁龙835 | 支持深度感测,多帧降噪 |
| Spectra 380 | 骁龙845 | CV ISP,支持计算机视觉 |
| Spectra 480 | 骁龙865 | 10bit HDR,8K视频 |
| Spectra 580 | 骁龙888 | 三ISP并行,低光降噪增强 |
| Spectra 680 | 骁龙8 Gen1 | 18bit ISP,AI融合 |
Spectra ISP的核心能力,我总结为三点:
- 高吞吐:支持多路Sensor同时输入,最高支持200MP单摄或三摄并行。
- 低延迟:IFE到IPE直连,不走DDR,预览延迟极低。
- 可编程:IPE内部的降噪、锐化等模块,参数可调,甚至可以通过DSP加载AI模型。
说白了,Spectra就是一套为图像而生的专用硬件。它不像GPU那样通用,但干起图像处理的活,效率是CPU的几十倍。
核心观点:理解Spectra ISP的架构,是你后续调试降噪算法的基础。你只有知道降噪是在IPE的哪个阶段做的,才能针对性地调参数。否则,你就是在黑盒里瞎调。