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结构。

RK ISP Pipeline 整体架构图 RK ISP Pipeline 整体架构(简化版) CMOS Sensor 前端 Pre-ISP BLC / LSC / OTP ISP Core 去噪 / 锐化 / 色彩 AWB / AE / AF 后端 Post-ISP 缩放 / 格式转换 YUV 输出 3A 统计引擎 3A 控制算法 说明:3A(AE/AWB/AF)统计从ISP Core内部提取,经算法处理后反馈控制Sensor和ISP参数。 这是一个闭环反馈系统,也是ISP调试中最复杂的部分。 RK ISP 软件栈 应用层(Camera HAL) 算法层(3A / Tuning) 驱动层(V4L2 / ISP) 硬件层(ISP IP)

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和去噪决定上限,后端的转换决定最终输出格式。