高通ISP Pipeline概览:ISP处理流程、YUV域处理模块位置、硬件与软件分工
做高通平台ISP调试这些年,我最大的感受是:不理解Pipeline,就谈不上调优。很多人一上来就调参数,结果发现某个模块改了,后面又给拉回来了——说白了,就是没搞清楚数据流走到哪一步了。
这一章,我带你把高通ISP的整个处理流程走一遍。重点搞清楚三件事:数据怎么流、YUV域模块插在哪、硬件和软件各管什么。
高通ISP Pipeline的整体架构
先看一张我手绘的流程图。这是高通ISP的经典处理链路,从Sensor进来的是RAW数据,出去的是YUV或RGB。
核心要点:高通ISP Pipeline = Sensor → RAW域处理 → RGB域处理 → YUV域处理 → 输出
嗯,这张图我建议你存下来。每次调参时,对照着看,就知道当前改的是哪个域的参数。
YUV域处理模块的位置
YUV域在整个Pipeline里处于后端。说白了,前面RAW域和RGB域已经把颜色、亮度、噪声处理得差不多了,到了YUV域,主要做画质精修。
我个人习惯把YUV域比作化妆师——底子(RAW/RGB)已经打好了,YUV域负责让画面更锐利、更干净、更讨喜。
| 处理域 | 输入数据 | 主要任务 | 典型模块 |
|---|---|---|---|
| RAW域 | Bayer RAW | 传感器原始数据校正 | BLC, AWB, Demosaic, BNR |
| RGB域 | RGB | 色彩还原与映射 | CCM, Gamma, Tone Map |
| YUV域 | YUV | 边缘增强、降噪、缩放 | EE, CNR, Scaler |
小提示:高通平台中,YUV域处理通常放在MCTF(运动补偿时域滤波)之后。为什么?因为时域滤波会引入轻微模糊,YUV域的边缘增强正好可以补偿回来。
硬件与软件的分工
这个问题我经常被问到:ISP到底是硬件做的还是软件做的?答案是:都有。
高通平台的ISP是一个硬件加速 + 软件可配的混合架构。你想想看,如果全部用软件做,4K 60fps的视频流根本跑不动。但如果全部用硬件做,又不够灵活。
硬件ISP(HW ISP)
- 负责:RAW域和RGB域的固定管线处理
- 特点:低延迟、高吞吐、功耗低
- 典型模块:BLC、AWB、Demosaic、CCM、Gamma
- 配置方式:通过寄存器写参数,运行时不可动态切换算法
软件ISP(SW ISP / 后处理)
- 负责:YUV域的灵活处理
- 特点:可编程、可调优、可迭代
- 典型模块:边缘增强、CNR、肤色保护、缩放
- 配置方式:通过算法库或DSP/NPU加速,可动态切换策略
避坑指南:我曾经在一个项目中,把边缘增强的强度调得很大,结果在硬件ISP阶段就已经饱和了,YUV域再增强直接导致过冲。后来才意识到——硬件ISP的输出质量,直接决定了YUV域调优的上限。别指望YUV域能救回RAW域已经丢失的细节。
高通平台特有的Pipeline变体
高通不同芯片代的Pipeline略有差异。我整理了一个对比表,方便你快速了解:
| 芯片代 | ISP版本 | YUV域位置 | 备注 |
|---|---|---|---|
| SM8250 (865) | ISP v4.0 | MCTF之后、Scaler之前 | 经典架构 |
| SM8350 (888) | ISP v5.0 | 增加双YUV路径 | 支持多帧合成后YUV增强 |
| SM8450 (8 Gen1) | ISP v6.0 | 引入AI辅助YUV处理 | 部分模块可切到NPU |
嗯,这里要注意:YUV域的位置虽然相对固定,但不同平台的可配置参数差异很大。比如SM8450上,边缘增强的核大小可以从3x3调到7x7,而SM8250只能到5x5。
实战中的分工决策
在实际项目中,怎么决定某个功能放在硬件还是软件做?我一般遵循三个原则:
- 延迟敏感 → 硬件(比如预览、录像实时流)
- 画质敏感 → 软件(比如拍照后处理、夜景模式)
- 算法迭代快 → 软件(比如边缘增强策略、肤色保护)
我的经验:边缘增强(EE)和色度降噪(CNR)这两个模块,永远放在YUV域的软件部分做。为什么?因为不同场景需要的增强策略完全不同——拍人像要柔和,拍风景要锐利,硬件固定管线根本做不到这种动态切换。
说白了,硬件ISP负责不出错,软件ISP负责出彩。你作为调试工程师,大部分时间就是在YUV域里折腾——调边缘增强的阈值、调降噪的强度、调肤色保护的权重。
我记得刚入行时,带我的老工程师说了一句话,到现在我都觉得是真理:“先把硬件ISP调稳,再谈YUV域的锦上添花”。别一上来就猛拉边缘增强,先把RAW域的噪声压住、RGB域的颜色还原准了,YUV域才有发挥空间。