概述
系统控制根据 Hi35xx 芯片特性,完成硬件各个部件的复位、基本初始化工作,同时负
责完成 MPP(Media Process Platform 媒体处理平台)系统各个业务模块的初始化、去
初始化以及管理 MPP 系统各个业务模块的工作状态、提供当前 MPP 系统的版本信
息、提供大块物理内存管理等功能。
应用程序启动 MPP 业务前,必须完成 MPP 系统初始化工作。同理,应用程序退出
MPP 业务后,也要完成 MPP 系统去初始化工作,释放资源。
视频缓存池
视频缓存池主要向媒体业务提供大块物理内存管理功能,负责内存的分配和回收,充
分发挥内存缓存池的作用,让物理内存资源在各个媒体处理模块中合理使用。
一组大小相同、物理地址连续的缓存块组成一个视频缓存池。
视频输入通道需要使用公共视频缓存池。所有的视频输入通道都可以从公共视频缓存
池中获取视频缓存块用于保存采集的图像(如图 2-1 中所示从公共视频缓存池 B 中获
取视频缓存块 Bm)。由于视频输入通道不提供创建和销毁公共视频缓存池功能,因
此,在系统初始化之前,必须为视频输入通道配置公共视频缓存池。根据业务的不
同,公共缓存池的数量、缓存块的大小和数量不同。图 2-1 中所示缓存块的生存期是
指经过 VPSS 的通道以 USERMODE 方式传给后续模块的情形(图 2-1 实线路径)。如
果该缓存块完全没有经过 VPSS 的通道透传给其他模块,则将在 VPSS 模块处理后被放
回公共缓存池(图 2-1 虚线路径)。
HI_MPI_VB_SetConf
假设我们的图片格式大小类型为PIC_HD1080那stSize为1920 * 1080 (pstSize->u32Width = 1920;pstSize->u32Height = 1080;)
2、宽高对齐
CEILING_2_POWER(x,a) ceiling x to multiple of a(a must be power of 2)
CEILING_2_POWER(x,a) ( ((x) + ((a) – 1) ) & ( ~((a) – 1) ) )
意思就是u32Width (stSize.u32Width = 1080 的最近的上限值)必须是u32AlignWidth = 16 的整数倍 那就是1088 ,1088/16 = 68.即是16的整数倍做对齐操作。
依次计算出宽高。
3、根据像素格式计算缓存块大小
(PIXEL_FORMAT_YUV_SEMIPLANAR_420 和PIXEL_FORMAT_YUV_SEMIPLANAR_422 )
我们的是PIXEL_FORMAT_YUV_SEMIPLANAR_420 所以我们的缓存块大小是u32BlkSize = u32Width * u32Height * 3 / 2;个字节
这个格式的数据量跟YUV420 Planar的一样,但是U、V是交叉存放的,一个像素点对应一个Y,一个2X2的小方块对应一个U和V。
width * hight =Y(总和)
U = Y / 4
V = Y / 4
所以YUV420 数据在内存中的长度是 width * hight * 3 / 2,实际上Y U V 各占一个字节。
PIXEL_FORMAT_YUV_SEMIPLANAR_420 ,一个像素点对应一个Y,2个Y对应一个U和V。
width * hight =Y(总和)
U = Y / 2
V = Y / 2
所以YUV420 数据在内存中的长度是 width * hight (Y+Y/2+Y/2)=width * hight *2。
4、填充VB_CONF_S缓存池配置结构体
stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
stVbConf.astCommPool[0].u32BlkCnt = 20;
u32BlkCnt 需要根据具体的帧率来设定。
然后传入上述使用过程的api就完成申请了。这样内部mpp就可以使用到你已经配置好的缓存池了。
5、使用示例
视频像素格式为PIXEL_FORMAT_YUV_SEMIPLANAR_420
分辨率为PIC_HD1080(1920*1080)
参考链接: link.
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!