Cambricon CE3226 媒体处理系统(四):视频处理子系统

随着 AI 技术的不断发展,从 Sensor 采集数据,经过处理之后给 AI 模型做图像分析已经变成一个很典型的应用。因此,在嵌入式应用行业,无论是汽车,安防,手机等应用中,对 Sensor 采集的数据做图像处理变得非常重要。针对以上需求,Cambricon CE3226 内部集成了多个复杂的硬件组件,并实现了对应的中间层软件库,能够满足客户对视频处理的各种要求。
本系列博文会对 CNMPS(Cambricon Media Process System,寒武纪媒体处理系统)各个组件功能,工作原理作详细介绍,并对中间层软件作系统分析,方便客户编写自己的应用程序。
本文是该系列博文的第四篇,介绍视频处理系统(VPPS)的组成,工作原理以及软件架构。

一、基本概念

VPPS(Video Post Process Sub‑System,视频处理子系统)支持以下图像处理功能:

  • FRC(Frame Rate Control,帧率控制);
  • CROP 裁剪;
  • Scale 放大缩小;
  • 像素格式转换;
  • 固定角度旋转;
  • Mosaic;
  • Mirror/Flip;
  • Aspect Ratio 幅型比转换;
  • 压缩和解压缩。

7.2 基本概念

  • GROUP

GROUP 即 VPPS 对 用 户 提 供 的 组, 为 用 户 提 供 输 入 能 力。 最 大 个 数 请 参 见 macro

VPPS_MAX_GRP_NUM 定义,各 GROUP 分时复用 VPPS 硬件,硬件依次处理各个组提交的任

务。

  • CHANNEL

通道包含物理通道和扩展通道。物理通道由 VPPS 硬件提供,包含多个物理通道,每个物理通道具备

缩放、裁剪、马赛克、幅型转换等功能。扩展通道具备缩放功能,必须绑定物理通道才能使用。它将

绑定的物理通道的输出作为自己的输入,将输入图像缩放成设置的分辨率输出。各 GROUP 分时复用

VPPS 硬件,逻辑上拥有同样的通道数。

  • PIPE

VPPS 组的管道,为用户提供输入能力,取值只能为 0。

  • FRC

帧率控制,分为组帧率控制和通道帧率控制。

– 组帧率控制:用于控制各 GROUP 对输入图像的接收。

– 通道帧率控制,用控制各个物理通道和扩展通道图像的处理。

  • CROP

裁剪,分为组裁剪、物理通道裁剪以及扩展通道裁剪。

– 组裁剪,VPPS 对输入图像进行裁剪。

– 物理通道裁剪,VPPS 对各个物理通道的输出图像进行裁剪。

– 扩展通道裁剪,VPPS 调用 VGU 对扩展通道的输出图像进行裁剪。

  • 像素格式转换

支持输入输出图像的像素数据格式转换。

  • Scale

缩放,对图像进行放大缩小。物理通道水平、垂直最大支持 64 倍缩小,最大支持 64 倍放大;扩展通道水平、垂直最大支持 64 倍缩小,最大支持 64 倍放大。

  • Mirror/Flip

Mirror 为水平镜像,Flip 为上下翻转。可使用 Mirror+Flip 实现 180° 旋转。

  • Mosaic

马赛克,对 VPPS 的输出图像填充马赛克。

  • 固定角度旋转

调用 VGU 对 VPPS 通道的输出图像进行旋转,支持 0 度、90 度、180 度以及 270 度固定角度的旋转功能。

  • 压缩

支持 linear 格式的 SEG 压缩。

  • 解压

支持 linear 格式的 SEG 解压。

  • Aspect Ratio

– 幅型比,制定输出画面相对于输入画面的宽高纵横比。

– 幅型比参数在通道属性中设置。

– 设定为 ASPECT_RATIO_MANUAL 模式时,用户手动设置图像的起始坐标和宽高,VPPS 会根据用户的设置来输出图像并添加边幅,边幅颜色可设置,默认为黑边。

– 设定为 ASPECT_RATIO_AUTO 模式时,VPPS 会保持画面的宽高比和输入宽高比一致,边幅颜色可设置,默认为黑边。

  • 工作模式

– 支 持 VI_OFFLINE_VPPS_OFFLINE、VI_ONLINE_VPPS_OFFLINE、VI_ONLINE_VPPS_ONLINE、

VI_OFFLINE_VPPS_ONLINE 模式。

– 工作模式通过 cnsysSetViVppsMode 接口设置,详见“系统控制”章节。

  • vpps_en

