嵌入式视频方案学习第四篇——系统基本控制
来源:互联网 发布:美国mac口红海淘攻略 编辑:程序博客网 时间:2024/06/09 19:53
1、配置系统控制参数
接口:HI_S32 HI_MPI_SYS_SetConf(const MPP_SYS_CONF_S *pstSysConf);
功能:配置系统控制参数,没控制过调用才行
参数:
typedef struct hiMPP_SYS_CONF_S
{
/* stride of picture buffer must be aligned with this value.
* you can choose a value from 1 to 1024,
* and it except 1 must be multiple of 16.*/
HI_U32 u32AlignWidth;
}MPP_SYS_CONF_S;
这个参数的具体含义是什么,后面再看,可能跟处理器的位数及采集一行图像的大小有关,默认设置16
2、获取系统控制参数
接口:HI_S32 HI_MPI_SYS_GetConf(MPP_SYS_CONF_S *pstSysConf);
3、初始化MPP系统
HI_S32 HI_MPI_SYS_Init(HI_VOID);
注意:调用要在视频缓存池之后,也需要先配置系统参数。
4、去初始化MPP系统
HI_S32 HI_MPI_SYS_Exit(HI_VOID);
5、图像数据源到图像数据接收者绑定
数据处理模块绑定后可以自动运输
HI_S32 HI_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);
参数:
typedef struct hiMPP_CHN_S
{
MOD_ID_E enModId;
HI_S32 s32DevId;
HI_S32 s32ChnId;
} MPP_CHN_S;
成员名称 描述
enModId 模块号。 直接找到相应的枚举即可
s32DevId 设备号。
s32ChnId 通道号。
通道号与设备号怎么设置后面再看
6、解绑
HI_S32 HI_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);
7、获取MPP版本
HI_S32 HI_MPI_SYS_GetVersion(MPP_VERSION_S *pstVersion);
8、获取当前时间戳
HI_S32 HI_MPI_SYS_GetCurPts(HI_U64 *pu64CurPts);
这个时间戳有什么用?
9、初始化时间戳
HI_S32 HI_MPI_SYS_InitPtsBase(HI_U64 u64PtsBase);
10、同步时间戳
HI_S32 HI_MPI_SYS_SyncPts(HI_U64 u64PtsBase);
11、存储映射接口。
HI_VOID * HI_MPI_SYS_Mmap(HI_U32 u32PhyAddr, HI_U32 u32Size);
12、存储反映射接口
HI_S32 HI_MPI_SYS_Munmap(HI_VOID* pVirAddr, HI_U32 u32Size);
13、设置寄存器的值
HI_S32 HI_MPI_SYS_SetReg(HI_U32 u32Addr, HI_U32 u32Value);
14、获取寄存器的值。
HI_S32 HI_MPI_SYS_GetReg(HI_U32 u32Addr, HI_U32 *pu32Value);
15、在用户态分配MMZ内存。
HI_S32 HI_MPI_SYS_MmzAlloc(HI_U32 *pu32PhyAddr, void **ppVitAddr,
const HI_CHAR *pstrMmb, const HI_CHAR *pstrZone, HI_U32 u32Len);
16、在用户态分配MMZ内存,该内存支持 cache 缓存
HI_S32 HI_MPI_SYS_MmzAlloc_Cached(HI_U32 *pu32PhyAddr, HI_VOID
**ppVitAddr, const HI_CHAR *pstrMmb, const HI_CHAR *pstrZone, HI_U32
u32Len);
这种申请的内存带缓存,但是外围设备访问不了
17、清空cache 里的内容到内存并且使 cache 里的内容无效
HI_S32 HI_MPI_SYS_MmzFlushCache(HI_U32 u32PhyAddr, HI_VOID *pVitAddr,
HI_U32 u32Size);
18、在用户态释放MMZ内存。
HI_S32 HI_MPI_SYS_MmzFree(HI_U32 u32PhyAddr, HI_VOID *pVirtAddr);
18、设置MPP视频缓存池属性
HI_S32 HI_MPI_VB_SetConf (const VB_CONF_S *pstVbConf);
参数:
typedef struct hiVB_CONF_S
{
HI_U32 u32MaxPoolCnt; /* max count of pools, (0, VB_MAX_POOLS] */
Struct hiVB_CPOOL_S
{
HI_U32 u32BlkSize;
HI_U32 u32BlkCnt;
HI_CHAR acMmzName[MAX_MMZ_NAME_LEN];
}astCommPool[VB_MAX_COMM_POOLS];
} VB_CONF_S;
u32MaxPoolCnt :整个系统中可容纳的缓存池个数 ,这个固定取值最大 ?
u32BlkSize :每个缓存块的大小 ,这个可以根据摄像头像素来确定
u32BlkCnt:缓存块的个数 这个数量设置多少合适?
acMmzName :缓存池在所在的MMZ的名字
19、获取视频缓存区属性
HI_S32 HI_MPI_VB_GetConf (VB_CONF_S *pstVbConf);
20、初始化MPP视频缓存池
HI_S32 HI_MPI_VB_Init (HI_VOID);
21、去初始化MPP视频缓存池
HI_S32 HI_MPI_VB_Exit (HI_VOID);
22、创建一个视频缓存池
VB_POOL HI_MPI_VB_CreatePool(HI_U32 u32BlkSize,HI_U32 u32BlkCnt, const HI_CHAR *pcMmzName);
u32BlkSize:缓存池中每个缓存块的大小
u32BlkCnt :缓存池中缓存块的个数
pcMmzName:缓存池所在DDR的名字
23、销毁一个视频缓存池
HI_S32 HI_MPI_VB_DestroyPool(VB_POOL Pool);
24、用户态获取一个缓存块
VB_BLK HI_MPI_VB_GetBlock(VB_POOL Pool, HI_U32 u32BlkSize,const HI_CHAR *pcMmzName);
25、用户态释放一个已经获取的缓存块
HI_S32 HI_MPI_VB_ReleaseBlock(VB_BLK Block);
- 嵌入式视频方案学习第四篇——系统基本控制
- 嵌入式视频方案学习第六篇——视频输入
- 嵌入式视频方案学习第五篇——系统初始化的一般流程
- 嵌入式视频方案学习第二篇——Hi3518E介绍
- 嵌入式视频方案学习第七篇——视频输入VI一般的初始化流程
- 嵌入式视频方案学习第八篇——视频输出VOU
- 嵌入式视频方案学习第九篇——视频处理子系统VPSS
- 嵌入式视频方案学习第十篇——视频处理子系统VPSS 一般初始化流程
- 嵌入式视频方案学习第十二篇——视频编码模块VENC 一般初始化过程
- 嵌入式Linux学习笔记第四天 ——进程控制
- 嵌入式视频方案学习之第一篇—主流视频方案介绍
- 嵌入式视频方案学习第三篇——Hi3518E SDK安装说明
- 嵌入式视频方案学习第三篇——Hi3518E 媒体处理软件平台介绍
- 嵌入式视频方案学习第十三篇——音频模块AUDIO
- 嵌入式视频方案学习第十一篇——视频编码模块VENC
- linux基本介绍——嵌入式学习
- 嵌入式系统方案规划
- 20170403_Linux视频学习1——Linux系统的基本命令
- 【排序算法-4】直接插入排序法
- #python爬取音乐网站
- 创建文档
- MyBatis一对一关联表查询
- (HDU 1226)超级密码 BFS 同余模应用
- 嵌入式视频方案学习第四篇——系统基本控制
- opencv:通道分离—split()函数
- 关于微信支付(H5获取openid)
- ubuntu16.04安装搜狗输入法
- HihoCoder第四周(Trie图)
- 时间处理
- opencv:通道合并—merge()函数
- 389. Find the Difference --字符串的共同字符
- C++第六次作业-数组操作、字符串操作