1. 实时性基础概念:帧率、延迟、抖动、Pipeline模型
各位同学,咱们今天聊点实在的。做手机Camera这么多年,我见过太多人一上来就调算法、调参数,结果发现预览卡顿、拍照延迟、录像掉帧——说白了,就是没把实时性这几个基础概念吃透。
实时性不是玄学,它是可以量化的。我习惯把实时性拆成四个维度:帧率、延迟、抖动、Pipeline模型。这四个词,你搞懂了,Camera HAL/ISP的优化方向就清晰了。
1.1 帧率(Frame Rate)
帧率,就是每秒输出的画面数量,单位fps。你想想看,30fps意味着每33.3ms出一帧,60fps就是16.7ms一帧。
但这里有个坑——帧率不是越高越好。我在项目中遇到过,某平台把预览帧率从30fps提到60fps,结果ISP带宽爆了,反而导致丢帧。嗯,这就是典型的“贪多嚼不烂”。
| 场景 | 目标帧率 | 单帧预算 | 典型瓶颈 |
|---|---|---|---|
| 预览 | 30fps | 33.3ms | ISP处理、显示合成 |
| 录像(1080p) | 30fps | 33.3ms | 编码器、DDR带宽 |
| 录像(4K) | 30fps | 33.3ms | ISP+编码器双压 |
| 高帧率录像 | 60/120fps | 16.7/8.3ms | Sensor读出、ISP管线 |
1.2 延迟(Latency)
延迟,是从“事件发生”到“用户看到”的时间差。手机Camera里,延迟分好几段:
- Sensor曝光延迟:从触发到曝光完成,跟帧率、曝光时间有关
- ISP处理延迟:RAW图进,YUV/JPEG出,管线级延迟
- 显示延迟:从Buffer到屏幕刷新,跟VSync对齐有关
- 端到端延迟:用户按快门到看到照片,这个最直观
我曾经调试一个“拍照响应慢”的问题,发现端到端延迟高达300ms。逐段排查后发现,ISP的HDR融合占了150ms——说白了,就是算法太重了。
1.3 抖动(Jitter)
抖动,是帧间隔时间的波动。你想想看,30fps的理想帧间隔是33.3ms,但如果实际间隔是30ms、35ms、32ms这样跳,就是抖动。
抖动比帧率下降更可怕。为什么?因为帧率下降只是“卡”,抖动会导致“忽快忽慢”,人眼对这种不规律变化特别敏感。
我遇到过最典型的抖动场景:Sensor帧同步信号不稳定,导致ISP收到的帧间隔忽长忽短。最后发现是Sensor的MCLK时钟抖动过大——硬件问题,软件怎么调都没用。
1.4 Pipeline模型
Pipeline模型,是理解实时性的核心框架。说白了,就是把Camera处理流程拆成一个个阶段,每个阶段有固定的输入、处理、输出。
我习惯用三段式Pipeline来建模:
- Sensor阶段:曝光、读出、输出RAW
- ISP阶段:Bayer处理、降噪、HDR融合、色彩校正、缩放
- 后处理阶段:编码、显示、存储
每个阶段都有自己的帧率、延迟、抖动特性。优化时,要找到最慢的那个阶段——也就是瓶颈。
1.5 四个概念的关系
帧率、延迟、抖动、Pipeline模型,不是孤立的。它们的关系,我总结成一句话:
举个例子:你设计一个30fps的预览Pipeline,单帧预算33.3ms。如果Sensor读出用了20ms,ISP处理用了15ms,后处理用了5ms,总延迟40ms——已经超了。这时候要么优化ISP,要么降低帧率到25fps。
嗯,这就是实时性调优的日常。没有银弹,只有权衡。