VB(视频缓冲区)配置

本文详细介绍了VB(Video Buffer)配置过程,包括缓冲池的申请、初始化、地址获取以及缓冲区管理。重点讨论了不同映射模式,如不映射、映射到cache,并解释了物理地址和虚拟地址的概念。同时,提到了内存对齐、接口调用成功判断、MPP系统初始化的注意事项,以及程序中退出和释放缓冲块的重要性。
摘要由CSDN通过智能技术生成

1.申请缓冲池 把地址给打出来

利用相关数据结构和API实操
(1).设置缓冲池的信息
用到的API参考海思提供sample代码

VB_CONF_S
HI_MPI_VB_SetConfig
HI_MPI_VB_Init

(2).初始化
(3).获取地址
(4).退出

设置缓冲池信息主要是配置VB_CONFIG_S结构体,必须包含hi_comm_vb.h、mpi_vb.h
头文件。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(1).VB_POOL_CONFIG_S的第3个参数hiVB_REMAP_MODE_E是枚举类型,hiVB_REMAP_MODE_E
4种模式可选为不映射,不映射到cache, 映射到cache, 预留。不映射是指申请完缓冲块不需要对地址进行映射,普通映射指物理地址映射成虚拟地址,物理地址指给内核态直接访问的一块地址,虚拟地址是用户态访问的地址,用户态不会直接访问物理地址,这时需要地址页表映射。也就是说这里的VB_REMAP_MODE_NOCACHE = 1, /* no cache remap */不映射到cache但是它映射到虚拟地址。
(2).映射到cache是指已经通过两步已经映射到虚拟地址,再映射到cache上,作用是访问快。
(3)HI_CHAR acMmzName[MAX_MMZ_NAME_LEN]表示每个缓存块的名字。
在这里插入图片描述

tvbParamConf.astCommPool[0].u64BlkSize 计算大小  海思提供一套计算大小接口

在这里插入图片描述
在这里插入图片描述

HI_U32 u32Width, HI_U32 u32Height为分辨率, PIXEL_FORMAT_E enPixelFormat图像格式这里是yvu420sp内部排列yyyyyyyyyvuvuvuvu交错排列。

DATA_BITWIDTH_E enBitWidth指内存对齐,选择8字节对齐。
在这里插入图片描述

COMPRESS_MODE_E enCmpMode暂时没有用处COMPRESS_MODE_NONE不对它进行设置
在这里插入图片描述

HI_U32 u32Align刚才是8字节对齐所以这里就写为这个宏#define DEFAULT_ALIGN 8
海思内部封装为8。

4.如何判断接口调的成功呢?
在这里插入图片描述

函数类型为HI_S32,所以定义一个HI_S32 nRet变量。
i

f(nRet)
	{
   
		printf("HI_MPI_VB_SetConfig failed,nRet=0x%x", nRet);/*打印出16进制错误码
		return -1;
	}

5.接下来是初始化视频缓冲池
在这里插入图片描述
在这里插入图片描述

6.接下来是初始化MPP系统但是之前必须先调用 HI_MPI_SYS_SetConfig后才能初始化
在这里插入图片描述
在这里插入图片描述

注意:
*必须先调用 HI_MPI_SYS_SetConfig 配置 MPP 系统后才能初始化,否则初始化会 
失败。 
 
*由于 MPP 系统的正常运行依赖于缓存池,因此需要先调用 HI_MPI_VB_Init 初始 
化缓存池,再初始化 MPP 系统,否则会导致业务运行异常。 
 
如果多次初始化,仍会返回成功,但实际上系统不会对 MPP 的运行状态有任何影 
响。 
 
只要有一个进程进行初始化即可,不需要所有的进程都做系统初始化的操作。 
 
由于音频模块依赖用户态属性,故音频不支持多进程操作。用户需要保证音频的 
相关操作和 HI_MPI_SYS_Init 在同一个进程中。

7.变量命名规则 s32 为有符号的32位 n前缀,U64 qw前缀,U32 dw前缀

HI_S32                       nRet;
HI_U32     	             qwBlkSize;
qwBlkSize = COMMON_GetPicBufferSize(1920, 1080, 
		           	PIXEL_FORMAT_YVU_SEMIPLANAR_420,
		           DATA_BITWIDTH_8, COMPRESS_MODE_NONE
		          DEFAULT_ALIGN);       
printf(" qwBlkSize = %ld\n",  qwBlkSize);
tvbParamConf.astCommPool[0
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴凯你在想啥呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值