7.3.3 系统控制
概述
系统控制用来初始化和去初始化整个媒体系统,通过绑定接口建立各模块间的关系。提供大块物理内存分配管理的VP(Video Pool)模块。
功能描述
视频缓冲池
VP(Video Pool)视频缓冲池提供大块物理内存及管理功能,负责内存的分配和回收。 视频缓冲池由一组物理地址连续,大小相同的缓冲块组成,在使用前需要配置及初始化,可根据使用需要,配置不同数量的缓冲池和调整缓冲块的大小。
绑定关系
注:通过HB_SYS_Bind接口可以在模块间建立绑定关系,绑定后数据源处理完成的数据会自动发送给数据端。
工作模式
在线模式: 模块间的数据通过内部总线直接从上一模块传输给下一模块,不需要读写DDR,可以降低延时,节省DDR带宽
离线模式: 上一模块的数据先写入DDR,下一模块再从DDR中读取数据,多于一路sensor接入时,所有接入sensor都按离线处理。
模式 | VIN_SIF和VIN_ISP | VIN_ISP和VPS | VIN_SIF和VPS |
---|---|---|---|
在线 | SIF(RAW) --> ISP | ISP(YUV) --> VPS | SIF(YUV) --> VPS |
离线 | SIF(RAW) --> DDR --> ISP | ISP(YUV) --> DDR --> VPS | SIF(YUV) --> DDR --> ISP |
注:HB_SYS_SetVINVPSMode接口用来设定VIN和VPS间的工作模式。
API参考
- HB_SYS_Init : 初始化媒体系统(预留)。
- HB_SYS_Exit : 初始化媒体系统(预留)。
- HB_SYS_Bind : 数据源到数据接收者绑定。
- HB_SYS_UnBind : 数据源到数据接收者解绑定。
- HB_SYS_SetVINVPSMode : 设置VIN,VPS模块间的工作模式。
- HB_SYS_GetVINVPSMode : 获取指定pipeid的VIN,VPS模块间工作模式。
- HB_VP_SetConfig : 设置Video Pool视频缓冲池属性。
- HB_VP_GetConfig : 获取Video Pool视频缓冲池属性。
- HB_VP_Init : 初始化Video Pool视频缓冲池。
- HB_VP_Exit : 去初始化Video Pool视频缓冲池。
- HB_VP_CreatePool : 创建一个视频缓冲池。
- HB_VP_DestroyPool : 销毁一个视频缓存池。
- HB_VP_GetBlock : 获取一个缓存块。
- HB_VP_ReleaseBlock : 释放一个已经获取的缓存块。
- HB_VP_PhysAddr2Block : 通过缓冲块物理地址获取缓冲块id
- HB_VP_Block2PhysAddr : 获取一个缓冲块的物理地址
- HB_VP_Block2PoolId : 获取一个缓存块所在缓存池的 ID 。
- HB_VP_MmapPool : 为一个视频缓存池映射用户态虚拟地址。
- HB_VP_MunmapPool : 为一个视频缓存池解除用户态映射。
- HB_VP_GetBlockVirAddr : 获取一个视频缓存池中的缓存块的用户态虚拟地址。
- HB_VP_InquireUserCnt : 查询缓冲块是否使用。
- HB_VP_SetAuxiliaryConfig : 设置视频缓冲池的附加信息。
- HB_SYS_Alloc : 在用户态分配内存。
- HB_SYS_Free : 释放内存块。
- HB_SYS_AllocCached : 在用户态分配带cache内存。
- HB_SYS_CacheInvalidate : 设置该带cache的内存cache无效。
- HB_SYS_CacheFlush : 刷新该带cache的内存cache。
- HB_VP_DmaCopy : 通过DMA拷贝物理内存。
HB_SYS_Init
【函数声明】
int HB_SYS_Init(void);
【功能描述】
预留接口,目前无作用。
【参数描述】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_SYS_Exit
【函数声明】
int HB_SYS_Exit(void);
【功能描述】
预留接口,目前无作用。
【参数描述】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_SYS_Bind
【函数声明】
int HB_SYS_Bind(const SYS_MOD_S *pstSrcMod, const SYS_MOD_S *pstDstMod);
【功能描述】
在VIN管道,通道,VPS组/通道,VO通道,VENC通道之间建立绑定关系。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pstSrcMod | 源模块指针 | 输入 |
pstDstMod | 目的模块指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_SYS_UnBind
【函数声明】
int HB_SYS_UnBind(const SYS_MOD_S *pstSrcMod, const SYS_MOD_S *pstDstMod);
【功能描述】
在VIN管道,通道,VPS组/通道,VO通道,VENC通道之间解除绑定关系。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pstSrcMod | 源模块指针 | 输入 |
pstDstMod | 目的模块指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_SYS_SetVINVPSMode
【函数声明】
int HB_SYS_SetVINVPSMode(int pipeId, const SYS_VIN_VPS_MODE_E mode);
【功 能描述】
设置VIN,VPS模块间的工作模式。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipe号 | 输入 |
mode | VIN,VPS工作模式 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_SYS_GetVINVPSMode
【函数声明】
int HB_SYS_GetVINVPSMode(int pipeId);
【功能描述】
获取指定pipeid的VIN,VPS模块间工作模式。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipe号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
>= 0 | SYS_VIN_VPS_MODE_E |
< 0 | 失败 |
【注意事项】
无
【参考代码】
无
视频缓存池
HB_VP_SetConfig
【函数声明】
int HB_VP_SetConfig(VP_CONFIG_S *VpConfig);
【功能描述】
设置Video Pool视频缓冲池属性
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
vpConfig | 视频缓冲池属性指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
HB_VP_GetConfig
【函数声明】
int HB_VP_GetConfig (VP_CONFIG_S *VpConfig);
【功能描述】
获取Video Pool视频缓冲池属性
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
vpConfig | 视频缓冲池属性指针 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
无
HB_VP_Init
【函数声明】
int HB_VP_Init(void);
【功能描述】
初始化视频缓冲池
【参数描述】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
必须先调用 HB_VP_SetConfig 配置缓存池属性,再初始化缓存池,否则会失败。
【参考代码】
VideoPool参考代码
HB_VP_Exit
【函数声明】
int HB_VP_Exit(void);
【功能描述】
去初始化视频缓冲池
【参数描述】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
HB_VP_CreatePool
【函数声明】
uint32_t HB_VP_CreatePool(VP_POOL_CONFIG_S *VpPoolCfg);
【功能描述】
创建一个视频缓冲池
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VpPoolCfg | 缓冲池配置属性参数指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
非VP_INVALID_POOLID | 有效的缓冲池ID号 |
VP_INVALID_POOLID | 创建缓冲池失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
HB_VP_DestroyPool
【函数声明】
int HB_VP_DestroyPool(uint32_t Pool);
【功能描述】
销毁一个视频缓冲池
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
Pool | 缓冲池的id号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
HB_VP_GetBlock
【函数声明】
uint32_t HB_VP_GetBlock(uint32_t Pool, uint64_t u64BlkSize);
【功能描述】
获取一个缓冲块
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
Pool | 缓冲池id号 | 输入 |
u64BlkSize | 缓冲块大小 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
非VP_INVALID_HANDLE | 有效的缓冲块id |
VP_INVALID_HANDLE | 获取缓冲块失败 |
【注意事项】
u64BlkSize 须小于或等于创建该缓存池时指定的缓存块大小
【参考代码】
VideoPool参考代码
HB_VP_ReleaseBlock
【函数声明】
int HB_VP_ReleaseBlock(uint32_t Block);
【功能描述】
释放一个已经获取的缓冲块
【参数描述 】
参数名称 | 描述 | 输入/输出 |
---|---|---|
Block | 缓冲块id | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
HB_VP_PhysAddr2Block
【函数声明】
uint32_t HB_VP_PhysAddr2Block(uint64_t u64PhyAddr);
【功能描述】
通过缓冲块物理地址获取缓冲块id
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
u64PhyAddr | 缓冲块物理地址 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
HB_VP_Block2PhysAddr
【函数声明】
uint64_t HB_VP_Block2PhysAddr(uint32_t Block);
【功能描述】
获取一个缓冲块的物理地址
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
Block | 缓冲块id | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 无效返回值 |
非0 | 有效物理地址 |
【注意事项】