3.3. API参考¶
MMF系统控制实现系统初始化、系统绑定解绑、视频区块池初始化、创建视频区块池、获取MMF版本号、获取当前处理器的ID等功能。
该功能模块提供以下API:
CVI_MSG_Init:双核消息通信初始化。
CVI_MSG_Deinit:双核消息通信去初始化。
CVI_SYS_Init:初始化MMF系统。
CVI_SYS_Exit:去初始化MMF系统。
CVI_SYS_Bind:数据源到数据接收者绑定。
CVI_SYS_UnBind:数据源到数据接收者解绑定。
CVI_SYS_GetBindbyDest:根据数据接收者获取绑定的数据源。
CVI_SYS_GetBindbySrc:根据数据源获取绑定的数据接收者。
CVI_SYS_GetVersion:获取当前MMF软件的版本号
CVI_SYS_GetChipId:获取当前处理器的ID
CVI_SYS_Mmap:内存映射接口。
CVI_SYS_MmapCache:内存映射接口。
CVI_SYS_Munmap:内存反映射接口。
CVI_SYS_IonAlloc:用户分配ION内存。
CVI_SYS_IonAlloc_Cached:用户分配ION内存,该内存将支持 cache
CVI_SYS_IonFlushCache:刷新cache 的内容到内存,并且使 cache 里的内容无效。
CVI_SYS_IonInvalidateCache:使 cache 里的内容无效。
CVI_SYS_IonFree:用户释放ION内存。
CVI_SYS_SetVIVPSSMode:设置VI & VPSS的工作模式
CVI_SYS_GetVIVPSSMode:获取VI & VPSS的工作模式
CVI_SYS_SetVPSSMode:设置VPSS的工作模式
CVI_SYS_GetVPSSMode:获取VPSS的工作模式
CVI_SYS_GetModName:获取对应MOD_ID的字符串句柄
CVI_VB_SetConfig:设置MMF视频区块池属性。
CVI_VB_GetConfig:获取MMF视频区块池属性。
CVI_VB_Init:初始化MMF视频区块池。
CVI_VB_Exit:去初始化MMF视频区块池。
CVI_VB_GetBlock:获取一个视频区块。
CVI_VB_ReleaseBlock:释放一个已经获取的视频区块。
CVI_VB_PhysAddr2Handle:通过区块的物理地址获取其句柄。
CVI_VB_Handle2PhysAddr:获取一个区块的物理地址。
CVI_VB_Handle2PoolId:获取一个区块所在区块池的ID
CVI_VB_InquireUserCnt:查询区块使用计数。
CVI_LOG_SetLevelConf:设置日志等级。
CVI_LOG_GetLevelConf:获取日志等级。
3.3.1. CVI_MSG_Init¶
- 【描述】
双核消息通信初始化,仅双系统SDK支持。
- 【语法】
CVI_S32 CVI_MSG_Init(CVI_VOID);- 【参数】
无。
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_msg_client.h
库文件:libmsg.a
- 【注意】
在双系统中,该API第一个调用。
不能多次调用。
- 【举例】
无。
- 【相关主题】
3.3.2. CVI_MSG_Deinit¶
- 【描述】
双核消息通信去初始化,仅双系统SDK支持。
- 【语法】
CVI_S32 CVI_MSG_Deinit(CVI_VOID);- 【参数】
无。
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_msg_client.h
库文件:libmsg.a
- 【注意】
在双系统中,该API最后一个调用。
- 【举例】
无。
- 【相关主题】
3.3.3. CVI_SYS_Init¶
- 【描述】
初始化系统。 包括视频输入输出、视频编解码、视频叠加区域、视频处理、音频输入输出等模块都会被初始化 。
- 【语法】
CVI_S32 CVI_SYS_Init(CVI_VOID);- 【参数】
无。
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
由于MMF系统的正常运行依赖于区块池,因此需要先调用CVI_VB_Init初始化区块池,再初始化MMF系统,否则会导致功能运行异常。
在未调用去初始化前,如果多次初始化,仍会返回成功,但实际上系统不会对MMF的运行状态有任何影响。
- 【举例】
CVI_S32 s32Ret = CVI_FAILURE; CVI_SYS_Exit(); CVI_VB_Exit(); if (pstVbConfig == NULL) { SAMPLE_PRT("input parameter is null, it is invaild!\n"); return CVI_FAILURE; } s32Ret = CVI_VB_SetConfig(pstVbConfig); if (s32Ret != CVI_SUCCESS) { SAMPLE_PRT("CVI_VB_SetConf failed!\n"); return CVI_FAILURE; } s32Ret = CVI_VB_Init(); if (s32Ret != CVI_SUCCESS) { SAMPLE_PRT("CVI_VB_Init failed!\n"); return CVI_FAILURE; } s32Ret = CVI_SYS_Init(); if (s32Ret != CVI_SUCCESS) { SAMPLE_PRT("CVI_SYS_Init failed!\n"); CVI_VB_Exit(); return CVI_FAILURE; }- 【相关主题】
3.3.4. CVI_SYS_Exit¶
- 【描述】
去初始化系统。 包括视频输入输出、视频编解码、视频叠加区域、视频处理、音频输入输出等模块都会被销毁或禁用 。
- 【语法】
CVI_S32 CVI_SYS_Exit(CVI_VOID);- 【参数】
无。
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
去初始化时,如果有阻塞在MMF上的用户进程,则去初始化会失败。如果所有阻塞在MMF上的调用都返回,则可以成功去初始化。
- 【举例】
请参考 CVI_SYS_Init 的举例
- 【相关主题】
3.3.5. CVI_SYS_Bind¶
- 【描述】
数据源到数据接收者绑定接口。
- 【语法】
CVI_S32 CVI_SYS_Bind(const MMF_CHN_S *pstSrcChn, const MMF_CHN_S *pstDestChn);- 【参数】
参数名称
描述
输入/输出
pstSrcChn
源通道指针
输入
pstDestChn
目的通道指针
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
系统目前支持的绑定关系,请参见 表。
同一个数据接收者只能绑定一个数据源。
绑定是指数据源和数据接收者建立关联关系。绑定后,数据源生成的数据将自动发送给接收者。
VI和VDEC作为数据源,是以通道为发送者,向其他模块发送数据,用户将设备号置为0,SDK不检查输入的设备号。
VPSS作为数据接收者时,是以设备(GROUP)为接收者,接收其他模块发来的数据,用户将通道号置为0
其他情况均需指定设备号和通道号。
- 【举例】
无。
- 【相关主题】
3.3.6. CVI_SYS_UnBind¶
- 【描述】
数据源到数据接收者解绑定接口。
- 【语法】
CVI_S32 CVI_SYS_UnBind(const MMF_CHN_S *pstSrcChn, const MMF_CHN_S *pstDestChn);- 【参数】
参数名称
描述
输入/输出
pstSrcChn
源通道指针
输入
pstDestChn
目的通道指针
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
pstDestChn如果找不到绑定的源通道,则直接返回成功 。 如果找到了绑定的源通道但是绑定的源通道和 pstSrcChn不匹配,则返回失败
- 【举例】
无。
- 【相关主题】
3.3.7. CVI_SYS_GetBindbyDest¶
- 【描述】
根据数据接收者获取绑定的数据源。
- 【语法】
CVI_S32 CVI_SYS_GetBindbyDest(const MMF_CHN_S *pstDestChn, MMF_CHN_S *pstSrcChn);- 【参数】
参数名称
描述
输入/输出
pstDestChn
目的通道指针
输入
pstSrcChn
源通道指针
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.8. CVI_SYS_GetBindbySrc¶
- 【描述】
根据数据源获取绑定的数据接收者。
- 【语法】
CVI_S32 CVI_SYS_GetBindbySrc(const MMF_CHN_S *pstSrcChn, MMF_BIND_DEST_S * pstBindDest);- 【参数】
参数名称
描述
输入/输出
pstSrcChn
源通道指针
输入
pstBindDest
绑定的目的通道指针
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.9. CVI_SYS_GetVersion¶
- 【描述】
获取当前MMF软件的版本号。
- 【语法】
CVI_S32 CVI_SYS_Get Version(MMF_VERSION_S *pstVersion);- 【参数】
参数名称
描述
输入/输出
pstVersion
MMF软件的版本号
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
无。
3.3.10. CVI_SYS_GetChipId¶
- 【描述】
获取当前处理器的 ID。
- 【语法】
CVI_S32 CVI_SYS_GetChipId(CVI_U32 *pu32ChipId);- 【参数】
参数名称
描述
输入/输出
pu32ChipId
处理器的 ID指针
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
CVI_U32 u32ChipId; CVI_SYS_GetChipId(&u32ChipId); if (u32ChipId == CVI181x) ...- 【相关主题】
无。
3.3.11. CVI_SYS_Mmap¶
- 【描述】
内存映射接口。
- 【语法】
void *CVI_SYS_Mmap(CVI_U64 u64PhyAddr, CVI_U32 u32Size);- 【参数】
参数名称
描述
输入/输出
u64PhyAddr
需映像的内存单元起始地址
输入
u32Size
映射的字节数
输入
- 【返回值】
返回值
描述
非0
成功
0
失败
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
输入的地址需为合法的物理地址。
u32Size不能为0
- 【举例】
无。
- 【相关主题】
3.3.12. CVI_SYS_MmapCache¶
- 【描述】
内存映射接口。
- 【语法】
void *CVI_SYS_MmapCache(CVI_U64 u64PhyAddr, CVI_U32 u32Size);- 【参数】
参数名称
描述
输入/输出
u64PhyAddr
需映像的内存单元起始地址
输入
u32Size
映射的字节数
输入
- 【返回值】
返回值
描述
非0
成功
0
失败
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
输入的地址需为合法的物理地址。
u32Size不能为0
透过此API所取得的虚拟地址,若有跟HW DMA共享。在处理器存取前,需调用invalidate;而在处理器修改后,若要让HW DMA读取,则需做invalidate。
此API仅可用于映射已分配的Cached内存地址。例如,若某vb pool的VB_POOL_CONFIG_S中enRemapMode属性为VB_REMAP_MODE_NONE,则即使透过本API取得 虚拟地址,在读写改内存块时,也无法获得Cached内存带来的性能提升。
- 【举例】
无。
- 【相关主题】
3.3.13. CVI_SYS_Munmap¶
- 【描述】
内存反映射接口。
- 【语法】
CVI_S32 CVI_SYS_ Munmap(CVI_VOID *pVirAddr, CVI_U32 u32Size);- 【参数】
参数名称
描述
输入/输出
pVirAddr
mmap后返回的地址
输入
u32Size
映射的字节数
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.14. CVI_SYS_IonAlloc¶
- 【描述】
用户分配ION内存。
- 【语法】
CVI_S32 CVI_SYS_IonAlloc(CVI_U64 *pu64PhyAddr, CVI_VOID **ppVirAddr, CVI_U32 u32Len);- 【参数】
参数名称
描述
输入/输出
pu64PhyAddr
物理地址指针
输出
ppVirAddr
虚拟地址指针的指针。若为NULL,则不会做映射
输出
u32Len
大小
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
透过此API所分配的内存,需通过CVI_SYS_Mmap获取其虚拟地址。
- 【举例】
无。
- 【相关主题】
3.3.15. CVI_SYS_IonAlloc_Cached¶
- 【描述】
用户分配ION内存,该内存将支持 cache。
- 【语法】
CVI_S32 CVI_SYS_IonAlloc_Cached(CVI_U64 *pu64PhyAddr, CVI_VOID **ppVirAddr, CVI_U32 u32Len);- 【参数】
参数名称
描述
输入/输出
pu64PhyAddr
物理地址指针。
输出
ppVirAddr
虚拟地址指针的指针。若为NULL,则不会做映射。
输出
u32Len
大小。
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
透过此API所取得的虚拟地址,若有跟HW DMA共享。在处理器存取前,需调用invalidate;而在处理器修改后,若要让HW DMA读取,则需做invalidate。
透过此API所分配的内存,需通过CVI_SYS_MmapCache获取其虚拟地址。
- 【举例】
无。
- 【相关主题】
3.3.16. CVI_SYS_IonFlushCache¶
- 【描述】
刷新cache 的内容到内存,并且使 cache 里的内容无效。
- 【语法】
CVI_S32 CVI_SYS_IonFlushCache(CVI_U64 u64PhyAddr, CVI_VOID *pVirAddr, CVI_U32 u32Len);- 【参数】
参数名称
描述
输入/输出
pu64PhyAddr
物理地址指针。
输入
pVirAddr
虚拟地址指针。
输入
u32Len
大小。
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
此接口应与 CVI_SYS_IonAlloc_Cached 接口搭配使用。
- 【举例】
无。
- 【相关主题】
3.3.17. CVI_SYS_IonInvalidateCache¶
- 【描述】
使 cache 里的内容无效。
- 【语法】
CVI_S32 CVI_SYS_IonInvalidateCache(CVI_U64 u64PhyAddr, CVI_VOID *pVirAddr, CVI_U32 u32Len);- 【参数】
参数名称
描述
输入/输出
pu64PhyAddr
物理地址指针。
输入
pVirAddr
虚拟地址指针。
输入
u32Len
大小。
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
此接口应与 CVI_SYS_IonAlloc_Cached 接口搭配使用。
- 【举例】
无。
- 【相关主题】
3.3.18. CVI_SYS_IonFree¶
- 【描述】
用户释放ION内存。
- 【语法】
CVI_S32 CVI_SYS_IonFree(CVI_U64 u64PhyAddr, CVI_VOID *pVirAddr);- 【参数】
参数名称
描述
输入/输出
u64PhyAddr
物理地址指针。
输入
pVirAddr
虚拟地址指针。
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.19. CVI_SYS_SetVIVPSSMode¶
- 【描述】
设置VI & VPSS工作模式。
- 【语法】
CVI_S32 CVI_SYS_SetVIVPSSMode(const VI_VPSS_MODE_S *pstVIVPSSMode);- 【参数】
参数名称
描述
输入/输出
pstVIVPSSMode
VI,VPSS的工作模式
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
必须在 CVI_SYS_Init 后,所有的VI PIPE和所有的VPSS组创建前设置。
- 【举例】
无。
- 【相关主题】
3.3.20. CVI_SYS_GetVIVPSSMode¶
- 【描述】
获取VI & VPSS的工作模式。
- 【语法】
CVI_S32 CVI_SYS_GetVIVPSSMode(VI_VPSS_MODE_S *pstVIVPSSMode);- 【参数】
参数名称
描述
输入/输出
pstVIVPSSMode
VI,VPSS的工作模式
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.21. CVI_SYS_SetVPSSMode¶
- 【描述】
设置VPSS工作模式。
- 【语法】
CVI_S32 CVI_SYS_SetVPSSMode(VPSS_MODE_E enVPSSMode);- 【参数】
参数名称
描述
输入/输出
enVPSSMode
VPSS的工作模式
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
必须在CVI_SYS_Init后,所有的VPSS组创建前设置。
默认值为VPSS_MODE_SINGLE。
- 【举例】
无。
- 【相关主题】
3.3.22. CVI_SYS_GetVPSSMode¶
- 【描述】
获取VPSS的工作模式。
- 【语法】
VPSS_MODE_E CVI_SYS_GetVPSSMode(CVI_VOID);- 【参数】
无。
- 【返回值】
返回值
描述
VPSS_MODE_E
当下VPSS的工作模式。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.23. CVI_SYS_GetModName¶
- 【描述】
获取对应MOD_ID的字符串句柄。
- 【语法】
const CVI_CHAR *CVI_SYS_GetModName(MOD_ID_E id);- 【参数】
参数名称
描述
输入/输出
id
MOD_ID_E
输入
- 【返回值】
返回值
描述
const CVI_CHAR *
MOD_ID的字符串句柄
NULL
失败
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
无。
3.3.24. CVI_VB_SetConfig¶
- 【描述】
设置MMF视频区块池属性 。
- 【语法】
CVI_S32 CVI_VB_SetConfig(const VB_CONFIG_S *pstVbConfig);- 【参数】
参数名称
描述
输入/输出
pstVbConfig
视频区块池属性指针
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
只能在系统处于未初始化的状态下,才可以设置区块池属性,否则会返回失败。
video buffer 根据不同的应用场景需要不同的配置。 配置规则参见 视频内存区块池 。
公共区块池中每个区块的大小应根据当前图像像素格式以及图像是否压缩而有所不同。具体分配大小请参考 VB_CONFIG_S 结构体中的描述。
- 【举例】
请参考 CVI_SYS_Init 的举例
- 【相关主题】
3.3.25. CVI_VB_GetConfig¶
- 【描述】
获取MMF视频区块池属性。
- 【语法】
CVI_S32 CVI_VB_GetConfig(VB_CONFIG_S *pstVbConfig);- 【参数】
参数名称
描述
输入/输出
pstVbConfig
视频区块池属性指针
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
必须先调用 CVI_VB_SetConfig 设置MMF视频区块池属性。
- 【举例】
无。
- 【相关主题】
3.3.26. CVI_VB_Init¶
- 【描述】
初始化MMF视频区块池。
- 【语法】
CVI_S32 CVI_VB_Init(CVI_VOID);- 【参数】
无。
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
必须先调用CVI_VB_SetConfig配置区块池属性,再初始化,否则初始化会失败。
如果多次初始化,仍会返回成功,但实际上系统不会对MMF的运行状态有任何影响。
- 【举例】
请参考 CVI_SYS_Init 的举例
- 【相关主题】
3.3.27. CVI_VB_Exit¶
- 【描述】
去初始化MMF视频区块池。
- 【语法】
CVI_S32 CVI_VB_Exit(CVI_VOID);- 【参数】
无。
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
必须先调用 CVI_SYS_Exit 去初始化 MMF系统,再去初始化区块池,否则返回失败。
可以反复去初始化,不返回失败
- 【举例】
请参考 CVI_SYS_Init 的举例
- 【相关主题】
3.3.28. CVI_VB_GetBlock¶
- 【描述】
获取一个视频区块。
- 【语法】
VB_BLK CVI_VB_GetBlock(VB_POOL Pool, CVI_U32 u32BlkSize);- 【参数】
参数名称
描述
输入/输出
Pool
区块池ID号。取值范围:[0, VB_MAX_POOLS)。
输入
u32BlkSize
区块大小。取值范围:数据类型全范围,以byte为单位。
输入
- 【返回值】
返回值
描述
非VB_INVALID_HANDLE
有效的区块句柄。
VB_INVALID_HANDLE
获取失败。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
用户在创建区块池之后,可以调用本接口从该区块池中来获取区块;第 2 个参数 u32BlkSize 须小于或等于创建该区块池时指定的区块大小。
第 1个参数 Pool 设置为无效 ID 号 VB_INVALID_POOLID 时,会从公共区块池中获取一块最符合指定大小的区块;反之,则会从指定的Pool去获取一块指定大小的区块。如果指定的大小无法符合,那么将获取不到区块 。
公共区块池主要用来存放 VPU(VI/VPSS/VO/GDC)的捕获图像。因为是多个模块共享的,因此,当对公共区块池的不当操作(如占用过多的区块) 会影响整个MMF 系统的正常运行。
- 【举例】
无。
- 【相关主题】
3.3.29. CVI_VB_ReleaseBlock¶
- 【描述】
释放一个已经获取的视频区块。
- 【语法】
CVI_S32 CVI_VB_ReleaseBlock(VB_BLK Block);- 【参数】
参数名称
描述
输入/输出
Block
区块句柄
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
获取的区块使用后,应该调用此接口释放区块。
- 【举例】
无。
- 【相关主题】
3.3.30. CVI_VB_CreatePool¶
- 【描述】
获取一个视频区块。
- 【语法】
VB_POOL CVI_VB_CreatePool(VB_POOL_CONFIG_S *pstVbPoolCfg);- 【参数】
参数名称
描述
输入/输出
pstVbPoolCfg
区块池配置属性参数指针。
输入
- 【返回值】
返回值
描述
非VB_INVALID_HANDLE
有效的区块池ID 号。
VB_INVALID_HANDLE
创建区块池失败,可能是参数非法或者保留内存不够。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.31. CVI_VB_DestroyPool¶
- 【描述】
释放一个已经获取的视频区块。
- 【语法】
CVI_S32 CVI_VB_DestroyPool(VB_POOL Pool);- 【参数】
参数名称
描述
输入/输出
Pool
区块池ID号。 取值范围:[0, VB_MAX_POOLS)。
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
销毁一个不存在的区块池,则返回CVI_ERR_VB_ILLEGAL_PARAM。
在去初始化MMF 区块池时,所有的区块池都将被销毁,包括用户态的区块池。
退出VB 池之前请确保VB 池里的任何VB 都没有被占用,否则无法退出。
[0, VB_MAX_POOLS)范围内的区块池ID 号,包括公共区块池、模块公共区块池、模块私有区块池等的ID 号。请确保Pool为 CVI_VB_CreatePool 所创建的区块池的ID 号,否则会返回失败。
如果当前区块池有通过 CVI_VB_MmapPool 接口映像虚拟地址,则必须先通过 CVI_VB_MunmapPool 接口解除映射,然后才能销毁区块池。
- 【举例】
无。
- 【相关主题】
3.3.32. CVI_VB_PhysAddr2Handle¶
- 【描述】
由一个已经获取的区块物理地址获取句柄。
- 【语法】
VB_BLK CVI_VB_PhysAddr2Handle(CVI_U64 u64PhyAddr);- 【参数】
参数名称
描述
输入/输出
u64PhyAddr
区块物理地址
输入
- 【返回值】
返回值
描述
非VB_INVALID_HANDLE
有效的区块句柄。
VB_INVALID_HANDLE
获取失败。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
物理地址应该是从MMF视频区块池中获取的有效区块的地址。
- 【举例】
无。
- 【相关主题】
无。
3.3.33. CVI_VB_Handle2PhysAddr¶
- 【描述】
由一个已经获取的区块句柄获取物理地址。
- 【语法】
CVI_U64 CVI_VB_Handle2PhysAddr(VB_BLK Block);- 【参数】
参数名称
描述
输入/输出
Block
区块句柄
输入
- 【返回值】
返回值
描述
非0
有效的物理地址。
0
无效返回值,区块句柄非法。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
区块应该是从MMF视频区块池中获取的有效区块。
- 【举例】
无。
- 【相关主题】
无。
3.3.34. CVI_VB_Handle2PoolId¶
- 【描述】
由一个已经获取的区块句柄获取视频区块池ID。
- 【语法】
VB_POOL CVI_VB_Handle2PoolId(VB_BLK Block);- 【参数】
参数名称
描述
输入/输出
Block
区块句柄
输入
- 【返回值】
返回值
描述
非VB_INVALID_POOLID
有效的视频区块池ID。
VB_INVALID_POOLID
无效返回值,区块句柄非法。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
区块应该是从MMF视频区块池中获取的有效区块。
- 【举例】
无。
- 【相关主题】
无。
3.3.35. CVI_VB_InquireUserCnt¶
- 【描述】
由一个已经获取的区块句柄获取存块使用计数。
- 【语法】
CVI_S32 CVI_VB_InquireUserCnt(VB_BLK Block, CVI_U32 *pCnt);- 【参数】
参数名称
描述
输入/输出
Block
区块句柄
输入
pCnt
区块使用计数
输出
- 【返回值】
返回值
描述
非负数
使用计数。
负数
无效返回值,区块句柄非法。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
无。
3.3.36. CVI_VB_MmapPool¶
- 【描述】
为一个视频区块池映射用户态虚拟地址。
- 【语法】
CVI_S32 CVI_VB_MmapPool(VB_POOL Pool);- 【参数】
参数名称
描述
输入/输出
Pool
缓存池ID 号。取值范围:[0, VB_MAX_POOLS)。
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
必须输入合法的视频区块池ID。
重复映射视为成功。
- 【举例】
无。
- 【相关主题】
无。
3.3.37. CVI_VB_MunmapPool¶
- 【描述】
为一个视频区块池解除用户态映射。
- 【语法】
CVI_S32 CVI_VB_MunmapPool(VB_POOL Pool);- 【参数】
参数名称
描述
输入/输出
Pool
区块池ID 号。取值范围:[0, VB_MAX_POOLS)。
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
必须输入合法的视频区块池ID。
视频区块池必须已经映像过,如果未映像,则直接返回CVI_ERR_VB_NOTREADY。
必须先释放虚拟地址,然后再销毁区块池。
- 【举例】
无。
- 【相关主题】
无。
3.3.38. CVI_VB_GetBlockVirAddr¶
- 【描述】
获取一个视频区块池中的区块的用户态虚拟地址。
- 【语法】
CVI_S32 CVI_VB_GetBlockVirAddr(VB_POOL Pool, VB_BLK Block, void **ppVirAddr);- 【参数】
参数名称
描述
输入/输出
Pool
区块池ID 号。取值范围:[0, VB_MAX_POOLS)。
输入
Block
区块句柄
输入
ppVirAddr
用户态虚拟地址。
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_vb.h, cvi_comm_vb.h
库文件:libsys.a
- 【注意】
必须输入合法的视频区块池ID、合法的区块句柄。
视频区块池必须已经映像过,如果未映像,则直接返回CVI_ERR_VB_NOTREADY。
如果物理地址不在当前VB 池范围内,则返回CVI_ERR_VB_ILLEGAL_PARAM。
- 【举例】
无。
- 【相关主题】
无。
3.3.39. CVI_LOG_SetLevelConf¶
- 【描述】
设置日志等级。
- 【语法】
CVI_S32 CVI_LOG_SetLevelConf(LOG_LEVEL_CONF_S *pstConf);- 【参数】
参数名称
描述
输入/输出
pstConf
日志等级信息结构体
输入
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h, cvi_debug.h
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】
3.3.40. CVI_LOG_GetLevelConf¶
- 【描述】
获取日志等级。
- 【语法】
CVI_S32 CVI_LOG_GetLevelConf(LOG_LEVEL_CONF_S *pstConf);- 【参数】
参数名称
描述
输入/输出
pstConf->enModId
需要获取日志等级的模块ID
输入
pstConf->s32Level
获取到日志等级
输出
- 【返回值】
返回值
描述
0
成功
非0
失败,其值参见 错误码 。
- 【需求】
头文件:cvi_sys.h, cvi_comm_sys.h, cvi_debug
库文件:libsys.a
- 【注意】
无。
- 【举例】
无。
- 【相关主题】