海思3518E开发笔记2.6——海思VPSS(Video Process Sub-System)模块详解
海思Video Process Sub-System模块架构介绍
VPSS( Video Process Sub-System)支持对一幅输入图像进行统一预处理,如去噪、去隔行(隔行扫描转为逐行扫描,以前隔行扫描好做,现在为了兼容需要去隔行,一般不会碰到,看sensor手册采用什么扫描方式)等
然后再对各通道分别进行缩放、锐化等处理,最后输出多种不同分辨率的图像。
VPSS 单元支持的具体图像处理功能包括
- FRC( Frame Rate Control)
- Crop(裁剪)
- NR( Noise Reduce)
- LDC( Lens Distortion Correction镜头畸变矫正)
- Rotate(旋转)
- Cover/Overlay(覆盖、字符叠加)
- Scale(缩放)
- Mirror/Flip(镜像、翻转)
- FishEye
鱼眼,突出的曲面镜头,屈光面更宽,画面更大但画面变形更严重,这个模块用于将画面调优
海思Video Process Sub-System相关概念
GROUP
VPSS 对用户提供组( GROUP)的概念。最大可用数为 VPSS_MAX_GRP_NUM个,各芯片的最大组数目有所不同,各 GROUP 分时复用 VPSS 硬件。每个 VPSSGROUP 包含多个通道,通道数目视方案实现有所不同,具体描述请参见CHANNEL。
group实际上是对VPSS硬件功能的虚拟化,即若系统里只有一个group,那么这个group实际就是VPSS;若有多个group,那么就是一会给group0用一会给group1用,这就是分时复用。CHANNEL
VPSS 组的通道。通道分为 2 种:物理通道和扩展通道。 VPSS 硬件提供多个物理通道,每个通道具有缩放、裁剪等功能。扩展通道具备缩放功能,它通过绑定物理通道,将物理通道输出作为自己的输入,把图像缩放成用户设置的目标分辨率输出。
chn是Grp里面的通道,这个通道有物理的有扩展的,物理通道有对应的硬件,扩展通道没有对应的硬件,扩展通道其实是对应了一些功能(缩放等)
以上为重要概念
可以理解为VPSS是流水线,group是流水线上工作的白班和夜班两组工作人员,channel就是流水线上的工人,不同channel(工作人员)的作用不一样
Grp是一个组合,一个物理硬件VPSS在软件上的一个映射,如果我们只有一个Grp的话就是物理硬件VPSS在软件上的一个1:1的一个映射。
chn是Grp里面的通道,这个通道有物理的有扩展的,物理通道有对应的硬件,扩展通道没有对应的硬件,扩展通道其实是对应了一些功能(缩放等),
注意:VI的chn和VPSS的chn是两回事,VI那边的chn是VI里面Dev里面的chn,VI那边DEV的地位有点类似于VPSS这边的Grp。
对接的时候是VI这边的chn去绑定VPSS这边的Grp。
FRC
帧率控制,分为 2 种: group 帧率控制和 chn 帧率控制。
− Group 帧率控制:用于控制各 group 对输入图像的接收,只应用在 VI—VPSS的离线方案中。
− Chn 帧率控制:用于控制各个物理通道图像的处理,应用在离线和在线方案中。Crop
裁剪,分为 3 种: group 的裁剪和物理通道的裁剪以及扩展通道的裁剪。
− Group 的裁剪, VPSS 对输入图像进行裁剪。
− 物理通道的裁剪, VPSS 对各个物理通道的输出图像进行裁剪。
− 扩展通道的裁剪, VPSS 调用 VGS 对扩展通道的输出图像进行裁剪。DEI
De-interlace,去隔行。将交错的隔行视频源还原成逐行视频源。NR
去噪。通过参数配置,把图像中的高斯噪声去除,使得图像变得平滑,有助于降
低编码码率。Scale
缩放,对图像进行缩小放大。LDC
Lens Distortion Correction,镜头畸变校正,一些低端镜头容易产生图像畸变,需要根据畸变程度对其图像进行校正。Cover
视频遮挡区域,对 VPSS 的输出图像填充纯色块。Overlay
视频叠加区域,在 GROUP 上进行位图的加载和背景色更新,支持 ARGB4444、ARGB1555、 ARGB8888 三种格式的位图。Border
边框, VPSS 在输出图像上加边框。备份节点
原始图像的备份节点。每个 GROUP 都有一个备份节点,用于备份即将提交硬件处理的那帧原始图像。 VPSS 在以下情况会将缓存队列队头节点的图像放入备份节点:
− 当队头节点的图像要经过 VPSS 硬件处理时, VPSS 会将其放入备份节点,并替换掉原有图像。
− 当后端绑定的接收模块要求 VPSS 将队头图像放入备份节点时, VPSS 也会替换备份节点中的图像,即使该图像不经过硬件处理。低延时
在 VI—VPSS 的在线方案中,编码器性能足够的情况下, VPSS 支持按照,以行为单位,边采集边发送的方式,将图像发送给编码模块进行编码,用来减少 VPSS处理完整帧图像再发送给编码模块过程中,数据的延时时间。这样的方式即为低延时方案
VI、VPSS的离、在线模式
VI 和 VPSS 的协作模式分为以下 2 种(模式切换由 load 脚本参数控制,对应 sys 模块参数 vi_vpss_online):
- VI/VPSS 离线模式是指 VI 进行时序解析后将图像数据写出到 DDR, VPSS 从DDR 中载入 VI 采集的数据进行图像处理,是传统 Hi3518/Hi3520D 等芯片(老海思芯片)的VI/VPSS 的协作模式。
- VI/VPSS 在线模式是指 VI 进行时序解析后直接在芯片内部将数据传递到 VPSS,中间无 DDR 写出的过程。在线模式可以省一定的带宽和内存,降低端到端的延时。需要注意的是,在线模式时,因为 VI 不写出数据到 DDR,无法进行CoverEx、 OverlayEx、 Rotate、 LDC 等操作,需要在 VPSS 各通道写出后再进行Rotate/LDC 等处理,而且有些功能只在离线下能支持,比如 DIS。
协作模式在装载ko的时候可以设置
海思Video Process Sub-System模块功能介绍
通过调用 SYS(就是MPP) 模块的绑定接口,可与 VI 和 VO/VENC/IVE 等模块进行绑定,其中前者为 VPSS 的输入源,后者为 VPSS 的接收者。用户可通过提供的 MPI 接口对 GROUP进行管理。每个 GROUP 仅可与一个输入源绑定。 GROUP 的物理通道有两种工作模式: AUTO 和 USER,两种模式间可动态切换。默认的工作模式为 AUTO,此模式下各通道仅可与一个接收者绑定。若想使用 USER 模式,则需调用 MPI 接口进行设置,同时指定所需图像的大小和格式,此模式下各通道可与多个接收者绑定。需要特别注意的是, USER 模式主要用于对同一通道图像进行多路编码的场景,此模式下播放控制不生效,因此预览和回放场景下不建议使用 USER 模式。
数据流向如图所示,所有对视频的操作都需要按顺序进行
相关数据结构
/*Define attributes of vpss GROUP*/
typedef struct hiVPSS_GRP_ATTR_S
{
/*statistic attributes*/
HI_U32 u32MaxW; /*MAX width of the group*/
HI_U32 u32MaxH; /*MAX height of the group*/
PIXEL_FORMAT_E enPixFmt; /*Pixel format*/
HI_BOOL bIeEn; /*Image enhance enable*/
HI_BOOL bDciEn; /*Dynamic contrast Improve enable*/
HI_BOOL bNrEn; /*Noise reduce enable*/
HI_BOOL bHistEn; /*Hist enable*/
VPSS_DIE_MODE_E enDieMode; /*De-interlace enable*/
}VPSS_GRP_ATTR_S;
流程分析
首先SAMPLE_COMM_SYS_GetPicSize
获取图像尺寸。第一个参数事编码制式,传入的是NTSC;第二个参数是第0路码流;第三个参数是用于获取图像尺寸的结构体。
然后SAMPLE_COMM_VPSS_StartGroup
。第一个参数是grp号,第二个参数是grp相关属性
在startgroup中有几个MPIHI_MPI_VPSS_CreateGrp
、HI_MPI_VPSS_GetNRParam
、HI_MPI_VPSS_SetNRParam
、HI_MPI_VPSS_StartGrp
。就是创建组后获取并设置属性,再开启组
然后SAMPLE_COMM_VI_BindVpss
将VPSS的group绑定到上层VI的channel。该函数内部使用SAMPLE_COMM_VI_Mode2Param
来设置dev和channel的总数和编号间隔,最后HI_MPI_SYS_Bind
将VI的chn和VPSS的grp绑定
绑定操作是在线模式,用通道;离线模式直接通过DDR数据交互
最后SAMPLE_COMM_VPSS_EnableChn
使能通道。其中HI_MPI_VPSS_SetChnAttr
设置通道属性,HI_MPI_VPSS_SetChnMode
设置通道模式是user还是auto,最后HI_MPI_VPSS_EnableChn
使能通道
每次对单个通道进行操作,根据通道数决定操作次数
第二次第三次只创建了channel,三个channel绑定的是同一个group
注意:每一路都会获取图像的宽高比,每一路宽高比不一样,于是压缩模式不一样,对应数据结构如下
typedef enum hiCOMPRESS_MODE_E
{
COMPRESS_MODE_NONE = 0x0, /* no compress */
COMPRESS_MODE_SEG = 0x1, /* compress unit is 256 bytes as a segment, default seg mode */
COMPRESS_MODE_SEG128 = 0x2, /* compress unit is 128 bytes as a segment */
COMPRESS_MODE_LINE = 0x3, /* compress unit is the whole line */
COMPRESS_MODE_FRAME = 0x4, /* compress unit is the whole frame */
COMPRESS_MODE_BUTT
} COMPRESS_MODE_E;
在vpss中的压缩原因?
对视频进行一些操作如叠加、缩放、锐化的操作都需要涉及到内存的拷贝,内存拷贝的操作是会占用DDR的带宽。VPSS的功能主要是将VI来的视频流一路出多路,重点在缩放功能,所以需要减少DDR带宽的占用。
压缩可能造成的问题?
视频流压缩后,若不解压,抓出来的图会花掉,如果视频送到算法中忘记解压,那么算法结果就不准。对视频的一切操作之前都需要解压。
不过一般用不着压缩,除非用的DDR很烂,拷贝很慢。在对内存要求严苛的情况下,才会对不同模块间传输的视频流进行压缩。
帧率控制给的是-1,就是不控制帧率,可以在文档中查到
为什么要控制帧率?
比如主通道是25fps,算法只需要8fps,为了节省ddr贷款,把算法相关通道fps降到8就行了,抓图通道只要图就可以,1fps就够了。
帧率只会影响视频流畅度,在预览视频是一个评估标准;在不需要看视频,如送算法、抓图的情况下帧率越低越好
- 物理通道作用是大码流编码或图像抓拍
- 扩展通道用于缩放,3518e的4~11通道可以二次缩放
- 分享
- 举报
-
浏览量:592次2024-01-25 16:37:07
-
浏览量:991次2024-01-24 17:37:01
-
浏览量:1409次2024-01-25 16:21:59
-
浏览量:4666次2020-08-30 08:25:06
-
浏览量:3554次2020-07-27 15:12:15
-
浏览量:3048次2018-09-04 15:41:09
-
浏览量:589次2024-02-23 17:34:00
-
浏览量:954次2024-01-24 18:28:37
-
浏览量:1217次2024-02-22 15:52:02
-
浏览量:749次2024-02-23 16:58:46
-
浏览量:3528次2020-08-05 20:36:22
-
2023-06-12 14:35:32
-
浏览量:3513次2020-07-30 11:57:30
-
浏览量:3830次2020-07-17 16:50:14
-
浏览量:4280次2020-08-10 09:16:13
-
浏览量:6106次2019-12-28 10:35:51
-
浏览量:3209次2020-08-05 20:32:31
-
浏览量:827次2024-02-22 15:39:36
-
浏览量:4267次2019-12-16 13:54:11
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
Winki
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明