ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

高通Camera PDAF从Type2迁移到Type3的调试经验与避坑指南

高通Camera PDAF从Type2迁移到Type3的调试经验与避坑指南 1. 高通Camera PDAF调试的核心逻辑与迁移背景PDAFPhase Detection Auto Focus相位检测自动对焦在高通Camera栈里一直是个让人又爱又恨的模块。爱的是它能让手机在光线尚可的场景下实现“秒对焦”恨的是它的调试链路长、参数耦合度高尤其是从Type2往Type3迁移的时候稍有不慎就会出现对焦抽搐、拉风箱、甚至直接不合焦的问题。我最近刚在一个基于骁龙平台的项目上完成了这套迁移踩了不少坑也总结了一些可以复用的经验这里一次性讲清楚。先说说为什么会有Type2和Type3这两个概念。在高通Camera架构中PDAF的数据流向和配置方式经历过一次比较大的调整。Type2模式下PDAF的统计信息主要由ISP内部的硬件模块处理AF算法从特定的统计通道读取相位差数据然后计算出镜头需要移动的距离。这种模式的好处是链路短、延迟低但缺点是灵活性差不同sensor的PD像素排列方式不一样硬件模块的适配成本很高。Type3模式则把PD数据的解析权下放到了更靠上的软件层由专门的PD库或者算法模块来处理原始PD数据再输出给AF算法。这样一来sensor厂商可以更灵活地定义自己的PD pattern平台端也不用为每一颗sensor去改硬件逻辑。那为什么现在大家都在往Type3迁移核心原因有两个。第一多摄系统的普及让PD数据的来源变得复杂广角、超广角、长焦可能用的是不同厂商的sensorPD pattern五花八门Type2那套硬件解析的方式已经扛不住了。第二Type3模式下PD数据的校准和补偿可以在软件层做更精细的处理比如针对不同温度、不同光圈、不同对焦距离做分段补偿这些在Type2里是很难实现的。但迁移不是改个配置开关就完事的。Type2和Type3在数据格式、寄存器配置、算法接口、调试工具链上都有差异如果只是照着文档把Type2的配置改成Type3大概率会遇到对焦异常。我这次迁移的过程中光是PD数据对齐就花了两天时间后面又陆续解决了增益不匹配、ROI配置错误、置信度阈值不合理等问题。下面我会把整个迁移过程拆开从架构理解到具体配置再到问题排查尽量把每个环节的“为什么”讲清楚。1.1 Type2与Type3的本质差异要理解迁移过程中会遇到什么问题得先搞清楚Type2和Type3在数据流上的本质区别。Type2模式下sensor输出的PD数据会直接进入ISP的PDAF硬件模块这个模块负责把PD像素对进行相减得到相位差信息然后以统计值的形式提供给AF算法。AF算法拿到的是已经处理过的相位差它不需要关心PD像素是怎么排列的也不需要关心用的是哪种PD模式比如屏蔽式、半屏蔽式、双光电二极管等。Type3模式下sensor输出的PD数据会先经过一个叫PDAF Extract的环节把原始PD像素提取出来然后交给PD库进行处理。PD库会根据sensor的PD pattern配置把PD像素对进行配对、相减、补偿最终输出相位差。这个过程中PD库需要知道很多细节信息比如PD像素在sensor上的坐标、PD像素对的间距、PD像素的朝向、不同区域的补偿系数等。这些信息通常由sensor厂商提供以XML或者头文件的形式集成到Camera栈里。从调试的角度看Type2的调试主要集中在ISP的PDAF模块参数上比如ROI选择、增益补偿、阈值设置等。Type3的调试则要复杂得多除了上述参数外还要关注PD库的配置是否正确、PD数据是否对齐、PD像素的稀疏度是否合理等。我这次迁移遇到的第一个坑就是PD数据对齐问题sensor厂商提供的PD坐标和实际输出的数据对不上导致相位差计算出来完全是乱的。1.2 迁移前必须确认的硬件与软件前提在动手改配置之前有几件事必须先确认清楚否则后面会做很多无用功。第一确认sensor是否支持Type3模式。不是所有sensor都支持Type3有些老sensor只支持Type2强行迁移会失败。确认的方法很简单查sensor的datasheet或者直接问sensor厂商的FAE看它是否支持PD数据以原始格式输出。第二确认平台端的PD库是否已经集成。高通平台的PD库通常是和Camera HAL一起发布的不同版本的HAL可能对应不同的PD库版本需要确认当前使用的HAL版本是否包含Type3所需的PD库。第三确认调试工具是否支持Type3。高通提供了一套PDAF调试工具Type2和Type3的工具界面和参数项是不一样的如果工具版本太老可能无法正确解析Type3的数据。我这次迁移之前先花了一天时间做这些确认工作。结果发现手头的一颗sensor虽然支持Type3但它的PD pattern配置文件和平台端PD库的版本不匹配导致PD库无法正确解析。后来找sensor厂商要了一份更新后的配置文件才解决。所以这一步千万不能省否则后面调试的时候会一头雾水。2. Type3配置迁移的详细步骤与参数解析确认完前提条件后就可以开始正式的迁移工作了。我把整个过程分成了四个阶段配置文件的替换与合并、PD库参数的校准、AF算法接口的适配、以及调试工具链的切换。每个阶段都有一些容易忽略的细节下面逐一说明。2.1 配置文件替换与合并的注意事项Type2到Type3的迁移最直观的变化就是配置文件。Type2的PDAF配置通常写在sensor的XML文件里包括PD模式、PD像素坐标、ROI区域等。Type3则把这些配置拆成了两部分一部分是sensor相关的PD pattern配置通常由sensor厂商提供以独立的XML或者头文件形式存在另一部分是PD库的配置包括库的路径、版本、初始化参数等通常写在Camera HAL的配置文件中。替换配置文件的时候最容易犯的错误是直接覆盖。Type2的配置文件里可能还包含了一些其他模块需要的参数比如AEC、AWB的配置如果直接覆盖可能会导致这些模块异常。正确的做法是把Type3的配置项合并到现有的配置文件中保留其他模块的配置不变。我这次迁移的时候就遇到过一个因为覆盖配置文件导致AEC曝光不准的问题后来把AEC的配置项恢复回去才解决。另外PD pattern配置文件的格式也很重要。不同sensor厂商提供的配置文件格式可能不一样有的用XML有的用C头文件有的甚至用二进制文件。高通平台的PD库通常支持XML格式如果sensor厂商提供的是其他格式需要先转换成XML。转换的时候要注意坐标系的定义有些厂商用的是sensor坐标系有些用的是图像坐标系如果不一致会导致PD数据错位。2.2 PD库参数校准的关键点PD库的校准是Type3迁移中最核心也最复杂的环节。PD库需要知道PD像素对的具体信息才能正确计算出相位差。这些信息包括PD像素对的坐标、PD像素对的间距、PD像素的朝向、PD像素的稀疏度、以及不同区域的补偿系数。坐标和间距通常由sensor厂商提供但补偿系数需要自己调试。补偿系数的作用是修正PD像素对之间的响应差异因为制造工艺的原因同一个sensor上不同位置的PD像素对可能存在响应不一致的情况如果不补偿会导致相位差计算出现偏差。补偿系数的调试方法一般是拍摄均匀亮度的场景然后观察PD数据的分布如果发现某个区域的PD数据明显偏离平均值就需要调整该区域的补偿系数。我这次调试的时候发现画面中心区域的PD数据一直偏大导致对焦总是往近处跑。后来查了PD库的日志发现是中心区域的补偿系数设置得太大了把补偿系数调小之后对焦就正常了。这里要提醒一句补偿系数的调整要循序渐进每次调整的幅度不要超过5%否则很容易调过头。2.3 AF算法接口的适配Type2和Type3的AF算法接口也不一样。Type2模式下AF算法直接从ISP的PDAF模块读取相位差接口比较简单通常就是一个函数调用。Type3模式下AF算法需要从PD库读取相位差而PD库的输出格式可能和ISP的输出格式不一样需要做一层转换。转换的时候要注意单位。ISP输出的相位差通常是以像素为单位的而PD库输出的相位差可能是以微米为单位的如果不做单位转换AF算法计算出来的镜头移动距离会完全错误。我这次迁移的时候就因为这个单位问题导致对焦时镜头移动距离过大画面直接糊掉。后来在PD库的输出接口上加了一个单位转换把微米转换成像素问题才解决。另外AF算法的置信度阈值也需要重新调整。Type2模式下置信度是由ISP硬件计算的Type3模式下置信度是由PD库计算的两者的计算方式不一样阈值也不能直接照搬。我一般是先把阈值设得宽松一些然后根据实际对焦效果逐步收紧直到找到一个既能快速对焦又不会误判的值。2.4 调试工具链的切换与数据验证Type2和Type3用的调试工具不一样。Type2通常用高通提供的PDAF调试工具可以直接看到ISP输出的相位差和置信度。Type3则需要用PD库自带的调试工具或者通过日志来观察PD数据。我这次迁移的时候发现PD库的调试工具只能显示原始PD数据不能直接显示相位差需要自己写脚本把原始PD数据转换成相位差。数据验证是迁移过程中必不可少的一步。我的做法是先在Type2模式下拍摄一组标准场景记录下每个场景的相位差和最终对焦位置然后切换到Type3模式拍摄同样的场景对比两者的相位差和对焦位置。如果差异在可接受范围内说明迁移基本成功如果差异很大就需要回头检查配置和参数。我这次验证的时候发现Type3模式下的相位差普遍比Type2模式小10%左右一开始以为是配置问题后来查了PD库的文档发现是PD库默认做了一次增益补偿把相位差缩小了。这个增益补偿是可以关闭的关闭之后两者的相位差就基本一致了。3. 实操过程中遇到的典型问题与排查方法迁移过程中遇到的问题五花八门我把其中最有代表性的几个整理出来附上排查思路和解决方法希望能帮到后面做同样迁移的人。3.1 对焦抽搐与拉风箱问题对焦抽搐是Type3迁移后最常见的问题表现为镜头在焦点附近来回移动无法稳定下来。这个问题的原因通常有三个PD数据噪声太大、置信度阈值设置不合理、或者AF算法的滤波参数太激进。排查的时候先看PD数据的噪声水平。如果PD数据的波动范围超过相位差本身的20%说明噪声太大需要检查PD库的增益设置和补偿系数。我遇到过一次PD数据的噪声达到了30%后来发现是PD库的增益设置得太高了把增益调低之后噪声就降下来了。如果PD数据噪声正常那就检查置信度阈值。置信度阈值太低AF算法会把噪声当成有效信号导致镜头来回移动置信度阈值太高AF算法又会忽略掉一些有效的相位差导致对焦慢。我的经验是先把阈值设在一个中间值然后根据实际对焦效果微调每次调整幅度不超过10%。如果前两项都正常那就检查AF算法的滤波参数。Type3模式下PD数据的更新频率可能和Type2不一样如果滤波参数还是照搬Type2的可能会导致AF算法对PD数据的响应过快或过慢。我一般会把滤波参数调得比Type2稍微保守一些让AF算法对PD数据的响应更平滑。3.2 PD数据全零或全满问题PD数据全零或全满是比较严重的问题通常意味着PD库没有正确读取到PD数据。排查的时候先确认sensor是否真的输出了PD数据。可以通过sensor的寄存器读取PD数据的输出状态如果sensor没有输出PD数据那就要检查sensor的PD模式配置是否正确。如果sensor有输出PD数据但PD库读到的全是零或全是满值那就要检查PD库的配置。常见的原因包括PD像素坐标配置错误、PD像素对的间距配置错误、PD库的输入格式配置错误等。我遇到过一次PD库读到的数据全是零后来发现是PD像素坐标配置成了图像坐标而PD库期望的是sensor坐标两者差了一个偏移量修正之后数据就正常了。还有一种可能是PD库的版本不匹配。不同版本的PD库对输入数据的要求可能不一样如果PD库的版本和sensor厂商提供的配置文件不匹配也可能导致数据读取异常。这种情况下要么升级PD库要么找sensor厂商要一份匹配的配置文件。3.3 对焦精度下降问题迁移到Type3后有些场景下对焦精度会下降表现为对焦位置总是偏离最佳焦点。这个问题的原因通常是PD数据的补偿不够准确或者AF算法的镜头移动距离计算有误。排查的时候先看PD数据的线性度。在均匀亮度的场景下PD数据应该和镜头的离焦量成线性关系。如果线性度不好说明PD数据的补偿不够准确需要重新校准补偿系数。我一般会用多个不同的离焦量拍摄一组照片然后画出PD数据和离焦量的关系曲线如果曲线不是直线就说明补偿有问题。如果PD数据的线性度正常那就检查AF算法的镜头移动距离计算。Type3模式下PD库输出的相位差单位可能和Type2不一样如果AF算法没有做单位转换计算出来的镜头移动距离就会偏大或偏小。我遇到过一次对焦位置总是偏近后来发现是PD库输出的相位差单位是微米而AF算法以为是像素导致计算出来的移动距离偏大镜头移动过头了。3.4 常见问题速查表问题现象可能原因排查方法解决方法对焦抽搐PD数据噪声大观察PD数据波动范围降低PD库增益对焦抽搐置信度阈值不合理检查置信度阈值设置调整阈值每次不超过10%对焦抽搐AF滤波参数太激进检查AF滤波参数调保守一些PD数据全零sensor未输出PD数据读取sensor寄存器检查sensor PD模式配置PD数据全零PD库配置错误检查PD像素坐标和间距修正配置PD数据全零PD库版本不匹配检查PD库版本升级PD库或更换配置文件对焦精度下降PD数据补偿不准确检查PD数据线性度重新校准补偿系数对焦精度下降镜头移动距离计算有误检查单位转换添加单位转换4. 迁移后的性能验证与长期维护建议迁移完成之后不能就这么算了还得做一轮完整的性能验证确保Type3模式下的对焦性能不低于Type2。验证的维度包括对焦速度、对焦精度、功耗、以及在不同光照条件下的稳定性。对焦速度的验证方法是在标准光照条件下拍摄一组从近到远、从远到近的场景记录每次对焦的耗时。Type3模式下的对焦速度应该和Type2差不多如果明显变慢就要检查PD库的处理耗时和AF算法的响应速度。我这次迁移后发现对焦速度比Type2慢了大约15%后来查了PD库的日志发现是PD库的初始化耗时比较长把初始化移到相机启动阶段之后对焦速度就恢复正常了。对焦精度的验证方法是拍摄一组分辨率测试卡然后检查对焦后的图像清晰度。Type3模式下的对焦精度应该和Type2相当如果明显下降就要回头检查PD数据的补偿和AF算法的参数。我一般会用MTF调制传递函数来量化对焦精度MTF值越高说明对焦越准。功耗的验证方法是在连续对焦的场景下测量相机的功耗。Type3模式下PD库的处理会增加一些功耗但通常不会太大。如果功耗明显增加就要检查PD库的处理频率和AF算法的轮询间隔适当降低处理频率可以节省功耗。长期维护方面有几点建议。第一保留Type2的配置文件作为备份万一Type3出现问题可以快速回退。第二记录迁移过程中的所有参数变更方便后续排查问题。第三定期检查PD库的版本更新新版本通常会修复一些已知问题提升对焦性能。第四关注sensor厂商的PD pattern配置文件更新有时候sensor厂商会优化PD pattern的设计提升PD数据的质量。4.1 不同光照条件下的对焦稳定性验证Type3模式在不同光照条件下的表现可能和Type2不一样尤其是低光照条件下。低光照时PD数据的信噪比会下降如果PD库的噪声抑制不够可能会导致对焦不稳定。我这次迁移后专门在低光照条件下做了一轮测试发现Type3模式下的对焦成功率比Type2低了大约10%。后来调整了PD库的噪声抑制参数把低光照下的对焦成功率提了上来。低光照下的对焦稳定性验证方法是在照度低于10 lux的环境下拍摄一组不同距离的场景记录对焦成功率和对焦耗时。如果对焦成功率低于90%就需要调整PD库的噪声抑制参数或者AF算法的置信度阈值。我一般会把低光照下的置信度阈值调低一些让AF算法更容易接受PD数据但同时也会增加误判的风险需要权衡。强光下的对焦稳定性也不能忽视。强光下PD数据可能会饱和导致相位差计算错误。验证方法是在照度高于10000 lux的环境下拍摄一组场景检查对焦是否准确。如果对焦不准就要检查PD库的饱和处理逻辑必要时增加饱和检测和补偿。4.2 多摄切换时的PDAF一致性现在的手机基本都是多摄系统主摄、超广角、长焦可能都支持PDAF。迁移到Type3后要确保不同摄像头之间的PDAF表现一致否则在切换摄像头时会出现对焦跳变。我这次迁移的时候就遇到主摄和长焦切换时对焦位置不一致的问题后来发现是两颗sensor的PD库配置不一样把配置统一之后问题就解决了。多摄一致性的验证方法是在同一个场景下分别用不同的摄像头对焦记录对焦位置和相位差。如果差异较大就要检查各摄像头的PD库配置和AF算法参数是否一致。我一般会做一个表格把各摄像头的关键参数列出来逐一对比确保没有遗漏。4.3 长期维护中的版本管理Type3的PD库和配置文件都是有版本的不同版本之间可能存在兼容性问题。长期维护的时候建议建立一个版本管理机制记录每个版本的PD库、配置文件、以及对应的调试参数。这样在出现问题时可以快速定位是哪个版本引入的。我自己的做法是每次更新PD库或配置文件时都会在版本管理工具里打一个标签并附上更新说明和测试结果。这样即使过了几个月也能清楚地知道每个版本的变化。另外建议定期回顾PD库的更新日志看看有没有性能优化或问题修复及时跟进。4.4 实操心得与避坑建议最后分享几条我在这次迁移中总结的心得。第一不要迷信文档。文档里写的配置步骤往往是理想情况下的实际调试时会遇到各种意外一定要以实测数据为准。第二多和sensor厂商的FAE沟通。PD pattern的配置和补偿系数sensor厂商最清楚遇到问题直接问他们比自己去猜要快得多。第三保留调试日志。PD库的日志里有很多有用的信息比如PD数据的原始值、补偿后的值、置信度等遇到问题时翻日志往往能找到线索。第四不要一次改太多参数。每次只改一个参数改完就测试确认没问题再改下一个否则出了问题都不知道是哪个参数导致的。我在实际调试中发现Type3的PD库对温度比较敏感高温下PD数据会有漂移。后来在PD库的配置里加了一个温度补偿表根据温度调整补偿系数漂移问题就解决了。这个温度补偿表需要自己实测方法是把手机放在不同温度的环境下记录PD数据的变化然后拟合出补偿曲线。虽然麻烦但效果很好。另外Type3的PD库在处理高分辨率PD数据时耗时可能会比较长如果相机预览的分辨率很高PD库的处理可能会成为瓶颈。我的做法是降低PD库的输入分辨率只处理ROI区域内的PD数据这样既能保证对焦精度又能降低处理耗时。ROI区域的选择要根据实际场景来定一般选择画面中心区域即可因为大多数情况下用户对焦的主体都在画面中心。还有一个容易被忽略的点是PD库的初始化时机。Type3的PD库需要在相机启动时初始化如果初始化太晚可能会导致首次对焦变慢。我一般会把PD库的初始化放在相机启动的早期阶段确保在用户按下快门前PD库已经准备好。初始化的耗时取决于PD库的复杂度和sensor的PD pattern配置一般在一百毫秒左右如果超过两百毫秒就要考虑优化了。关于PD数据的对齐我再补充一点。Type3模式下PD库需要知道PD像素在sensor上的精确位置这个位置通常由sensor厂商提供。但有时候sensor厂商提供的坐标是理论值实际sensor上PD像素的位置可能会有偏差。这种情况下可以通过拍摄特定的测试图案来校准PD像素的位置。测试图案一般是黑白相间的条纹通过分析PD数据的变化可以推算出PD像素的实际位置。这个过程比较繁琐但能显著提升对焦精度。最后再提一下调试工具的使用。高通平台的PDAF调试工具在Type3模式下功能有限很多时候需要自己写脚本分析PD数据。我一般会用Python写一些简单的脚本把PD库输出的原始数据转换成可视化的图表这样能更直观地看到PD数据的分布和变化趋势。脚本不需要太复杂能画出PD数据随离焦量变化的曲线就行。有了这个曲线调整补偿系数和置信度阈值就方便多了。
返回列表