概述
目录
- 系统控制
- 1.MPP的概述
- 2.mpp处理平台架构
- 3.视频缓存池
- 4.系统绑定
- 5.VI/VPSS 离/在线模式
系统控制
1.MPP的概述
海思提供的媒体处理软件平台(Media Process Platform,简称 MPP),可支持应用软件快速开发。该平台对应用软件屏蔽了芯片相关的复杂的底层处理,并对应用软件直接提供MPI( MPP Programe Interface)接口完成相应功能。该平台支持应用软件快速开发以下功能:
【1】视频方面
- 输入视频捕获
- 视频图像前处理(包括去噪、增强、锐化、 Deinterlace)
- H.265/H.264/MJPEG/JPEG/MPEG4 编码
- H.264/MPEG4/MPEG2解码
- 视频输出显示
- 编码码流叠加 OSD
- 视频侦测分析
- 智能分析
【2】音频方面
- 音频捕获及输出
- 音频编解码等功能
【3】MPP所处层次框架图
2.mpp处理平台架构
【1】海思媒体处理平台的主要内部处理流程如图
【2】各模块的功能概述
-
VI 模块:捕获视频图像,可对其做剪切、缩放等处理,并输出多路不同分辨率的图像数据。
-
VDEC解码模块:对编码后的视频码流进行解码,并将解析后的图像数据送 VPSS 进行图像处理或直接送 VO 显示。可对 H264/MPEG4/MPEG2 格式的视频码流进行解码。
-
VPSS 模块:接收 VI 和解码模块发送过来的图像,可对图像进行去噪、图像增强、锐化等处理,并实现同源输出多路不同分辨率的图像数据用于编码、预览或抓拍。
-
VENC编码模块:接收 VI 捕获并经 VPSS 处理后输出的图像数据,可叠加用户通过 Region模块设置的 OSD 图像,然后按不同协议进行编码并输出相应码流。
-
VDA 模块:接收 VI 的输出图像,并进行移动侦测和遮挡侦测,最后输出侦测分析结果。
-
VO 模块:接收 VPSS 处理后的输出图像,可进行播放控制等处理,最后按用户配置的输出协议输出给外围视频设备。
3.视频缓存池
1、什么是视频缓冲池(VB)
视频缓存池主要向媒体业务提供大块物理内存管理功能,负责内存的分配和回收,充分发挥内存缓存池的作用,让物理内存资源在各个媒体处理模块中合理使用。一组大小相同、物理地址连续的缓存块组成一个视频缓存池。
视频输入通道需要使用公共视频缓存池。所有的视频输入通道都可以从公共视频缓存池中获取视频缓存块用于保存采集的图像(如图中所示从公共视频缓存池 A 中获取视频缓存块Bm)。
由于视频输入通道不提供创建和销毁公共视频缓存池功能,因此,在系统初始化之前,必须为视频输入通道配置公共视频缓存池。根据业务的不同,公共缓存池的数量、缓存块的大小和数量不同。
图中所示缓存块的生存期是指经过 VPSS 通道传给后续模块的情形( 图 2-1 实线路径)。
如果该缓存块完全没有经过 VPSS 通道传给其他模块,则将在 VPSS 模块处理后被放回公共缓存池(图 2-1 虚线路径)
视频输入( VI)、视频处理( VPSS)、视频编码( VENC)、视频解码( VDEC)、视频输出(VO)、视频侦测分析(VDA)
2、要点
(1)视频的本质是多帧图片,图片的本质是RGB或rawRGB数据,要占用一段连续内存
(2)视频的裁剪、缩放、修正处理等各种操作,本质上就是对内存中的数据进行运算
(3)视频缓存池(VB, video buffer)就是一段很大,又被合理划分和管理的内存,用来做视频数据的暂存和运算场地
(4)公共视频缓存池的公共2字,可以理解为全局变量,也就是各个模块都能访问的一段内存
(5)看似视频缓存块在各个模块之间流转,实际上并没有内存复制,而是指针在传递
(6)视频缓存池的内存由MPP来维护,我们在系统启动时就把整个SDRAM分成了2部分:系统部分(由linux kernel来维护管理)和mpp部分(由mpp系统来维护管理)
(7)缓存池需要几个,每个中包含几个缓存块,每个缓存块多大,都是可以由用户程序设置好参数,然后调用MPP的相应API来向MPP申请分配的。
3、相关的数据结构和API
(1)VB_CONF_S
(2)HI_MPI_VB_SetConf
设置 MPP 视频缓存池属性
(3)HI_MPI_VB_Init
初始化 MPP 视频缓存池
使用举例子:(来自华为海思官方的mpp使用参考手册)
HI_S32 s32ret;
VB_CONF_S struVbConf;
MPP_SYS_CONF_S struSysConf;
memset(&struVbConf,0,sizeof(VB_CONF_S));
struVbConf.u32MaxPoolCnt = 64; //填充结构体
struVbConf.astCommPool[0].u32BlkSize = 1920*1088*2;
struVbConf.astCommPool[0].u32BlkCnt = 15;
memset(struVbConf.astCommPool[0].acMmzName,0,sizeof(struVbConf.astCommPoo
l[0].acMmzName));
s32ret = HI_MPI_VB_SetConf(&struVbConf); //设置 MPP 视频缓存池属性
if (HI_SUCCESS != s32ret)
{
return s32ret;
}
s32ret = HI_MPI_VB_Init();
if (HI_SUCCESS != s32ret)
{
return s32ret;
}
struSysConf.u32AlignWidth = 16;
/* set config of mpp system*/
s32ret = HI_MPI_SYS_SetConf(&struSysConf);
if (HI_SUCCESS != s32ret)
{
printf("Set mpp sys config failed!n");
return s32ret;
}
/* init system*/
s32ret = HI_MPI_SYS_Init(); //初始化 MPP 视频缓存池
if (HI_SUCCESS != s32ret)
{
printf("Mpi init failed!n");
return s32ret;
}
4.系统绑定
【1】MPP 提供系统绑定接口( HI_MPI_SYS_Bind),即通过数据接收者绑定数据源来建立两者之间的关联关系(只允许数据接收者绑定数据源)。绑定后,数据源生成的数据将自动发送给接收者。
【2】目前 MPP 支持的绑定关系(只列举VI模块,用于熟悉基本关系,更多具体还需去查手册)
5.VI/VPSS 离/在线模式
【1】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。
文章内容参考了海思官方的《HiMPP IPC V2.0 媒体处理软件开发参考》,请勿用于商业用途,转载请注明出处。
最后
以上就是着急蜜蜂为你收集整理的海思HI3518E视频处理基础知识《一》----- 系统控制mpp系统控制的全部内容,希望文章能够帮你解决海思HI3518E视频处理基础知识《一》----- 系统控制mpp系统控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复