1. 课程导论:连拍场景定义、帧率稳定性指标、HAL层在连拍中的角色

1.1 连拍场景定义与典型特征

连拍(Burst Shot)是移动设备相机最核心的高负载场景之一。用户按下快门后,系统需要在极短时间内连续捕获多帧图像,并完成自动曝光(AE)、自动对焦(AF)、自动白平衡(AWB)的实时收敛。连拍场景对 Camera HAL(硬件抽象层)的帧率稳定性提出了极高要求。

特征维度 典型值 / 范围 对HAL的挑战
帧率目标 10 fps ~ 30 fps(取决于传感器和ISP能力) 帧间隔抖动必须控制在 ±1 ms 以内
连拍持续时长 2 s ~ 10 s(连续捕获 20 ~ 300 帧) 长时间高负载下不能出现帧率掉队
传感器输出 RAW10 / RAW12,分辨率 12MP ~ 50MP 带宽压力大,DMA传输易成为瓶颈
ISP管线 多帧降噪 + HDR + 拜耳处理 管线深度增加导致帧延迟累积
内存/CPU负载 高(大量帧数据在内存中排队) 内存带宽竞争导致帧丢失
关键认知: 连拍不是简单的“拍很多张照片”,而是 实时视频流 + 逐帧静态处理 的混合模式。HAL层必须在每一帧的VSync中断到来前完成上一帧的送出,否则帧率就会下降。

1.2 帧率稳定性核心指标

帧率稳定性不能只看平均帧率,必须用以下三个指标量化评估:

  1. 瞬时帧率(Instant FPS):相邻两帧时间戳差值的倒数。理想情况下,10 fps 连拍时每帧间隔应为 100.0 ms,允许抖动 ≤ 1.0 ms。
  2. 帧间隔标准差(Frame Interval StdDev):统计连拍期间所有帧间隔的标准差。标准差越小,帧率越稳定。优秀阈值:≤ 0.5 ms。
  3. 丢帧率(Frame Drop Rate):HAL层因超时或缓冲区满而丢弃的帧数占总请求帧数的比例。连拍场景要求丢帧率 ≤ 0.1%。
指标 计算公式 优秀阈值 可接受阈值
瞬时帧率 FPSi = 1000 / (ti - ti-1) 目标值 ± 1% 目标值 ± 5%
帧间隔标准差 σ = √( Σ(Δti - μ)² / N ) ≤ 0.5 ms ≤ 2.0 ms
丢帧率 D = Ndrop / Nrequest × 100% ≤ 0.1% ≤ 1.0%
实训提示: 在后续章节中,你将使用 adb shell dumpsys media.camera 和 Choreographer 帧回调来采集这些指标。请提前准备好 Pixel 6/7 或等效设备。

1.3 HAL层在连拍中的核心角色

Camera HAL层位于 Android 相机框架与硬件驱动之间,是连拍帧率稳定性的 第一道防线。HAL层在连拍场景中承担以下关键职责:

  • 帧请求调度:将上层下发的 capture request 按 VSync 节奏分发给 sensor 驱动,确保帧间隔均匀。
  • 缓冲区管理:维护 GraphicBuffer 池,避免因 buffer 分配延迟导致帧阻塞。
  • ISP管线控制:协调 ISP 各模块(BLC、AWB、Demosaic、NR)的处理时间,防止单帧处理超时。
  • 帧时间戳生成:在 sensor 曝光结束时刻打上硬件时间戳,用于上层计算帧间隔。
  • 丢帧检测与上报:当 sensor 或 ISP 无法按时完成时,HAL层必须主动丢弃帧并通知框架。
Camera HAL 连拍帧处理架构 Android Camera Framework Camera HAL (HAL3.4 / HIDL) processCaptureRequest / flush / dump 帧请求调度器 Buffer 池管理 ISP 管线控制 时间戳生成 Sensor + ISP 硬件 HAL层关键约束 每个 capture request 必须在 VSync 周期内完成:process → sensor exposure → ISP → buffer return

1.4 连拍帧率稳定性关键路径

从用户按下快门到第一帧显示,再到连续帧稳定输出,HAL层需要经过以下关键路径:

  1. Request 下发:Framework 调用 processCaptureRequest(),HAL将请求加入内部队列。
  2. Sensor 曝光:HAL通过 V4L2 或 MIPI CSI 接口配置 sensor 曝光时间、增益。
  3. RAW 数据读取:sensor 输出 RAW 数据,经 DMA 写入系统内存。
  4. ISP 处理:HAL驱动 ISP 管线完成黑电平校正、去马赛克、降噪、色调映射。
  5. Buffer 返回:处理完成的帧通过 processCaptureResult() 回调返回给 Framework。
常见陷阱: 很多开发者只关注 ISP 处理时间,却忽略了 DMA 带宽竞争 和 Buffer 分配延迟。在连拍场景中,这两个因素往往是帧率抖动的首要原因。后续章节将专门讲解如何通过 perfetto 抓取 DMA 延迟。

1.5 本章小结与实训目标

知识点 掌握要求 实训关联
连拍场景定义 理解连拍与普通拍照/录像的区别 实训1:使用 Camera2 API 触发连拍
帧率稳定性指标 能计算瞬时帧率、标准差、丢帧率 实训2:编写帧间隔采集脚本
HAL层角色 掌握 HAL 在帧调度、buffer管理、ISP控制中的职责 实训3:HAL dump 日志分析
关键路径 能画出 request → sensor → ISP → callback 的时序图 实训4:perfetto 抓取连拍trace