sun life
海思3518E开发笔记2.6——海思VPSS(VideoProcessSub-System。。。
⽬录
海思Video Process Sub-System模块架构介绍
VPSS( Video Process Sub-System)⽀持对⼀幅输⼊图像进⾏统⼀预处理,如去噪、去隔⾏(隔⾏扫描转为逐⾏扫描,以前隔⾏扫描好做,现在为了兼容需要去隔⾏,⼀般不会碰到,看nsor⼿册采⽤什么扫描⽅式)等
然后再对各通道分别进⾏缩放、锐化等处理,最后输出多种不同分辨率的图像。
VPSS 单元⽀持的具体图像处理功能包括
FRC( Frame Rate Control)
Crop(裁剪)
NR( Noi 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实际就是VPS
S;若有多个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
缩放,对图像进⾏缩⼩放⼤。
yamaLDC
Lens Distortion Correction,镜头畸变校正,⼀些低端镜头容易产⽣图像畸变,需要根据畸变程度对其图像进⾏校正。
Cover
视频遮挡区域,对 VPSS 的输出图像填充纯⾊块。
Overlay
视频叠加区域,在 GROUP 上进⾏位图的加载和背景⾊更新,⽀持 ARGB4444、ARGB1555、 ARGB8888 三种格式的位图。
Border厚味
边框, VPSS 在输出图像上加边框。
备份节点
原始图像的备份节点。每个 GROUP 都有⼀个备份节点,⽤于备份即将提交硬件
处理的那帧原始图像。 VPSS 在以下情况会将缓存队列队头节点的图像放⼊备份节
点:
− 当队头节点的图像要经过 VPSS 硬件处理时, VPSS 会将其放⼊备份节点,并替换掉原有图像。
− 当后端绑定的接收模块要求 VPSS 将队头图像放⼊备份节点时, VPSS 也会替换备份节点中的图像,即使该图像不经过硬件处理。
yup低延时
在 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模块功能介绍
uk是什么意思
通过调⽤ 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;/*Noi 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中有⼏个MPI HI_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设置通道模式是ur还是auto,最后HI_MPI_VPSS_EnableChn使能通道
citation
每次对单个通道进⾏操作,根据通道数决定操作次数
第⼆次第三次只创建了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 gment, default g mode */
COMPRESS_MODE_SEG128 =0x2,/* compress unit is 128 bytes as a gment */
COMPRESS_MODE_LINE =0x3,/* compress unit is the whole line */
COMPRESS_MODE_FRAME =0x4,/* compress unit is the whole frame */followme
COMPRESS_MODE_BUTT
} COMPRESS_MODE_E;
在vpss中的压缩原因?
对视频进⾏⼀些操作如叠加、缩放、锐化的操作都需要涉及到内存的拷贝,内存拷贝的操作是会占⽤DDR的带宽。VPSS的功能主要是将VI 来的视频流⼀路出多路,重点在缩放功能,所以需要减少DDR带宽的占⽤。
压缩可能造成的问题?
视频流压缩后,若不解压,抓出来的图会花掉,如果视频送到算法中忘记解压,那么算法结果就不准。对视频的⼀切操作之前都需要解压。
不过⼀般⽤不着压缩,除⾮⽤的DDR很烂,拷贝很慢。在对内存要求严苛的情况下,才会对不同模块间传输的视频流进⾏压缩。
帧率控制给的是-1,就是不控制帧率,可以在⽂档中查到
为什么要控制帧率?
⽐如主通道是25fps,算法只需要8fps,为了节省ddr贷款,把算法相关通道fps降到8就⾏了,抓图通道只要图就可以,1fps就够了。
帧率只会影响视频流畅度,在预览视频是⼀个评估标准;在不需要看视频,如送算法、抓图的情况下帧率越低越好
物理通道作⽤是⼤码流编码或图像抓拍
扩展通道⽤于缩放,3518e的4~11通道可以⼆次缩放