高通ISP Pipeline概览:ISP处理流程、YUV域处理模块位置、硬件与软件分工

做高通平台ISP调试这些年,我最大的感受是:不理解Pipeline,就谈不上调优。很多人一上来就调参数,结果发现某个模块改了,后面又给拉回来了——说白了,就是没搞清楚数据流走到哪一步了。

这一章,我带你把高通ISP的整个处理流程走一遍。重点搞清楚三件事:数据怎么流、YUV域模块插在哪、硬件和软件各管什么。

高通ISP Pipeline的整体架构

先看一张我手绘的流程图。这是高通ISP的经典处理链路,从Sensor进来的是RAW数据,出去的是YUV或RGB。

核心要点:高通ISP Pipeline = Sensor → RAW域处理 → RGB域处理 → YUV域处理 → 输出

高通ISP Pipeline 核心流程 Sensor RAW域处理 BLC / AWB / Demosaic RGB域处理 CCM / Gamma / LSC YUV域处理 EE / CNR / 缩放 YUV输出 硬件 vs 软件分工 硬件ISP:RAW域 + RGB域(固定管线,低延迟) 软件ISP / 后处理:YUV域(灵活调优,可配置) RAW域关键模块 • 黑电平校正 (BLC) • 白平衡 (AWB) • 去马赛克 (Demosaic) • 去噪 (BNR) • 镜头校正 (LSC) RGB域关键模块 • 颜色校正矩阵 (CCM) • Gamma校正 • 色调映射 (Tone Map) • 色彩增强 • 饱和度控制 YUV域关键模块 • 边缘增强 (EE) • 色度降噪 (CNR) • 亮度/对比度调整 • 缩放 (Scaler) • 肤色保护

嗯,这张图我建议你存下来。每次调参时,对照着看,就知道当前改的是哪个域的参数。

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。

实战中的分工决策

在实际项目中,怎么决定某个功能放在硬件还是软件做?我一般遵循三个原则:

  1. 延迟敏感 → 硬件(比如预览、录像实时流)
  2. 画质敏感 → 软件(比如拍照后处理、夜景模式)
  3. 算法迭代快 → 软件(比如边缘增强策略、肤色保护)

我的经验:边缘增强(EE)和色度降噪(CNR)这两个模块,永远放在YUV域的软件部分做。为什么?因为不同场景需要的增强策略完全不同——拍人像要柔和,拍风景要锐利,硬件固定管线根本做不到这种动态切换。

说白了,硬件ISP负责不出错,软件ISP负责出彩。你作为调试工程师,大部分时间就是在YUV域里折腾——调边缘增强的阈值、调降噪的强度、调肤色保护的权重。

我记得刚入行时,带我的老工程师说了一句话,到现在我都觉得是真理:“先把硬件ISP调稳,再谈YUV域的锦上添花”。别一上来就猛拉边缘增强,先把RAW域的噪声压住、RGB域的颜色还原准了,YUV域才有发挥空间。