2、RK平台ISP概述:RK ISP Pipeline整体架构、RK ISP硬件模块介绍、RK ISP软件栈。
好,咱们进入正题。上一章聊了RAW数据是什么,这一章咱们看看RK平台是怎么把这些RAW数据“洗”成一张能看的照片的。说白了,就是ISP Pipeline。
我个人习惯,看一个芯片的ISP能力,先不看参数,先看它的Pipeline架构图。为什么?因为架构决定了它能做什么,不能做什么。RK的ISP,从早期的RK3288到现在的RK3588,Pipeline的演进我基本都跟过。嗯,这里面的坑,我踩过不少。
2.1 RK ISP Pipeline整体架构
RK的ISP Pipeline,你可以把它想象成一条流水线。RAW数据从Sensor进来,经过一个个工位(硬件模块),最后输出YUV或者RGB图像。这条流水线,我把它分成三大段:
- 前端(Pre-ISP):处理Sensor直接过来的RAW数据,做最基础的校正。
- 中端(ISP Core):核心处理单元,做去噪、锐化、色彩还原这些重活。
- 后端(Post-ISP):做最后的格式转换、缩放、裁剪,输出给显示或编码器。
你想想看,如果前端没做好,比如黑电平校正不准,那后面再怎么调都是白费力气。我在项目里就吃过这个亏,Sensor换了型号,黑电平没跟着改,结果整张图偏色,排查了两天才找到原因。
核心要点:RK ISP Pipeline是典型的“串行+并行”混合架构。串行保证数据流有序,并行(比如多路ISP)保证高帧率或多Sensor场景。
下面这张图,是我根据RK3588的ISP架构简化出来的,基本能代表RK中高端ISP的Pipeline结构。
2.2 RK ISP硬件模块介绍
硬件模块这块,我挑几个关键的讲。RK的ISP硬件,说白了就是一堆专用计算单元。每个单元干一件事,效率极高。
| 模块名称 | 功能简述 | 我在项目中踩过的坑 |
|---|---|---|
| BLC(黑电平校正) | 消除Sensor暗电流导致的偏置 | 换Sensor后BLC参数没更新,暗部偏绿 |
| LSC(镜头阴影校正) | 补偿镜头边缘亮度衰减 | 广角镜头LSC表没校准,四周暗角严重 |
| DPF(去噪) | 空域+时域联合去噪 | 运动场景时域去噪没处理好,拖影明显 |
| WDR(宽动态) | 多帧合成提升动态范围 | 运动物体在WDR合成后出现鬼影 |
| 3A(AE/AWB/AF) | 自动曝光/白平衡/对焦 | AWB在混合光源下容易偏色,需要做场景识别 |
| CSC(色彩空间转换) | RAW -> RGB -> YUV | 色彩矩阵系数没调好,肤色发青 |
个人经验:调试ISP时,我习惯从BLC开始,一步一步往后调。别想着一步到位。每个模块的生效范围是有限的,前一个没调好,后一个怎么调都救不回来。
2.3 RK ISP软件栈
硬件是骨架,软件是灵魂。RK的ISP软件栈,我把它分成四层。每一层都有它的职责,也有它的坑。
2.3.1 硬件抽象层(HAL)
这一层直接操作ISP寄存器。说白了,就是告诉硬件“你现在该干活了”。RK提供了标准的V4L2接口,但有些私有参数需要通过自定义ioctl传递。我记得有一次,一个参数没通过V4L2标准通道传,结果驱动层没解析到,图像一直不对。
2.3.2 算法层(3A & Tuning)
这是最核心的一层。AE、AWB、AF的算法都在这里。RK的3A算法库是闭源的,但提供了参数接口。你想想看,如果AE算法收敛太慢,画面就会忽明忽暗。我曾经在一个低照度项目中,AE收敛时间调了整整一周,才达到客户要求的0.5秒内稳定。
2.3.3 驱动层(Kernel Driver)
驱动层负责管理ISP硬件资源、中断处理、buffer管理。RK的ISP驱动基于V4L2框架,支持多个video节点。这里要注意的是,多路ISP同时工作时,驱动层的调度策略直接影响性能。我遇到过一个问题,两路ISP同时跑4K,驱动层buffer分配没做好,导致丢帧。
2.3.4 应用层(Camera HAL & Service)
这一层是给上层应用用的。Android的Camera HAL3、Linux的V4L2应用都在这层。RK提供了完整的Camera HAL实现,但如果你要做定制化开发,比如添加自己的算法,就需要在这一层做hook。
避坑指南:我曾经在RK3588上做多摄像头方案,发现应用层调用ISP时,参数传递顺序错了。RK的ISP参数是分组的,必须先设置全局参数,再设置每个模块的参数。顺序乱了,硬件直接罢工。嗯,从那以后我写代码都会先检查参数配置顺序。
2.4 小结
这一章咱们把RK ISP的Pipeline、硬件模块、软件栈都过了一遍。说白了,ISP就是一个“数据进来,好图出去”的流水线。硬件模块各司其职,软件栈分层协作。你只要记住:前端的校正决定下限,中端的3A和去噪决定上限,后端的转换决定最终输出格式。