尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

037、海思HI3516的VI/VPSS/VENC全链路适配——从sensor接入到编码输出的ISP参数映射

037、海思HI3516的VI/VPSS/VENC全链路适配——从sensor接入到编码输出的ISP参数映射 037、海思HI3516的VI/VPSS/VENC全链路适配——从sensor接入到编码输出的ISP参数映射上周在客户现场调一块HI3516EV300的板子sensor是SC2239输出1080p25。客户反馈画面偏色而且暗部噪点像下雪。我第一反应是ISP参数没映射对结果一查代码发现他们直接在VI通道上改了sensor的曝光寄存器VPSS那边完全没动。这问题太典型了——海思平台最坑的地方就是VI、VPSS、VENC三层各有各的参数域你以为改的是全局其实只改了某一层的局部。先理清楚HI3516的链路结构。VI负责把sensor的RAW数据收进来做基本的坏点校正、黑电平、镜头阴影校正然后输出给VPSS。VPSS才是真正的ISP主战场3DNR、2DNR、锐化、对比度、饱和度全在这里。VENC只管编码但编码器的码率控制会反过来影响VPSS的帧率进而影响ISP的曝光策略。这三层是串行依赖关系任何一层的参数映射错了画面表现就是错的。我见过太多人直接在VI层调ISP参数因为海思的sample代码里VI层确实暴露了ISP相关的结构体。但VI层的ISP寄存器映射是给sensor RAW数据做预处理用的不是给最终图像做美化用的。你在VI层把对比度拉高VPSS层再做一次对比度增强画面直接过曝。正确的做法是VI层只做sensor数据的基础校正VPSS层做画质调整VENC层做码率控制。具体到参数映射我拿一个实际调试案例说。SC2239输出的是10bit RAW接入VI后VI的ISP模块会做黑电平校正。这里有个坑——SC2239的黑电平是64但海思的VI默认黑电平是128。如果你不把VI的ISP黑电平参数改成64暗部细节全被吃掉画面发灰。这个参数在VI的ISP结构体里叫black_level直接赋值就行。但注意这个值跟sensor的寄存器值不是一回事sensor寄存器里可能存的是偏移量VI里存的是绝对值中间要换算。VPSS层的参数映射更复杂。VPSS有多个通道每个通道可以独立设置3DNR强度、锐化强度、色度增益。但VPSS的通道0是给VENC用的通道1是给编码预览用的通道2是给抓拍用的。如果你在通道0上把3DNR开到最大通道1的预览画面就会跟编码画面不一致。我建议的做法是通道0和通道1共用一套参数通道2单独设置这样预览和编码一致抓拍可以单独调。3DNR的参数映射有个经验值。HI3516的3DNR强度范围是0到255但实际有效范围是0到200。超过200运动物体的拖影会非常明显。我一般把3DNR设在120到150之间配合2DNR的30到50暗部噪点能压住运动物体也不糊。但这里有个前提——sensor的增益不能太高。如果sensor的ISO已经拉到1600以上3DNR再强也救不回来反而会把细节磨平。所以VPSS的3DNR参数要跟sensor的增益做联动这个联动逻辑要写在应用层不能写在ISP驱动里。VENC层的参数映射容易被忽略。VENC的码率控制会影响VPSS的输出帧率帧率波动会影响ISP的自动曝光收敛速度。我遇到过一个问题客户把VENC的码率设成2Mbps1080p25结果画面在暗光下疯狂闪烁。查了半天发现是码率太低编码器丢帧VPSS的帧率从25掉到15ISP的曝光算法以为场景变暗了拼命拉高增益画面就闪了。解决办法是把码率提到4Mbps或者开启VENC的智能码率控制让编码器在暗光下自动降帧率而不是丢帧。还有一个映射关系是sensor的曝光时间跟VPSS的帧率。HI3516的VI层支持sensor的曝光时间设置但曝光时间不能超过一帧的周期。如果你在VI层把曝光时间设成40ms但VPSS的帧率是30fps帧周期33ms那曝光时间会被截断画面亮度不均匀。这个映射关系要在应用层做校验曝光时间必须小于等于1000/帧率。最后说一个容易踩的坑——sensor的镜像和翻转。SC2239支持水平镜像和垂直翻转但这两个操作会影响ISP的坏点校正和镜头阴影校正的方向。如果你在VI层开了镜像但VPSS的ISP参数还是按原始方向设置的画面边缘会出现色偏。解决办法是sensor的镜像翻转必须在VI层设置同时VPSS的ISP参数要跟着做相应的方向映射。海思的ISP结构体里有mirror和flip字段但这两个字段只影响ISP内部的坐标计算不影响输出图像的方向。输出图像的方向由VI层的sensor配置决定。经验性建议调试HI3516的链路先固定VENC的码率和帧率再调VPSS的画质参数最后调VI的sensor参数。顺序反了你会被参数之间的耦合关系搞疯。另外海思的ISP参数不是改完就生效的很多参数需要重新初始化ISP才能生效或者至少需要触发一次ISP的reload。我习惯在调试代码里加一个调试命令可以单独reload ISP参数不用重启整个链路。还有一点HI3516的ISP参数映射不是线性的。比如锐化强度0到255不是均匀变化的0到50几乎没效果50到100变化明显100到150开始出现振铃150以上画面就假了。所以调参的时候不要用二分法要先用大跨度找到有效范围再在小范围内细调。这个经验适用于所有海思平台的ISP参数。最后提醒一句别迷信海思的ISP tuning工具。工具导出的参数是给参考板用的你的板子layout、sensor型号、镜头模组都跟参考板不一样参数必须重新调。工具只能帮你快速定位问题不能直接生成量产参数。
返回列表