3、硬件加速方案:ISP管线中的对比度统计引擎、硬件窗口配置、DMA传输优化

做反差对焦,最怕什么?

怕CPU被统计计算占满,怕帧率掉得没法看,怕对焦像蜗牛爬。

说白了,纯软件算对比度,就是拿CPU的命去填。我早年在一个1080p项目上吃过这个亏——CPU占用率飙到80%,系统直接卡成幻灯片。从那以后,我对硬件加速这件事就特别上心。

这一章,我们就聊聊ISP管线里那些能帮我们“偷懒”的硬件模块。

3.1 对比度统计引擎:硬件替你算好了

现代ISP里,基本都集成了对比度统计引擎(Contrast Statistics Engine)。它长在ISP管线里,位置通常在demosaic和gamma校正之后。

它的工作方式很简单:

  • 对每个像素或像素块计算亮度梯度
  • 累加整个窗口内的梯度值
  • 输出一个或多个统计值给CPU

你想想看,CPU只需要读几个寄存器,就能拿到整幅画面的对比度信息。这比在CPU上逐像素算快了两个数量级不止。

核心优势:硬件统计引擎不占用CPU周期,统计结果在每一帧的VBlank期间就已经准备好了。CPU在VSYNC中断里读一下就行,零等待。

我习惯把这类引擎的输出叫做“硬件AF统计值”。它通常包含:

  • 亮度高频能量——边缘锐度的直接体现
  • 区域统计直方图——用于判断场景亮度分布
  • 峰值位置——部分高端ISP会直接给出最大对比度位置

3.2 硬件窗口配置:别让引擎算没用的地方

硬件统计引擎虽然快,但它不会自己判断该算哪里。你得告诉它:哪些区域是你要对焦的。

这就是硬件窗口配置要做的事。

我见过不少工程师,直接把整幅画面丢给统计引擎。结果呢?天空、墙壁、纯色背景这些没纹理的区域,把统计值稀释得一塌糊涂。对焦马达来回跑,就是锁不住。

避坑指南:我曾经在一个户外项目上,窗口设成了全画面。晴天还好,一到阴天,整个画面灰蒙蒙的,对比度统计值几乎没变化,对焦直接失效。后来把窗口缩小到画面中央1/4区域,问题立刻解决。

窗口配置的几个关键参数:

参数 说明 我的建议
窗口起始坐标 (X, Y) 统计区域的左上角 避开画面边缘,那里畸变和噪声最大
窗口宽度、高度 统计区域的大小 建议占画面1/4到1/2,别太小也别太大
子窗口数量 部分ISP支持多个子窗口 多窗口适合多目标对焦,但配置复杂
权重矩阵 窗口内不同位置的权重 中央权重高,边缘权重低,模拟人脸对焦

嗯,这里要注意:窗口配置不是设一次就完事了。变焦、场景切换、物体移动,都可能需要动态调整窗口位置和大小。

3.3 DMA传输优化:别让数据堵在路上

硬件算好了,窗口也配好了,统计值怎么给CPU?

走DMA(Direct Memory Access)。

DMA的好处是:不经过CPU,直接在ISP和DDR之间搬数据。但DMA用不好,反而会成为瓶颈。

我踩过的一个坑:统计值数据量不大,但每次DMA传输都要重新配置描述符。结果DMA配置开销比传输本身还大。后来改成“一次配置,循环传输”的模式,效率直接翻倍。

优化技巧:使用DMA的“链表模式”(Scatter-Gather DMA)。把多个统计值缓冲区的描述符链成一条链表,DMA会自动逐个传输。CPU只需要在链表末尾加一个中断通知,不用每传一次就中断一次。

DMA传输优化的几个要点:

  • 缓冲区对齐:DMA通常要求缓冲区地址按32字节或64字节对齐。不对齐的话,要么报错,要么性能骤降。
  • 突发传输长度:根据总线宽度设置合适的突发长度。128字节的突发通常比32字节效率高。
  • 中断合并:多个统计值传输完成后,只触发一次中断。别让CPU被频繁中断淹死。
  • 缓存一致性:DMA写DDR,CPU读DDR,中间有cache问题。记得做cache invalidate,否则读到的是脏数据。

说白了,DMA优化就是让数据流动起来,别让CPU在中间当搬运工。

3.4 整体流程:硬件加速的AF数据通路

把上面三个模块串起来,就是一条完整的硬件加速AF数据通路:

硬件加速AF数据通路流程图 硬件加速AF数据通路 Sensor 原始数据 ISP 管线处理 对比度统计引擎(硬件计算) DMA 传输到 DDR CPU 读取统计值 硬件窗口配置 决定统计引擎算哪里 DMA 传输优化 链表模式、中断合并

整个流程里,CPU只做两件事:

  1. 在初始化时配置窗口参数和DMA描述符
  2. 在每一帧的VSYNC中断里读取统计值

剩下的,全交给硬件。这才是真正的“硬件加速”。

性能对比:纯软件方案,VGA分辨率下CPU占用约15-20%。硬件加速方案,同样分辨率下CPU占用不到1%。1080p下差距更明显,软件方案基本跑不动,硬件方案依然游刃有余。

最后说一句:硬件加速不是万能的。窗口配错了,DMA配置错了,照样白搭。但只要你把这三个模块调顺了,反差对焦的速度和稳定性,会上一个台阶。