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);