129、Camera HAL 的海思平台适配:MPP 模块与 VPSS 管线的接口对接
一、从一次诡异的“花屏+帧率跳水”说起
去年做海思Hi3559A平台的项目,Sensor是IMX334,跑4K@30fps。HAL层对接完MPP的VI、VPSS、VENC链路后,预览画面一直正常,但一旦开启录像,预览窗口就开始间歇性花屏,帧率从30fps直接掉到12fps左右。更诡异的是,拔掉HDMI输出线,花屏消失,帧率恢复。
当时第一反应是带宽问题,但海思的DDR带宽计算器算下来还有余量。后来用海思的sample_vio跑了一遍,发现同样的Sensor配置,sample_vio的VPSS管线跑得稳稳的。问题锁定在HAL层对VPSS管线的接口封装上——我漏掉了VPSS的“用户模式”与“自动模式”切换时的帧缓冲管理。
这个坑让我意识到,海思MPP的VPSS模块,看似API简单,但接口对接的细节决定了整个Camera HAL的稳定性。下面把这次适配中踩过的关键点拆开讲。
二、MPP模块的“三件套”与HAL层的映射关系
海思平台的Camera HAL,本质上是在做三件事:把V4L2的buffer流转成MPP的VIDEO_FRAME_INFO_S,把ISP的3A结果喂给海思的ISP模块,以及管理VPSS管线的输入输出通道。这里只聚焦VPSS管线对接,因为它是HAL层最容易被忽视的“隐形瓶颈”。