海思3518E开发笔记2.6——海思VPSS(Video Process Sub-System)模块详解

海思3518E开发笔记2.6——海思VPSS(Video Process Sub-System)模块详解 Winki 2024-01-11 15:44:20 237

海思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_CreateGrpHI_MPI_VPSS_GetNRParamHI_MPI_VPSS_SetNRParamHI_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通道可以二次缩放
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
Winki
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
Winki
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区