25. 低功耗模式设计:极致省电模式、低功耗预览模式、低功耗拍照模式

说到相机功耗,很多同学第一反应就是「把帧率降下来」。嗯,这个思路没错,但太粗糙了。我这些年调过的项目里,真正能把功耗压到极致又不影响用户体验的,靠的是分场景、分模式、分策略的精细化设计。

今天我们就来聊聊三种低功耗模式:极致省电模式低功耗预览模式低功耗拍照模式。这三种模式各有各的适用场景,也各有各的坑。

核心思路:相机功耗优化不是一刀切地降帧率,而是根据用户当前的操作意图,动态调整硬件模块的工作状态。说白了,就是「该省的时候省,该用的时候用」。

25.1 极致省电模式

这个模式一般用在系统电量极低(比如低于5%)或者后台相机的场景。用户可能只是扫个码、拍个文档,对画质要求不高,但希望相机别把最后一点电吃光。

我个人习惯把极致省电模式拆成三个层面:

  • Sensor 层面:强制使用 binning 模式,输出分辨率降到 VGA 甚至更低。同时关闭 HDR、多帧合成等重计算功能。
  • ISP 层面:关闭所有后处理算法,只保留最基本的 demosaic 和 gamma 校正。降噪、锐化、色彩增强全部 bypass。
  • CPU/GPU 层面:把 camera HAL 的线程优先级降到最低,避免抢占系统资源。同时关闭所有预览回调,只保留最基础的帧输出。

我曾经在一个低端项目上遇到过一个问题:极致省电模式下,预览画面卡得跟幻灯片一样,但功耗反而没降多少。查了半天发现是 sensor 的 binning 模式没生效,实际还在输出全分辨率,只是上层做了缩略图。嗯,这个坑大家要注意——一定要确认底层硬件确实工作在低功耗状态,不能只看上层表现。

小技巧:在极致省电模式下,可以主动降低 sensor 的模拟增益和数字增益,让 sensor 工作在更低的供电电压下。虽然画面会暗一些,但功耗能再降 10%-15%。

25.2 低功耗预览模式

这个模式是日常使用中最常见的。用户打开相机取景,但并没有在拍照或录像。这时候我们的目标是:让预览看起来流畅,但背后尽量少干活

我建议的做法是:

  1. 帧率动态调节:根据场景复杂度动态调整预览帧率。静止场景降到 15fps,运动场景升到 24fps。不要固定 30fps 跑满。
  2. 降低预览分辨率:预览输出用 720p 甚至 480p 就够了,没必要跟拍照分辨率一样。用户看的是取景框,不是数毛。
  3. 关闭不必要的 sensor 模式:如果 sensor 支持多路输出,预览用一路低分辨率流,拍照用另一路高分辨率流。这样拍照时不用切换模式,省掉 mode switch 的功耗。

你想想看,预览的时候用户其实只是在「看」,并没有在「拍」。那我们为什么要让 ISP 全速运转?把那些拍照才需要的算法(比如多帧降噪、超分辨率)全部关掉,预览只走一个轻量级的 pipeline。

注意:低功耗预览模式下,要小心 AE/AWB 的收敛速度。因为帧率降低了,AE/AWB 的更新频率也会变慢。如果用户突然从暗处走到亮处,画面可能会闪烁好几秒。我建议在低功耗预览模式下,仍然保持 AE/AWB 的快速收敛,但降低其他模块的功耗。

25.3 低功耗拍照模式

这个模式比较特殊。用户按下了快门,但又不希望像普通拍照那样消耗大量功耗。典型场景是:文档扫描、二维码识别、连续抓拍

低功耗拍照模式的核心策略是:

  • 单帧拍照:关闭多帧合成,只拍一帧。画质可能差一点,但功耗只有普通拍照的 1/3 到 1/5。
  • 降低 JPEG 质量:把 JPEG 压缩质量从 95% 降到 75%。文件小了,编码功耗也小了。
  • 关闭后处理:不跑任何算法,直接从 sensor 拿 raw 数据,经过简单的 ISP 处理后输出 JPEG。

我记得有一次做扫码优化,客户要求扫码功耗不能超过 200mW。普通拍照模式动辄 500mW+,根本不可能。后来我们用了低功耗拍照模式:sensor 用 binning 模式输出 640x480,ISP 只做最基本的处理,CPU 只跑一个轻量级的二维码解码库。最终功耗压到了 180mW,完美达标。

关键点:低功耗拍照模式不是「阉割版」的拍照,而是「精准匹配场景」的拍照。你要清楚用户在这个场景下真正需要什么——是画质?是速度?还是省电?然后针对性地裁剪功能。

25.4 三种模式的切换策略

光有模式还不够,关键是怎么切换。我见过不少项目,模式定义得很漂亮,但切换逻辑写得一塌糊涂。结果用户从预览切到拍照时,功耗反而飙升了一下。

我建议的切换策略是:

当前模式 目标模式 切换策略
极致省电 低功耗预览 先恢复 sensor 到正常 binning 模式,再逐步开启 ISP 算法。不要一次性全开,避免电流尖峰。
低功耗预览 低功耗拍照 保持 sensor 当前模式,只切换 ISP pipeline 到拍照模式。如果 sensor 支持多路输出,直接复用预览流。
低功耗预览 普通拍照 先切换 sensor 到全分辨率模式,同时预热 ISP 算法。等 sensor 稳定后再触发拍照。

这里有个细节:切换过程中要避免「乒乓效应」。比如用户快速切换场景,导致模式来回跳。我一般会加一个 500ms 的去抖延时,确保模式切换是稳定的。

25.5 整体架构图

下面这张图展示了三种低功耗模式在相机系统中的位置和关系:

相机低功耗模式架构图 用户操作 模式选择器(去抖500ms) 极致省电模式 Sensor: VGA binning ISP: 仅基础处理 CPU: 最低优先级 低功耗预览模式 帧率: 15-24fps动态 分辨率: 720p/480p 算法: 轻量级pipeline 低功耗拍照模式 单帧拍照 JPEG质量75% 关闭后处理算法 Camera HAL / Sensor / ISP 硬件层 极致省电 低功耗预览 低功耗拍照

25.6 避坑指南

最后,我把自己踩过的坑总结一下,希望能帮大家少走弯路:

  • 不要只看 sensor 功耗:我曾经以为 sensor 是功耗大头,结果发现 ISP 和 DDR 带宽才是真正的电老虎。优化 sensor 的同时,一定要关注 ISP pipeline 和内存访问。
  • 模式切换要平滑:用户从低功耗预览切到普通拍照时,如果画面突然闪一下或者卡一下,体验会很差。我建议在切换前先预加载目标模式的配置,等一切就绪后再切换。
  • 别忘了测试边界条件:比如在极致省电模式下,用户突然按快门拍照。这时候系统应该怎么做?是忽略拍照请求,还是先切到低功耗拍照模式再拍?这些边界逻辑一定要想清楚。
  • 功耗数据要实测:不要只看理论计算。我遇到过 sensor 的 binning 模式在规格书上写的是 50mW,实际测出来 80mW。所以一定要用电流计实测,以实测数据为准。

我的习惯:每次调完一个低功耗模式,我都会在三个场景下做功耗测试:亮环境、暗环境、快速切换场景。这三个场景基本能覆盖 90% 的用户使用情况。

好了,关于低功耗模式设计就聊到这里。这三种模式不是孤立的,它们需要配合系统的功耗管理策略一起工作。实际项目中,你可能还需要考虑 thermal 限制、电池老化等因素。但核心思路不变:精准匹配场景,动态调整策略,该省则省,该用则用