典型 ISP Pipeline DDR 读写位置图:
cpp
Sensor → MIPI RX
│
└──→ [RAW 输入帧缓冲] ⚠️ DDR WRITE + READ (必备)
│
├─ BLC / DPC (片上)
├─ LSC / DPC (片上)
│
└──→ [Bayer 预处理后缓冲] 🟢 DDR WRITE + READ (常见)
│
├─ Demosaic / HDR 融合 ⚠️ 多帧读写
│ │
│ └──→ [RGB 中间帧] 🟢 DDR WRITE + READ
│ │
│ ├─ WB / CCM / Gamma / CSC
│ │
│ └──→ [YUV 主帧] ⚠️ DDR WRITE + READ (必备)
│ │
│ ├─ YNR / CNR / TNR ⚠️ 多帧历史缓冲 DDR
│ ├─ Edge / Sharpen / 3D LUT
│ │
│ ├───────────────────────────┬───────────────────┐
│ │ │ │
│ ▼ ▼ ▼
│ [Preview 路缓冲] [Video 路缓冲] [Snap 高分辨率缓冲]
│ DDR WR DDR WR DDR WR
│ │ │ │
│ └─ 缩放/Crop/旋转 └─ 编码输入 └─ JPEG 输入
│
└── 3A Stats 抽取 ← [Stats 网格缓冲] 🟢 DDR WRITE
各节点读写属性说明(按优先级)
🔴 强制 DDR 读写(几乎所有平台都必须)
-
RAW 输入帧缓冲
- MIPI 接收异步解耦,必须写 DDR
- 读写并行,典型 2~3 帧乒乓
-
YUV 主帧缓冲
- 多路输出分支起点
- 后续 Preview/Video/Snap 都从这里读
-
TNR / 多帧 HDR 历史帧缓冲
- 跨帧算法,必须多帧读写 DDR
- 带宽主要贡献者
🟢 常见 DDR 读写(平台可选,影响带宽很大)
-
Bayer 预处理后缓冲(BLC/LSC 之后)
- 便于分块处理、回灌调试
- 高性能链路可做片上直通不写
-
RGB 中间帧缓冲
- 便于算法分段迭代、质量调试
- 压缩开启后带宽成本下降明显
-
Stats 统计缓冲
- AE/AWB/AF 网格统计结果
- 只读给 CPU/MCU,带宽较小
🟡 片上 Line Buffer / Block Buffer(不占 DDR 带宽)
- BLC、DPC、LSC、Demosaic 局部滤波
- 3×3 / 5×5 卷积类算子
- 只使用片上 SRAM,不产生 DDR 读写
简化版 "最小带宽链路"(优化目标)
如果你要做低带宽配置 ,目标是:尽量减少中间写回点 ,只保留强制节点:
cpp
Sensor → MIPI → RAW 输入缓冲 ⚠️
→ 全链路片上直通 → YUV 主帧 ⚠️
→ 多路输出
即:
- 只保留:RAW 输入、YUV 主帧、多路输出、TNR/HDR 多帧
- 关闭 Bayer/RGB 中间节点写回
- 关闭调试 Dump
配套带宽速记
- RAW 写读:2 × 单帧带宽
- YUV 写读:2 × 单帧带宽
- TNR 3 帧:+3 × 单帧读
- Preview/Video/Snap 三路写:+3 × 单帧写