目录
[二、工业级 ISP 压缩的核心设计原理](#二、工业级 ISP 压缩的核心设计原理)
[原则 1:分块独立编码 (Tile-Coding)](#原则 1:分块独立编码 (Tile-Coding))
[原则 2:自适应位宽 (Adaptive Bit-depth)](#原则 2:自适应位宽 (Adaptive Bit-depth))
[原则 3:固定带宽约束 (Fixed Budget)](#原则 3:固定带宽约束 (Fixed Budget))
[原则 4:像素紧凑打包 (Pixel Packing)](#原则 4:像素紧凑打包 (Pixel Packing))
[3.1 硬件模块组成](#3.1 硬件模块组成)
[3.2 3DNR 参考帧写入流程](#3.2 3DNR 参考帧写入流程)
[3.3 3DNR 参考帧读取流程](#3.3 3DNR 参考帧读取流程)
[Step 1:块头定义 (Header)](#Step 1:块头定义 (Header))
[Step 2:差分脉冲编码调制 (DPCM)](#Step 2:差分脉冲编码调制 (DPCM))
[Step 3:存储布局](#Step 3:存储布局)
[五、这种设计对 3DNR 的独特价值](#五、这种设计对 3DNR 的独特价值)
通用压缩算法(如 JPEG、LZ77、H.264)绝对不能用于 ISP 实时帧缓存 ,因为它们无法支持随机访问(Random Access)。
真正在SoC/ISP/DPU 芯片中量产的参考帧压缩技术,统称为帧内无损 / 近无损、基于块的自适应压缩算法。
一、为什么通用压缩算法不能用?(核心痛点)
在 ISP Pipeline 中,3DNR、AF、AWB 等模块访问内存不是按顺序从头到尾读,而是随机跳跃的。
| 特性 | 通用压缩 (JPEG/DEFLATE) | 工业级帧缓存压缩 (Tile-Based) |
|---|---|---|
| 数据流 | 串行流,依赖前后文 | 独立块,无跨块依赖 |
| 随机访问 | 必须从头解压到目标位置,延时爆炸 | 定位块地址 -> 直接解压单块,延时 < 1 周期 |
| 错误扩散 | 1bit 错误导致整图花屏 | 错误仅限当前小块,鲁棒性极高 |
| 带宽控制 | 压缩比浮动大,DDR 带宽不可控 | 设定压缩上限,保证最坏情况不爆带宽 |
| 硬件实现 | 复杂,需大缓存 | 极简,流水线友好 |
结论 :ISP 参考帧压缩的第一准则是 ------必须支持任意 8x8/16x4 像素块的独立解码,且解码延迟固定。
二、工业级 ISP 压缩的核心设计原理
所有量产方案(如高通 HXCR、三星 MBZ、ARM Frame Buffer Compression)都遵循以下四大黄金原则:
原则 1:分块独立编码 (Tile-Coding)
将一帧图像切割成固定大小的微小像素块。
- 标准块大小 :4x4、8x4、16x4(高度通常为 1,适配行扫描)。
- 原理:每一块的数据头 + 数据独立存储。
- 访问逻辑 :
- 根据像素坐标计算块索引。
- 通过 ** 索引表(Lookup Table)** 查到该块在 DDR 中的物理地址。
- 仅读取该块的几十字节数据。
- 硬件解码器即时解压。
- 优势:想读哪里读哪里,完全模拟原始未压缩内存的访问习惯。
原则 2:自适应位宽 (Adaptive Bit-depth)
利用图像空间相关性,计算块内像素的动态范围,只分配够用的位数。
- 步骤 :
- 计算块内最大值
Max和最小值Min。 - 计算差值
Range = Max - Min。 - 根据
Range决定所需位宽(如 2bit、4bit、6bit、8bit)。 - 块头记录 Base 值(Min)和位宽模式。
- 像素数据存储为相对于 Base 的残差。
- 计算块内最大值
- 数学模型 :
Pixel = Base + Resample(Residual) - 优势 :平坦区域(如天空)压得很小,纹理区域保持清晰,视觉无损。
原则 3:固定带宽约束 (Fixed Budget)
这是芯片稳定运行的关键。
- 原理:强制规定每个块的最大存储字节数。
- 策略 :
- 如果压缩后小于预算,填充 0 或截断。
- 如果难以压缩(如噪点极大的块),直接旁路(Bypass),即不压缩原样存储。
- 优势:DDR 控制器可以精确计算最坏情况下的带宽,避免带宽溢出导致的 Pipeline 卡死。
原则 4:像素紧凑打包 (Pixel Packing)
摒弃标准的 8 位字节对齐,利用位拼接引擎实现比特级紧凑存储。
- 示例 :一个 16x4 块,自适应为 4bit / 像素。
- 总数据量 = 16 * 4 * 4bit = 256bit = 32Byte。
- 硬件直接连续打包写入 DDR,无字节空隙。
三、典型硬件架构与数据流
3.1 硬件模块组成
- 地址转换单元(ATU) :
- 维护块地址表。记录每一个压缩块存在 DDR 的哪个位置。
- 负责虚拟像素坐标 -> 物理 DDR 地址的转换。
- 压缩 / 解压缩引擎(CODEC) :
- 纯组合逻辑或短流水线,无帧缓存。
- 并行处理多个 Tile。
- DDR 控制器 :
- 以 Burst 方式读写压缩块。
3.2 3DNR 参考帧写入流程
- 当前帧输出送入压缩引擎。
- 按 16x4 切分 Tile。
- 逐 Tile 进行自适应预测、残差计算、位宽压缩。
- 将压缩后的数据写入 DDR。
- 将该 Tile 的起始地址更新到ATU 块地址表。
3.3 3DNR 参考帧读取流程
- 3DNR 模块需要读取
(x, y)处的参考像素。 - 向 ATU 发送坐标请求。
- ATU 计算出 Tile 索引,查表得到 DDR 地址。
- 从 DDR 读取该单个压缩块。
- 解压缩引擎即时解压出 16x4 像素块。
- 送出目标像素给 3DNR 计算。
- 整个过程仅需读取几十字节,而非整帧数据。
四、经典算法实现详解(以通用自适应模板为例)
我们以最常见的16x4 块、2bit 模式头为例,讲解内部编码细节:
Step 1:块头定义 (Header)
每个块前固定 2bit,指示编码模式:
00:Bypass 模式(8bit / 像素,共 64Byte)01:6bit 模式(共 48Byte)10:4bit 模式(共 32Byte)11:2bit 模式(共 16Byte)
Step 2:差分脉冲编码调制 (DPCM)
为了提高压缩效率,块内并非直接存残差,而是使用前向预测:
plaintext
Predicted Pixel = Left Neighbor Pixel
Residual = Current Pixel - Predicted Pixel
- 第一个像素使用绝对数值。
- 后续像素存储与左边像素的差值。
- 由于差值通常很小,更低位宽即可表示。
Step 3:存储布局
plaintext
[2bit Mode][Base Value][Residual Data (Packed)]
- 解压时,先读 Mode,确定位宽;再读 Base,逐像素重建。
五、这种设计对 3DNR 的独特价值
- 运动估计精准 :由于是帧内压缩,不涉及帧间预测,不会引入额外的运动矢量误差,保证了 3DNR 运动检测的准确性。
- 抑制噪声漂移:采用近无损压缩,不会像视频编码那样产生振铃效应,避免噪声被压缩算法放大后带入下一帧,导致噪声累积。
- 低时延反馈:3DNR 计算当前行时,能瞬间解压出参考帧对应行的块,完美匹配流水线时序,无需额外的行缓冲缓存整行解压数据。
六、总结
工业级 ISP 参考帧压缩,本质上是一种 "带地址索引的、分块的、自适应位宽的 DPCM 打包存储系统"。
它牺牲了极致的压缩比(通常压缩比在 1.5x~2.5x),换取了等同于未压缩内存的随机访问能力 和硬件级的实时性。这是在 DDR 带宽、芯片面积、图像质量三者之间做出的最优工程妥协,也是现代高清 ISP 能够实时运行 3DNR 的底层技术支柱。