017、海思Hi3516/Hi3559 ISP架构与MPP平台:VI/VPSS/VENC全链路调优实战
2026/8/13 7:58:19 网站建设 项目流程

017、海思Hi3516/Hi3559 ISP架构与MPP平台:VI/VPSS/VENC全链路调优实战

昨晚凌晨两点,一个做智能相机的客户发来一段视频,画面里所有红色灯箱全部过曝成白色,绿色植被糊成一片。他用的就是Hi3516DV300,说ISP参数都是按SDK默认来的,问我是不是传感器驱动没写好。我让他把VI通道的抓图发过来一看——RAW图正常,RGB图偏色,YUV图过曝。问题根本不在sensor,是VI到VPSS这条链路上,ISP的AE统计窗口和WDR模式没对齐。

海思的ISP不像高通Spectra那样把3A算法黑盒封装,它把AE/AWB/AF的统计信息全部暴露在VI模块的ISP寄存器里,你可以直接读,也可以让ISP硬件自动跑。但这里有个大坑:Hi3516的ISP默认是10bit RAW输入,如果你用12bit的sensor,不修改ISP的bit宽度配置,高光部分直接截断,暗部细节全丢。别问我怎么知道的,产线上三十台机器全部偏色,最后定位到是sensor输出格式配成了RAW12,而VI的ISP_CFG_INPUT还在用RAW10。

VI模块的调优,核心不是那些曝光、增益的初始值,而是时序。海思的VI支持在线和离线两种模式,在线模式sensor数据直接进ISP,延迟低但调参空间小;离线模式先存DDR再进ISP,你可以做多帧合成、降噪,但会引入两帧左右的延迟。做车载全景环视,必须用在线模式,延迟超过40ms驾驶员会晕;做安防夜视,离线模式能多拉两档增益,噪点还少一半。Hi3559A的VI还多了个SDR模式,专门给HDR传感器用的,但SDR模式下AE统计窗口会缩小到全画面的1/4,如果你还用全幅统计去调曝光,高动态场景必炸。

VPSS是海思平台最容易被低估的模块。很多人把它当简单的scaler用,其实VPSS的NR(降噪)和Sharpen(锐化)才是画质分水岭。Hi3516的VPSS有三级NR:时域NR、空域NR、3DNR。时域NR吃DDR带宽,空域NR吃CPU,3DNR吃NPU。默认配置下时域NR强度是60,如果你跑4K@30fps,DDR带宽已经占了40%,再开时域NR直接带宽瓶颈,帧率掉到25fps。我一般建议:1080p以下开时域NR,4K只开空域NR+3DNR,锐化强度控制在128以下,超过192画面边缘会出现振铃,文字区域尤其明显。

VPSS还有一个隐藏功能叫FISHC(鱼眼校正),Hi3559A上硬件支持,Hi3516上只能软件跑。做车载的兄弟注意,FISHC必须在VPSS的通道0做,通道1和通道2的缩放比例不能超过2倍,否则校正后的图像边缘会拉伸变形。这个限制在芯片手册里只提了一句,不踩坑根本记不住。

VENC编码这块,海思的H.264/H.265编码器质量是行业标杆,但码率控制策略需要调。默认的CBR模式在画面静止时码率会降到极低,一旦画面出现快速运动,码率飙升但QP已经拉高,画面会瞬间糊掉。我习惯用VBR+MAX_BITRATE模式,把目标码率设为实际带宽的70%,最大码率设为120%,这样既能保证平均清晰度,又不会在运动场景崩坏。GOP大小也有讲究,做直播用I帧间隔2秒,做录像用4秒,I帧间隔太长,播放器拖动进度条时会卡顿。

编码器的ROI(感兴趣区域)功能,海思做得比高通细。你可以给每个ROI单独设置QP偏移,比如人脸区域QP减6,背景QP加4,这样码率能省15%还不影响主观质量。但注意,ROI区域不能超过画面面积的1/4,否则编码器的码率控制会失衡,整体画质反而下降。

最后说一个所有平台通用的坑:sensor的HDR模式和ISP的WDR模式必须匹配。Hi3516的ISP支持2帧和3帧WDR,但sensor如果输出的是DOL(Digital Overlap)模式,ISP的WDR配置必须用DOL对应模式,否则合成出来的图像会有鬼影。这个匹配关系在sensor驱动里有个单独的字段,很多人漏配,导致HDR效果还不如普通模式。

产线调优的经验,我总结三条。第一,永远用RAW图做第一步验证,RGB和YUV都可能被ISP处理掩盖问题。第二,AE的收敛速度调到中等偏慢,太快会闪烁,太慢会过曝,这个参数在VI模块的AE_CTRL里,默认值是32,我一般调到24。第三,VENC的码率控制不要用默认的CBR,改成VBR,除非你的客户明确要求恒定码率。

海思的MPP平台文档写得算详细,但很多关键参数藏在sample代码里,不翻sample根本找不到。比如VPSS的旋转功能,文档里说支持90/180/270度,但实际只有通道0支持硬件旋转,其他通道要软件转,性能差五倍。这种坑,只有踩过才知道。

做海思平台,建议把SDK里的sample_vi、sample_vpss、sample_venc三个例程吃透,然后自己写一个全链路的测试程序,把每个模块的每个参数都打出来,对比不同配置下的效果。这个程序就是你的调试神器,比任何文档都管用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询