Android Camera | 高通Camx AF对焦调试全攻略

AF(自动对焦)是 Camera 调优中最复杂的模块之一。用户对”对不上焦”、”对焦慢”、”跑焦”的容忍度极低——一张模糊的照片基本等于废片

这篇文章基于高通 Camx 框架,梳理 AF 对焦的完整流程和调试方法。重点是实战日志分析异常 case 排查,不只是讲原理。

一、AF 对焦基本原理

1.1 三种核心对焦方案

方案原理速度适用
PDAF相位检测需要 sensor 支持 PDAF 像素
CDAF反差检测所有 sensor 都支持
HAF混合对焦快+准主流方案(高通)

PDAF(Phase Detection Auto Focus)

通过 sensor 上特殊的像素(遮光像素)获取左右眼图像的相位差,直接计算出对焦距离。优点是速度快,缺点是需要 sensor 支持。

CDAF(Contrast Detection Auto Focus)

通过评估图像的清晰度(对比度)来判断是否对焦准确。优点是不需要特殊像素,缺点是速度慢——需要反复移动对焦马达寻找最清晰的点。

HAF(Hybrid Auto Focus)

结合 PDAF 和 CDAF,先用 PDAF 快速接近对焦位置,再用 CDAF 微调。这是目前主流手机采用的方案。

1.2 AF 关键概念

• Focus Position:对焦马达位置,通过 VCM(音圈马达)控制

• Confidence:PDAF 计算的置信度,越高越可信

• Progress:对焦进度,100 表示对焦完成

• Range Near/Far:对焦搜索范围

二、Camx AF 对焦流程

2.1 整体流程

App 发送对焦请求
  ↓
Camera2 Framework
  ├── 设置 AF trigger
  ├── 设置 AF region(对焦区域)
  └── 设置 AF mode(AUTO/MACRO/CONTINUOUS)
  ↓
Camx HAL
  ├── STATS 节点:接收 sensor 统计数据
  ├── AF 算法节点(af_haf.cpp):计算对焦位置
  │     ├── PDAF 计算 → 得到相位差 → 计算 defocus 距离
  │     └── CDAF 计算 → 评估对比度 → 微调位置
  ├── AEC 节点:AE 收敛后再触发 AF
  └── Actuator 节点:控制 VCM 马达移动
  ↓
Driver
  └── 写 VCM 寄存器 → 马达移动到目标位置

2.2 AF 状态机

INACTIVE → ACTIVE_SCAN → FOCUSED_LOCKED
                       ↘ NOT_FOCUSED_LOCKED

• INACTIVE:AF 未激活

• ACTIVE_SCAN:正在搜索对焦位置

• FOCUSED_LOCKED:对焦成功并锁定

• NOT_FOCUSED_LOCKED:对焦失败并锁定

调试技巧:看到 NOT_FOCUSED_LOCKED 频繁出现,说明对焦逻辑有 bug。如果一直停在 ACTIVE_SCAN,说明搜索过程卡住了。 

三、AF 调试日志分析(重点)

3.1 开启 AF Debug 日志

修改文件:camxoverridesettings.txtlogVerboseMask=0x08000000

推送方式adb push camxoverridesettings.txt vendor/etc/camera/
adb shell reboot

说明:0x08000000 是 STATS_AF 模块的 verbose 日志 mask。开启后会输出 AF 算法的详细过程日志。 

3.2 典型对焦过程日志

搜索命令logcat | grep “STATS_AF”

典型日志输出CamX: [VERB][STATS_AF] af_haf.cpp:2036: af_haf_focus_converge HAF_CONVERGE_STATUS: 2
CamX: [VERB][STATS_AF] af_haf.cpp:2043: af_haf_focus_converge Output:
    progress = 100,
    next_pos = 311,
    range_near = 0,
    range_far = 399,
    confidence = 100
CamX: [VERB][STATS_AF] af_haf.cpp:2049: af_haf_focus_converge AF_HAF_SEARCH_DONE:

日志字段解读

字段含义正常值
HAF_CONVERGE_STATUS对焦收敛状态2=收敛成功
progress对焦进度100=完成
next_posVCM 下一步目标位置马达行程范围内的值
range_near搜索范围下限0
range_far搜索范围上限399(取决于 VCM 型号)
confidencePDAF 置信度越高越好,100 为最高
AF_HAF_SEARCH_DONE搜索完成标志出现表示一轮对焦结束

四、4 个常见对焦问题排查

问题1:对焦不收敛

现象:HAF_CONVERGE_STATUS 持续为 0 或 1(搜索中),progress 一直不到 100。

排查方向

• 检查 PDAF 标定数据是否正确

• 检查 VCM 驱动 IC 配置是否正确

• 检查 AF 搜索范围是否合理

问题2:Confidence 偏低

现象:confidence 持续偏低(< 50)。

排查方向

• PDAF 像素标定有问题

• sensor 的 PDAF 像素被遮挡

• 环境光线太暗

问题3:next_pos 异常

现象:next_pos 在 0 或 399(极限位置)徘徊。

排查方向

• VCM 行程配置不对

• AF 搜索范围设置太窄

问题4:对焦速度慢

现象:从触发对焦到 FOCUSED_LOCKED 耗时过长(> 1s)。

排查方向

• AE 是否先收敛(AF 依赖 AE 收敛)

• PDAF 标定数据精度

• VCM 响应速度(驱动电流是否足够)

五、实用调试技巧

5.1 确认 VCM 是否正常工作

方法1:dump VCM 寄存器adb shell “echo 0x0A00 > /sys/kernel/debug/camera/sensor/vcm_reg && cat /sys/kernel/debug/camera/sensor/vcm_reg”

方法2:日志确认logcat | grep -i “actuator|vcm|dac”

5.2 确认 PDAF 数据是否正常

logcat | grep -i “pdaf|phase”

正常情况下应该能看到 PDAF 数据统计日志。如果没有,说明 PDAF 配置有问题。

速查表

问题关键日志排查方向
对焦不收敛HAF_CONVERGE_STATUS=0/1PDAF 标定、VCM 驱动
Confidence 偏低confidence<50PDAF 标定、光线
next_pos 异常next_pos=0/399VCM 行程、搜索范围
对焦慢耗时>1sAE 收敛、PDAF 精度

AF 调试的关键是看懂日志。每条日志字段背后都对应着一个具体的算法步骤,结合现象对照排查,效率会高很多。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