1. 项目概述与调试背景
1.1 为什么PDAF调试是摄像头开发里的硬骨头
接触展锐平台的PDAF调试,最早是在一个偏中端的项目上。当时客户要求前摄支持PDAF对焦,拿到样机实测发现对焦速度倒是不慢,但光线稍微暗一点就会频繁拉风箱,对焦成功率也上不去。后续跟进这个问题的过程中,我把展锐平台的PDAF调试流程完整走了一遍,也算把这块从原理到实操摸了个透。
先给刚入行的朋友捋一下概念。PDAF全称是Phase Detection Auto Focus,相位检测自动对焦。它在传感器上有专门的遮蔽像素对,用来接收穿过镜头不同区域的光线,再通过计算左右像素的相位差,直接判断当前对焦位置是前焦还是后焦,以及偏离了多少。相比传统的反差对焦(CDAF)需要反复移动镜头寻找对比度峰值,PDAF的第一次对焦就能给出方向和步长,所以对焦速度更快,这也是现在中高端摄像头几乎标配PDAF的原因。
展锐平台做PDAF调试,本质上就是两件事:第一,把传感器输出的原始相位数据正确读出来并计算成可信赖的失焦量;第二,把算出来的失焦量转换成镜头驱动(VCM)的实际移动步数,让镜头一步到位。听着简单,真正调起来牵涉到传感器配置、平台校准、算法参数、工厂端标定等多个环节,任何一个环节出问题,最终表现都是对焦不准或者对焦慢。
1.2 这套调试方案适合谁看
在展开之前,先交代一下这篇内容的适用范围。它主要面向三类人:
- 刚接手展锐平台摄像头调试的工程师,对PDAF的流程还停留在概念层面,需要一份可以照着做的实操参考。
- 做摄像头模组FAE或者驱动开发的同行,在客户项目里遇到PDAF相关问题时,需要快速定位是传感器问题还是平台配置问题。
- 做算法或者效果调试的朋友,想了解展锐平台PDAF调试的整体框架和关键参数的含义。
我在这篇文章里会以展锐平台的PDAF调试流程为主线,从原理到实操,从参数配置到问题排查,尽量把每个环节讲透。同时也说明一点,展锐不同芯片平台的PDAF模块代码和文档位置可能略有差异,但整体思路和调试方法是一致的,理解了这套逻辑,换平台只是换参数的问题。
2. 原理拆解与方案选型
2.1 PDAF像素结构与相位差计算的底层逻辑
先讲传感器端的原理,这部分决定了后续所有调试参数的意义。
PDAF传感器在像素阵列里会安插特定的相位检测像素,常见的结构是成对出现,分别遮挡左半部分和右半部分(也有上下遮挡的,但横向遮挡居多)。光线通过镜头后,不同位置的出瞳光线会落在不同的像素对上。当镜头处于合焦位置时,左右像素接收到的光线强度是均衡的;当镜头离焦时,同一物体在左右像素上成像的位置会出现偏移,这个偏移量就是相位差。
传感器会把这些掩蔽像素的原始数据输出,DSP或者ISP端再对数据进行处理。展锐平台通常支持两种PDAF类型,一种是掩蔽像素直接参与成像的2x1型,一种是像素做binning处理或者专门控制的类型。不同的类型,相位差计算的原始数据格式不一样,调试时的参数含义也有差异。这点要特别留意,很多工程师习惯于套用高通平台的参数思维,到了展锐平台容易水土不服。
相位差的计算,本质上是寻找左右像素信号序列的最佳匹配偏移量。传感器输出的PD数据经过ADC转换后,每个掩蔽像素对应一个数字值,把一行或者一列中的PD像素值整理成序列,通过互相关运算寻找匹配位置,得出的偏移量换算成失焦距离,再通过镜头运动轨迹映射成VCM的驱动步数。
2.2 展锐平台调试方案的整体架构
展锐平台的PDAF调试不是单一模块,而是一条完整的数据链路。我这里把整体架构画成一个处理链来理解:
传感器PD原始数据 → ISP PD统计 → 平台PDAF算法库 → 失焦量输出 → VCM驱动 → 镜头位置控制 → 合焦判定
这条链路里的每个节点,都有对应的调试文件和开关。我把它们归纳成几个层面:
- 传感器层:sensor driver里的PD pixel坐标定义、PD模式切换、PD数据输出的配置。
- ISP层:展锐ISP里的PD统计模块配置,包括PD block的尺寸、统计窗口的位置、像素格式选择等。
- 算法层:PDAF算法库的开关、参数配置,包括搜索范围、信任度阈值、滤波系数等。
- 驱动层:VCM驱动器的相关参数,包括电流斜率、步进模式,以及PDAF输出到VCM驱动的线性映射关系。
- 工厂层:产线标定数据,包括无穷远偏移标定、macro端标定,以及温漂补偿参数。
调试的时候最好按这个顺序从上到下逐层确认。我见过太多人一上来就调算法参数,结果传感器层的PD像素坐标本来是错的,算法根本收不到有效数据,调半天等于瞎忙。
2.3 为什么不用纯CDAF方案
可能有朋友会问,既然PDAF调试这么麻烦,为什么不能只做CDAF?这个问题的答案直接关系到PDAF调试的必要性理解。
我举一个实际场景。在暗光环境下,反差对焦经常会因为画面局部对比度不足而无法收敛,镜头来回搜索好几个周期才能锁定,用户感知就是"拍照反应慢,画面一直在糊的"。PDAF因为只要有PD像素就能计算出相位差,对画面纹理的依赖小得多,所以暗光下对焦能力和对焦速度都能保持在一个可用的水平。展锐平台在部分场景下还会做PDAF和CDAF的混合策略,也就是PDAF失败时自动切换回CDAF兜底,这种策略本身也是调试工作中的一部分。
另外,从产品规格角度,中高端机型现在普遍要求快速对焦体验,0.2秒内的对焦时间是常见需求,纯CDAF在实际场景里很难稳定做到。所以PDAF调试不是选做题,而是必答题。
3. 核心调试参数与配置文件解析
3.1 PDAF调试涉及的主要文件与参数表
展锐平台的PDAF调试,接触最多的几个文件我列一下。不同平台版本可能文件名有差异,但角色类似:
| 文件/模块 | 作用 | 调试重点 |
|---|---|---|
| sensor驱动文件 | 定义PD像素坐标、PD模式切换时序 | PD坐标是否正确、PD模式是否已生效 |
| ISP PD配置 | 统计窗口、PD数据格式、输出配置 | 统计窗口是否覆盖有效区域,数据格式是否匹配 |
| PDAF算法参数文件 | 搜索范围、阈值、滤波、信任度判断 | 各阈值是否适配当前镜头模组 |
| VCM驱动配置 | 步进模式、电流斜率、行程映射 | 与镜头实际运动曲线的匹配度 |
| 工厂标定文件 | 无穷远/Macro端偏移标定值 | 标定值是否写入,标定算法是否正确 |
重点说一下PDAF算法参数文件。这里面的参数直接决定了对焦行为,每个参数改动了都要重新实测验证。我常用的几个关键参数和调试经验如下:
一个是相位差搜索范围,这个值决定了算法在多大的失焦范围内进行搜索。设置大了,收敛速度会变慢,因为要在更大的范围内找最佳匹配;设置小了,大失焦场景下可能直接找不到有效相位差,导致PDAF失败转CDAF。实际调试时,我会结合镜头的行程和出厂的失焦量分布来定,一般初始值给到行程对应的步数一半左右,再通过实测对焦成功率来微调。
另一个是信任度阈值。算法计算出的相位差结果会有一个置信度评估,低于这个阈值的PDAF结果会被丢弃,防止错误失焦量导致镜头乱跑。这个阈值调高了,PDAF可用率下降,容易频繁回退到CDAF;调低了,偶尔会出现对焦过冲甚至反向运动。经验是先用log的debug输出观察实拍的置信度分布,取一个能覆盖80%以上场景的值作为基准,再针对疑难场景单独调。
还有一个容易被忽略的是滤波系数。相位差计算出来之后会是一个连续的变化序列,为了平滑抖动,算法会对历史结果做滤波。系数太大,对焦响应变慢;太小,容易出现来回抖动。我一般从中间值开始,如果对焦过程中出现过冲则减小系数,如果对焦滞后则增大系数。
3.2 PD像素坐标的确认方法
PD像素坐标是PDAF调试中的第一道关卡,也是很多人容易踩坑的地方。传感器厂家的规格书会给出PD像素在sensor上的分布位置,这些坐标需要正确填写到sensor驱动或者ISP配置里,才能保证ISP从正确的像素位置读取PD数据。
我在实际项目中确认这个坐标的方式,通常分三步:
第一步,查看sensor datasheet中的PD pixel map,确认PD像素在R/G/B通道的分布方式。尤其要注意PD像素是等间距分布还是特殊排列,有些非线性排列在配置时需要额外注意格式。
第二步,通过展锐的调试工具导出PD原始图。展锐的调试环境可以通过dbg接口把sensor输出的RAW数据抓出来,我在PC上把RAW转成图像,然后找几个明显的高对比度边缘区域,确认PD像素位置是否和配置一致。如果PD坐标配置错了,RAW图像上的PD像素会出现在错误的位置,相位差计算必然出错。
第三步,利用平台自带的PDAF calibration工具,扫描一组不同位置的数据,看计算出的相位差是否随失焦量线性变化。这一步能同时验证坐标和算法基础链路是否通畅。
这里要提醒一句,PD像素坐标填错了不一定会有报错,有时候图像上看起来正常,但对焦效果就是不对。我在一个项目里遇到过前置摄像头PDAF经常失败的情况,排查了很久,最后发现是PD坐标填写的时候少了一个offset。所以坐标确认这一关一定不能省,宁愿多花半天时间验证,也不要在错误配置上浪费时间。
3.3 PDAF模式切换时序的关键性
PDAF正常工作,还需要在正确的时机把sensor切换到PD模式。很多sensor的PD功能和normal模式是互斥的,进入PD模式之后画面的某些性能可能会有变化,所以平台通常采用"预览时用PD模式,拍照时切回normal模式"的策略。
这就涉及到PD模式的切换时序。展锐平台一般通过sensor驱动里的mode切换回调来配置PD相关的寄存器。调试的重点是确认切换过程有没有丢帧、有没有花屏、切换耗时是否过长。
我在项目里遇到过一种情况:相机预览进入PD模式后偶发画面有一条灰带,持续一两帧后消失。仔细查下来,是PD模式切换时sensor输出的行同步时序和ISP配置的窗口不匹配,导致部分行数据没有被正确处理。解决方式是在sensor驱动里把PD模式下的dummy line和dummy pixel参数补齐,让输出时序完全符合ISP的预期。
PD模式切换还有一类坑是电流或者功耗相关的问题。PD模式下sensor内部某些电路会额外开启,这在低功耗场景下可能导致电流异常。我通常在完整调试后会用功耗仪测一下预览模式的电流,确认PD模式没有引入不可接受的额外功耗。
4. 实操过程与关键环节实现
4.1 调试环境准备
展锐平台的PDAF调试,环境准备这件事可以节省或浪费很多时间。我这里给出一个标准的准备清单:
硬件方面需要准备调试板或者量产机,一个支持展锐平台的USB调试工具,一台用于观察图像的电脑,以及稳定的电源。如果做工厂标定验证,还需要配一个可以模拟不同物距的测试环境,最简单的是用专注度卡或者对焦测试图卡。
软件方面需要拉取展锐的ISP调试工具。展锐的调试工具可以在线读写ISP寄存器,抓取RAW图,也可以把算法内部状态变量实时dump出来,这是调试PDAF最核心的能力。调试机上需要打开对应的debug开关,编译对应的调试版本。
需要提醒的是,平台版本之间工具差异不小,换平台之后建议先用一个最简单的PDAF工程把整条链路跑通,再做参数精调。我在刚接触展锐平台时,第一次调试就试图直接在一个复杂项目上做,结果工具连不上传感器,排查了半天才发现是debug版本编译的时候少开了宏。
4.2 链路自检:从PD原始数据到相位差输出
在实际调参之前,我习惯先做一遍PDAF链路自检。这一步的价值在于,把底层问题提前暴露出来,而不是等调完参数再去面对各种莫名其妙的故障。
链路自检的步骤大致如下:
第一步,确认PD数据输出。在ISP配置里打开PDAF统计模块,把统计结果打印出来,看看统计窗口内有没有有效的PD像素信号。如果打印出来的统计值全是零或者恒定值,那大概率是PD像素没有正确曝光,或者PD坐标配置错误,或者sensor没有真正进入PD模式。
第二步,确认相位差计算跟随对焦位置变化。用手动方式把镜头移动到不同位置,观察输出的相位差数值是否随失焦距离单调变化。注意这里说的是"单调变化",不是"线性变化"。因为镜头的光学特性决定了相位差和失焦量之间在部分行程段可能不是严格线性关系,所以先确认单调性,再确认稳定性。
第三步,确认相位差的方向性正确。向前移动镜头和向后移动镜头,相位差的符号必须相反。如果符号不对,说明PD像素的左右顺序配置反了,这个问题会导致镜头往合焦的相反方向跑,对焦永远收敛不了。
做完这三步,基本上可以确认底层链路是通的。一个正常工作的PDAF链路,在这个阶段呈现出来的数据应该是有规律的、完全跟手的。
4.3 失焦量到VCM驱动步数的映射调试
底层链路通了之后,下一步是调整失焦量到镜头驱动步数的映射。这一步直接决定了对焦的准确度和速度。
展锐平台的算法层会输出一个失焦距离或者失焦步数,这个值和VCM驱动器需要走的位置之间的换算关系,通常在镜头模组厂提供的VCM标定数据里可以找到。VCM的标定数据一般是一条曲线:给定一个电流值或者DAC值,对应一个镜头实际位置。调试时把这组数据配置到驱动里,算法层计算出的位置量就可以精确转换成驱动量。
在实践过程中有两点值得特别注意:
一是VCM的响应非线性。很多VCM在行程端的响应和中间段不一致,表现是同样的DAC步数变化,在两端的位置变化和中间段不同。这种情况下如果只是简单地做一个线性映射,会导致对焦在近景端或远景端总是差一点稳定不下来。解决方式是把标定曲线分段描述,展锐平台驱动支持多段标定表的配置,把实测分段点填进去即可。
二是VCM的磁滞效应。VCM驱动器在正向运动和反向运动时,同样的DAC值对应的实际位置可能不同,这就是磁滞。高精度的对焦场景下需要考虑这个误差。展锐平台算法层会带一个磁滞补偿参数,调试时可以实测同一位置从远端和近端分别逼近时的DAC值差异,把差值的一半作为补偿量配置进去。
我在一个后摄项目中遇到对焦在特定物距段总是轻微不清晰的问题,检查发现就是这个VCM的磁滞量比较大,后来把磁滞补偿参数加上之后,清晰度明显改善。
4.4 工厂标定的实现逻辑
工厂标定环节是PDAF调试量产落地的最后一环。很多效果调试的时候看起来很好,一上产线就不行,问题往往出在标定环节。
PDAF的工厂标定主要标两个量:一个是无穷远位置对应的偏移量,一个是近焦端对应的偏移量。因为每颗模组的VCM行程和传感器装配位置都存在bias,不把bias标出来,算法算出的绝对位置就是不准的。
标定的具体操作流程一般是:产线端安装好模组后,测试设备分别把镜头推到无穷远端和近焦端,记录PDAF算法输出的原始失焦量,计算偏移并写入模组端存储。展锐平台的标定方案里,这些标定值会被存放在模组的OTP、EEPROM或者flash的特定区域,驱动起来的时候读取并传给算法。
这里提醒一下,标定值和算法参数文件是两套不同性质的数据。标定值是每颗模组不同的个体差异数据,算法参数是统一的效果参数。调试时要把二者分开管理,不要混在一起。我在一个项目上遇到过产线反馈部分模组对焦不准,排查发现是算法参数配置里写死了一个标定偏移值,导致产线标定的数据没生效。
5. 常见问题与排查技巧实录
5.1 对焦失败高频问题的分类与定位思路
PDAF调试中的问题看起来五花八门,但归纳起来逃不出那几类。我做了一张问题的速查表,方便排查的时候快速对照:
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| PDAF完全不工作 | PD像素坐标错误 | 核对sensor datasheet,导RAW图确认PD位置 |
| sensor未切换PD模式 | 确认模式切换时序,检查寄存器配置 | |
| 对焦方向反向 | PD左右像素配置反了 | 手动推镜头位置,观察相位差符号变化 |
| 对焦总是差一点 | VCM标定数据不准确 | 重新获取VCM标定曲线,核对分段表 |
| 暗光下成功率低 | 信任度阈值过高 | 查看置信度分布,降低阈值 |
| 对焦来回拉风箱 | 滤波系数过大或搜索范围不当 | 调节滤波系数和搜索范围 |
| 特定物距段不稳定 | VCM磁滞或非线性 | 配置磁滞补偿,完善分段映射 |
| 冷启动/切换场景后失焦 | 标定值读取失败或未生效 | 检查标定值存储和读取链路 |
这张表覆盖了我在实际项目里遇到频率最高的一批问题。每个方向展开来看,几乎都能对应一段具体的Debug过程,这里不逐一展开了,挑两个典型的详细说一下。
5.2 经典问题复盘:对焦方向反向的排查过程
有一个项目让我印象很深,是前置摄像头在预览时PDAF对焦经常来回乱跑,但看log发现PDAF计算输出的失焦量一直有值。后来把sensor切换到手动对焦模式,手动把镜头推到不同位置,观察PD数据的原始值变化,发现相位差的方向和预期是反的。
根因是sensor的PD像素排列方式对左右像素的定义和算法默认的约定不一致。虽然理论上都是"左边一组、右边一组"的相位像素结构,但具体到sensor的逻辑排列上,可能存在行列互换或者左右颠倒。这种问题在展锐平台上的调试思路很简单:把驱动配置里的PD orientation参数翻一个方向就行,但前提是定位到问题的方向是反的,而不是怀疑算法层。
这位问题的排查日志我没删,之后每次换新的sensor型号做PDAF调试,我都第一时间做方向性验证,也就是前面链路自检里说的那一步。提前花5分钟验证,能省掉后面几天的抓狂。
5.3 经典问题复盘:产线标定值"丢失"的坑
另一个项目上,量产阶段发现部分模组出厂后PDAF对焦不准,比例大概有3%左右。注意,不是完全失效,而是"不准",对焦位置总是偏一点。
排查过程是这样的:先在实验室复测了同批次的问题模组,发现通过产线标定软件重新标定一次之后,对焦恢复正常。这就说明问题出在标定数据的写入或者读取环节,而不是PDAF算法本身。接下来查看写入端的日志,发现标定值确实写成功了,但驱动启动时读取回来的值和写进去的值对不上。
最后定位到原因,是多模组共用一个I2C地址时,代码里选择模组的逻辑在部分时序条件下跑错了分支,导致读标定值的时候读到了另一颗sensor的空间。这个问题在代码里属于偶发性的竞态问题,平时测试环境难以复现,到了产线并发环境下就显出来了。
这个案例给到的经验是:PDAF调试不止是调效果参数,整个数据链路从传感器到算法到产线,每一环都要做可靠性验证。尤其是量产阶段,标定值读取出错的影响面比调参不当大多了。
5.4 暗光场景PDAF成功率低的调试心得
暗光场景是PDAF调试里最磨人的部分,因为问题未必是算法参数单一原因造成的,往往是多种因素叠加。
我调过的暗光PDAF问题里,最常见的原因有这几类:
第一类,PD像素的曝光不足。暗光下PD像素的信号和噪声比下降,计算出的相位差噪声变大,置信度降低。这个时候单纯的调算法阈值效果有限,更有效的手段是确认PD像素的增益设置是否合理,以及PD像素和正常像素的gap值是否偏大。部分sensor提供了专门的PD增益配置,可以用来提升PD信号强度。
第二类,统计窗口覆盖范围太小。暗光下的有效纹理信息本来就少,如果统计窗口选在光滑区域,相位差计算自然不稳定。需要确认ISP配置的PD统计窗口是否跟随AF对焦点移动,并且窗口尺寸足够大。
第三类,算法切换策略太激进。展锐平台支持PDAF和CDAF混合策略,暗光下PDAF的置信度阈值如果设置得和正常光线一样,就会导致频繁的PDAF失败和策略切换。这种情况需要单独给暗光场景配置一个宽松一点的阈值,同时拉长失败确认时间,避免瞬间的置信度波动触发策略切换。
我在手机项目里测试暗光对焦,习惯用一个黑灰色卡纸加一台可以调节亮度的光源,从100 lux一路降到5 lux,每一档都拍一组对焦测试,记录PDAF成功率和收敛时间。这种数据比单看主观效果更能反映问题,也方便参数调整之后对比验证。
5.5 调试工具使用的小技巧
展锐的调试工具功能比较全,但有几个使用技巧是文档里不会细讲的,我这里分享三个很实用的:
第一个,PDAF算法内部变量的实时dump。展锐平台的调试工具支持把算法内部的中间变量输出到log,比如计算出的置信度、搜索步数、滤波后的失焦量。把这些变量打出来,和最终的对焦表现对照,能快速判断问题出在算法计算环节还是VCM执行环节。调试暗光问题时,重点看置信度变量的变化曲线,比一遍遍改参数省事得多。
第二个,RAW图抓取的时机。展锐工具的RAW图抓取可以在指定帧抓取,也可以在触发事件的时候抓取。调试PD像素位置时,一定要抓取PD模式下sensor输出RAW图,并且注意RAW图的格式选项里要选带PD像素的原始输出,而不是ISP处理后的图。选错了格式,看到的是完全不同的数据。
第三个,寄存器读写日志的留痕。在PD模式切换和PDAF初始化流程里,开启寄存器读写日志功能,把每一步的寄存器值记录下来。一旦出现问题,回看日志里有没有异常的寄存器交互,往往能很快发现时序问题或者漏配的寄存器。
6. 效果验证与验收标准
6.1 实验室环境下的PDAF效果验收方法
调试的最终效果要过验收这一关。展锐平台PDAF调试的验收,通常覆盖以下几个维度:
对焦速度是最直观的验收项。标准做法是用一个高速相机拍摄手机屏幕,记录从用户触发对焦到合焦的帧数,再换算成时间。一般要求预览场景下从按下到合焦不超过200ms,具体数值根据产品定位来定,性能旗舰会要求更高。
对焦成功率的验收,一般是在多种光照和多种物距条件下重复对焦多次,统计成功次数。光照条件至少覆盖高亮、室内常光、暗光和微光四档,物距覆盖远端、中端和近端三个区间。每个条件下至少重复20次以上,成功率需要达到95%以上才算合格。
对焦稳定性方面,要验证连续对焦时镜头是否有反复寻找的行为。可以在固定场景下连续对焦10次,观察合焦位置的方差,以及相邻两次合焦之间有没有明显的回退。
这里有一个容易忽视的点,切换镜头或者切换场景之后的对焦表现也要单独测。比如从近景切换到远景之后的第一次对焦,以及从亮光环境切到暗光环境的第一次对焦,这些场景下PDAF需要快速适应,表现往往会和稳定场景不同。
6.2 实拍场景的专项测试清单
实验室数据之外,我还会补一组贴近真实使用的专项测试。这里给一个我常用的实拍清单:
- 户外逆光场景对焦,注意PDAF在强光下的过曝对消情况。
- 室内混合光源下对焦,测试不同色温对PD数据的影响。
- 低对比度场景对焦,比如对焦一面纯色墙壁或者均匀天空。
- 近距离大物距范围变化场景,比如从拍近处文字直接转向远处建筑。
- 连续变焦后的再次对焦,验证镜头位置变化后PDAF能否正确收敛。
- 录像过程中的连续对焦,验证跟踪对焦的流畅度。
每个场景我至少测10次,记录失败次数和合焦时间。如果PDAF失败回退到CDAF,也要单独记录下来,因为混合策略的设计目标就是让用户感知不到回退,如果经常回退,说明PDAF调试还有优化空间。
6.3 与效果调优的衔接
PDAF调好的标准并不是"永远不要失败",而是"绝大部分情况下又快又准地成功,失败时静默回退到CDAF且用户无感知"。所以调试是PDAF和CDAF两条链路协同的工作。
在很多场景下,PDAF的搜索结果会作为CDAF搜索的起点。如果PDAF给了一个比较好的初始位置,CDAF只需要在小范围内微调就可以合焦。这个协作模式要求PDAF输出的初始位置不能有系统性偏差,否则CDAF在老位置上做小范围搜索就会找错方向。所以做效果调优的时候,我通常先确认PDAF独立对焦时的系统性偏差,把偏差清零之后,再打开CDAF协作模式。
另一个衔接点是快速对焦场景下的超时处理。如果PDAF在规定时间内没有找到可靠结果,平台会强制切换CDAF并做全域搜索。这里需要把超时时间设置合理,太短则PDAF容易切断在有机会成功的时候,太长则用户会感觉到对焦迟疑。我一般参考预览帧率来定,在30fps预览下,给PDAF约5到8帧的搜索时间,具体数值结合算法执行耗时微调。
7. 实际操作中的个人体会
整个展锐平台PDAF调试走下来,我最深的一点体会是,这个工作表面上是在调各种参数,实际上考验的是对整个链路每一个环节的理解深度。传感器端的PD像素结构、ISP端的统计处理、算法端的搜索策略、驱动端的执行精度,每个环节都是相互关联的。只懂其中一个层面,遇到问题就容易卡住,不知道往哪个方向查。
另一个体会是调试顺序的重要性。先验证PD坐标,再确认数据链路,再调算法参数,最后做量产标定,这个顺序不能乱。我见过很多调试项目效率低,原因就是调参之前没有把底层链路确认好,参数反复改来改去,表现却始终没有质的改善,最后回头排查才发现是底层配置问题。
最后分享一个我个人经常用的小技巧。调试PDAF的时候,我会在代码里把每一次PDAF计算的输入输出变量都记录下来,做成一个时间序列。一旦遇到难复现的问题,这份记录就是最完整的现场证据。后来展锐平台的调试工具也支持这类trace功能,这个习惯慢慢变成了团队里常用的排查方法。
PDAF调试没有捷径,但它的方法论是确定的:理解原理、逐层验证、量化测试。把这套方法走扎实了,不管换到哪个平台,核心思路都不会过时。