VPPS 硬件开关,用户可以在加载 VPPS 驱动时设置模块参数 vpps_en 来设置 VPPS IP(硬件 ID 号)使能。只支持开启或关闭 VPPS1,VPPS0 和 VPPS1 默认开启。

  • 分块

输入图像宽度超过 4096 像素时分块。

 

二、功能描述

VPPS 在系统中的位置入图( 1) 所示。
图(1)

通过调用 SYS 模块的绑定接口,可与 APS/USER/VDEC/VI/和 VO/VENC 等模块进行绑定,其中前者为

VPPS 的输入源,后者为 VPPS 的接收者。用户可通过 API 接口对 GROUP 进行管理。每个 GROUP 仅可

与一个输入源绑定。GROUP 的物理通道支持 USER 模式,USER 模式下各通道可与多个接收者绑定。

 

VPPS 数据处理流程如图 (2) 所示。VPPS 调用 VGU 进行通道的旋转以及作为扩展通道。

图(2)

 

VPPS 输入像素格式如图(3)所示:
图(3)

 

三、API

1.驱动交互 API

/mps/out/include/cn_vpps.h 头文件中,具体实现封装在/mps/out/lib/libcn_vi.so 动态库文件中。这些 API函数直接与驱动程序交互。涉及的数据类型在 /mps/out/include/cn_common_vpps.h 中。以下列举一些重要的 API 作说明。

cnS32_t cnvppsCreateGrp(vppsGrp_t s32VppsGrp, const cnvppsGrpAttr_t *pstGrpAttr);//创建GROUP

cnS32_t cnvppsStartGrp(vppsGrp_t s32VppsGrp);//启动 VPPS GRP

cnS32_t cnvppsResetGrp(vppsGrp_t s32VppsGrp);//重置

cnS32_t cnvppsGetGrpAttr(vppsGrp_t s32VppsGrp, cnvppsGrpAttr_t *pstGrpAttr);//获取属性

cnS32_t cnvppsSetGrpAttr(vppsGrp_t s32VppsGrp, const cnvppsGrpAttr_t *pstGrpAttr);//设置属性

cnS32_t cnvppsSetGrpCrop(vppsGrp_t s32VppsGrp, const cnvppsCropInfo_t *pstCropInfo);//设置功能属性

cnS32_t cnvppsSendFrame(vppsGrp_t s32VppsGrp, vppsGrpPipe_t stVppsGrpPipe, const cnVideoFrameInfo_t *pstVideoFrame, cnS32_t s32MilliSec);//向VPPS发送数据

 

/* Chn Settings */

cnS32_t cnvppsSetChnAttr(vppsGrp_t s32VppsGrp, vppsChn_t s32VppsChn, const cnvppsChnAttr_t *pstChnAttr);//设置 VPPS 物理通道属性

cnS32_t cnvppsSetChnCrop(vppsGrp_t s32VppsGrp, vppsChn_t s32VppsChn, const cnvppsCropInfo_t *pstCropInfo);//设置 VPPS CHN 功能属性

cnS32_t cnvppsSetChnRotation(vppsGrp_t s32VppsGrp, vppsChn_t s32VppsChn, cnvppsEnRotate_t enRotationInfo);//设置 VPPS 通道图像固定角度旋转属性

cnS32_t cnvppsGetChnFrame(vppsGrp_t s32VppsGrp, vppsChn_t s32VppsChn, cnVideoFrameInfo_t *pstVideoFrame, cnS32_t s32MilliSec);//从通道获取一帧处理完成的图像

/* ExtChn Settings */

cnS32_t cnvppsSetExtChnAttr(vppsGrp_t s32VppsGrp, vppsChn_t s32VppsChn, const cnvppsExtChnAttr_t *pstExtChnAttr);//设置 VPPS 扩展通道属性

 

cnS32_t cnvppsGetGrpFrame(vppsGrp_t s32VppsGrp, vppsGrpPipe_t stVppsGrpPipe, cnVideoFrameInfo_t *pstVideoFrame);//获取 VPPS GROUP 的一帧原始图像

 

2.驱动交互 API

/mps/sample/common/cnsample_comm_vo.cpp 为用户 API,实现了 cnsampleCommVppsStart()和 cnsampleCommVppsStop()两个函数。图(4)为 cnsampleCommVppsStart()函数主体。
图(4)

该函数主要通过传入的 VPPS Group,CHN 属性参数,设置对应的硬件并启动。

cnsampleCommVppsStop()实现了对应的反操作。具体不再赘述。

  

参考资料:

寒武纪媒体处理系统开发者手册-CN-v0.8.0.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论