Cambricon CE3226 媒体处理系统(一):概述

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


一、系统总览

1.概述

CNMPSCambricon Media Process System,寒武纪媒体处理系统)封装了寒武纪媒体芯片复杂的底层处理,并提供了媒体 SDK,用于快速开发应用软件。CNMPS 支持开发视频输入、视频图像处理(包括降噪、去雾、裁剪、缩放、旋转等)、H.265/H.264/JPEG 编码和解码、视频输出显示、多路图像拼接、图像矫正、音频输入及输出等功能。

 

2.系统架构

CNMPS 支持的典型的系统层次如下图所示,主要分为以下层次:

  • 硬件层

硬件层由 CE3226V100 芯片和 SD 卡、DDR、Flash、视频 Sensor、网卡等外围器件组成。

  • 操作系统层

基于 Linux 的 OS 系统。

  • 媒体处理系统

基于操作系统层,提供媒体相关模块驱动和库,完成媒体功能。

  • 其他驱动

寒武纪为 CE3226V100 芯片提供了 Watchdog、RTC 等其他相关硬件驱动。

  • 应用层

用户基于媒体系统平台和其它驱动,开发的具有媒体功能的应用系统。

3.系统处理流程

CNMPS 主要包含以下模块:视频输入(VI)、视频处理子系统(VPPS)、视频编码(VENC)、视频解码(VDEC)、视频输出(VO)、先进全景拼接(APS)、音频输入(AI)、音频输出(AO)、区域管理(REGION)、2 维图像引擎(G2D)等。

典型数据处理流程如图(1)所示:

图(1)

 

  • VI(Video Input,视频输入)模块包含 MIPI/LVDS/DVP 等视频捕获接口、ISP 图像处理单元,实现视频 RAW 图像接收、图像校正、图像增强等功能,输出 YUV 图像。
  • VPPS(Video Post Process Sub‑System,视频处理子系统)模块包含图像裁剪、图像翻转镜像、 图像缩放、打马赛克等处理,可以输出多路不同分辨率 YUV 图像。
  • VDEC(Video Decoder,视频解码)模块支持 H.265/H.264/JPEG 视频格式的解码,输出 YUV 图像。
  • VENC(Video Encoder,视频编码)模块支持 H.265/H.264/JPEG 视频格式的编码,并叠加 OSD 到码流。
  • VO(Video Output,视频输出)模块支持视频图像显示。
  • APS(Advanced Panoramic Stitching,先进全景拼接)模块支持接收多路图像,然后拼接校正成全景图像。
  • AI(Audio Input,音频输入)模块支持音频数据采集。
  • AO(Audio Output,音频输出)模块支持音频数据播放。

  

二、系统控制

系统控制主要对硬件模块进行复位、初始化工作,去初始化、建立模块之间绑定关系、并提供设备内存管理等功能。

系统启动媒体业务前,必须先完成系统初始化。退出媒体业务后,需要完成系统去初始化,释放。

 

1.视频缓存池

VP(Video Pool,视频缓存池)提供大块设备内存及管理功能,负责内存的分配及回收。缓存池由一组设备地址连续,物理地址可以不连续,大小相同的 VB(Video Block,视频缓存块)组成。媒体业务启动前,需要配置及初始化 VP。根据需要可以配置不同大小不同个数的 VP。VB 数据流如下图所示,系统根据需要,先创建 k 个大小相同的 VP_A 缓存池,m 个大小相同的 VP_B 缓存池,n 个大小相同的 VP_C 缓存池,组成公共视频缓冲池(Common VP)。详细步骤如图(2)所示:


图(2)

① VI 模块通过 VB 管理模块获取大小匹配的 Ai 缓存块,捕获视频数据,并处理后,把 Ai 块传递给 VPPS模块。

② VPPS 模块通过 VB 管理模块为两路输出获取大小匹配的 Bj、Ck 缓存块。

③ 处理 Ai 块后,释放 Ai 块,并把 Bj 块传递给 VENC 模块,把 Ck 块传递给 VO 模块。

④ VENC 处理后释放 Bj 块,VO 模块处理后释放 Ck 块。

 

2.绑定

CNMPS 提供系统绑定接口 cnsysBind 建立两个模块之间数据传递关系,一旦绑定,数据源会自动发送数据给数据接收者,数据源支持绑定多个接收者。系统模块的绑定关系如图(3)所示:

                                     


 图(3)

 3.VI 和 VPPS 工作模式

VI 和 VPPS 工作模式说明如图(4)所示:

   
 图(4)

  • TDNR(Three Dimension Noise Reduce)指 3D 降噪,CE3226V100 只支持 1 路在线。
  • CSI(CMOS Sensor Interface)指 CMOS Sensor 接口,CE3226V100 只支持 2 路线性模式在线,不支持 WDR 模式在线。

PIPE(视频数据处理单元)可以设置成 VI 和 VPPS 在线离线组合模式:

  • VI 在线 VPPS 离线
  • VI 在线 VPPS 在线
  • VI 离线 VPPS 离线
  • VI 离线 VPPS 在线

注解:

  • VI 在线/离线指 CSI 与 ISP 之间的在线/离线模式。
  • VPPS 在线/离线指 TDNR 与 VPPS 之间的在线/离线模式。

 

三、API

            系统相关的 API实现一般在动态库 libcn_sys.so文件中,不公开源代码,并在 /mps/out/include/cn_sys.h , cn_api.h等文件中导出,如图(5)cnS32_t cnsysInit(cnVoid_t) & cnS32_t  cnsysBind(const cnMediaChn_t* pstSrcChn, const cnMediaChn_t* pstDestChn) 两个函数最为重要,cnsysInit()函数用于初始化 MPS 系统,cnsysBind()根据 cnMediaChn_t 结构体绑定两个模块,该结构体指定了模块 ID,设备 ID以及通道 ID。mps/out/include/cn_common.h对各个模块 ID 做了编号,不同模块的设备 ID,通道 ID 具体含义不同,详细请参考后续章节。


图(5)

为了方便应用程序的编写, mps/sample/common/cnsample_common_sys.cpp 调用以上接口,实现了若干系统初始化、系统退出、模块之间的绑定与解除绑定函数,供客户直接使用。以下对两个具有代表性的函数说明如图(6)cnS32_t cnsampleCommSysInit(struct vbConfigs* pstVbConfig)  函数用于初始化 MPS 系统,如前文所讲,在启动 MPS 前必须对视频缓存池进行配置,line220 cnVBSetComCfg() 函数,根据输入参数 pstVbConfig 对系统进行配置。


图(6)

如图(7)cnS32_t cnsampleCommViBindVpps(viPipe_t ViPipe, viChn_t ViChn, vppsGrp_t VppsGrp) 用于VI(源) 绑定VPPS(目的)。其他各个模块之间绑定函数与此类似。


图(7)

 

参考资料:寒武纪媒体处理系统开发者手册-CN-v0.8.0.PDF

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

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

评论