最近在折腾HI3518C的芯片,应用到IPCamera上,最终获取多路不同分辨率的视频流供不同需求的预览切换。此处简单记录一下视频前处理元VPSS(Video Process Sub-System)的多通道间的关系以及使用心得。
HI3518C的视频子系统包括:视频系统初始化模块(MPP_SYS_CONF_S)、视频输入模块(VI)、视频前处理模块(VPSS)、视频编码模块(VENC)和视频输出模块(VO)组成。
HI3518C的VPSS是视频数据编码前的预处理单元,主要完成对一幅输入图像的统一预处理,如去噪、去隔行等,然后再对各通道分别进行缩放、锐化等处理(如:PreScale、De-ring/De-block、NR、IE、DIE、Sharpen 等,具体可参见VPSS_GRP_ATTR_S结构体),最后输出多种不同分辨率的图像。
其中,HI3518C对用提供GROUP的概念来管理VPSS,最多支持128个GROUP(我目前只使用了一个组:GROUP0)。VPSS的GROUP又包含多个通道(CHANNEL),对于不同规格的芯片,每个组包含的通道数也不相同,规格文档上都有详细说明。
HI3518C的各个GROUP包含8个CHANNEL,其中2个物理通道(PHY CHN)、一个直通通道(Bypass)和5个扩展通道(EXT CHN)。
物理通道是由硬件提供的,各物理通道的功能和限制各不相同;直通通道具备CROP功能,可以把不需要作预处理的一幅幅图像直接透传给接收者;扩展通道具备缩放功能,当它绑定到物理通道后,可以把从物理通道获取到的图像缩小或放大成用户所需要的不同分辨率的图像。Hi3518C 提供 5 路扩展通道以提供更好的灵活性,扩展通道具备缩放和帧率控制功能,不经过其他硬件算法单元处理。
用户在使用的时候,需要首先创建VPSS GROUP,然后设置好GROUP属性并启用VPSS GROUP之后,再把VI作为源通道,把VPSS作为目标通道,通过调用 HI_MPI_SYS_Bind 绑定VI到VPSS,就可以建立视频输入到视频预处理间的通路,使得前端采集到的视频数据经由此通路到达VPSS单元。注意,每个 GROUP 仅可与一个输入源绑定。
然后,就是根据实际需要来创建多个VPSS CHANNEL,从CHANNEL中获得所需要的目标分辨率的图像输出了。
HI3518C的物理通道0无缩放能力,支持锐化,不支持抽场,一般用于大码流编码和JPEG抓拍。
HI3518C的物理通道1,水平、垂直均最大支持 8 倍缩小,水平、垂直均最大支持 8 倍放大,支持锐化, 不支持抽场,一般用于小码流编码和CVBS(复合视频广播信号)预览。
因此,用户可以通过CHANNEL(0)来获取到前端图像采集模块所支持的最大像素分辨率的图像,也就是说,如果前端sensor支持的最大图像分辨率为1920*1080像素,那么经CHANNEL0所得到的图像就是1920*1080像素格式,并且不可以把该通道的数据再作为其它扩展通道的源来进行图像的放大或缩小处理。
用户可以通过CHANNEL(1)来获取到的图像为用户任意指定的合法的像素大小,通过指定像素格式及宽高大小,进行预处理后可以作为视频编码模块(VENC)的输入。同时,用户可以把该通道作为后面所要建立的扩展通道的源,通过设置所要建立的扩展通道的属性(主要指:绑定的源通道号、图像帧率、图像宽高等,见VPSS_EXT_CHN_ATTR_S结构体),再经由各扩展通道来获取到的所需的目标分辨率。
用户还可通过扩展通道CHANNEL(3、4、5、6、7)来获取除VI所支持的最大分辨率以外的各种符合标准的不同分辨率图像,比如前端sensor支持最大分辨率为1920*1080,那么结合扩展通道的使用,用户就可以获取到HD720(1280*720)、VGA(640*480)、QVGA(320*240)、CIF(352*288)、QCIF(176*144)等分辨率的图像了。
注意,当把通道 1 作为输入源的时候,要设置通道 1 为USER模式。因为HI3518C只有两个物理通道,通道0不具备缩放功能,所以只有通道1可以作为扩展通道的源,对图像进行缩放处理。
其中,VPSS GROUP有两种工作模式:AUTO 和 USER,两种模式间可动态切换。默认的工作模式为 AUTO,此模式下各通道仅可与一个接收者绑定。若想使用 USER 模式,则需调用 MPI 接口进行设置,同时指定所需图像的大小和格式,此模式下各通道可与多个接收者绑定。需要特别注意的是,USER 模式主要用于对同一通道图像进行多路编码的场景,此模式下播放控制不生效,因此预览和回放场景下不建议使用。Bypass 通道只能工作在 AUTO 模式,可与多个接收者绑定。