8.3. 系统控制
8.3.1. 概述
系统控制用来初始化和去初始化整个媒体系统,通过绑定接口建立各模块间的关系。提供大块物理内存分配管理的VP(Video Pool)模块。
8.3.2. 功能描述
8.3.2.1. 视频缓冲池
VP(Video Pool)视频缓冲池提供大块物理内存及管理功能,负责内存的分配和回收。 视频缓冲池由一组物理地址连续,大小相同的缓冲块组成,在使用前需要配置及初始化,可根据使用需要,配置不同数量的缓冲池和调整缓冲块的大小。
8.3.2.2. 绑定关系

注:通过HB_SYS_Bind接口可以在模块间建立绑定关系,绑定后数据源处理完成的数据会自动发送给数据端。
8.3.2.3. 工作模式
在线模式: 模块间的数据通过内部总线直接从上一模块传输给下一模块,不需要读写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间的工作模式。
8.3.3. 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拷贝物理内存。
8.3.3.1. HB_SYS_Init
【函数声明】
int HB_SYS_Init(void);
【功能描述】
预留接口,目前无作用。
【参数描述】
无
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.2. HB_SYS_Exit
【函数声明】
int HB_SYS_Exit(void);
【功能描述】
预留接口,目前无作用。
【参数描述】
无
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.3. 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 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.4. 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 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.5. 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 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.6. HB_SYS_GetVINVPSMode
【函数声明】
int HB_SYS_GetVINVPSMode(int pipeId);
【功能描述】
获取指定pipeid的VIN,VPS模块间工作模式。
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| pipeId | Pipe号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| >=0 | SYS_VIN_VPS_MODE_E |
| <0 | 失败 |
【注意事项】
无
【参考代码】
无
视频缓存池
8.3.3.7. HB_VP_SetConfig
【函数声明】
int HB_VP_SetConfig(VP_CONFIG_S *VpConfig);
【功能描述】
设置Video Pool视频缓冲池属性
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| vpConfig | 视频缓冲池属性指针 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.8. HB_VP_GetConfig
【函数声明】
int HB_VP_GetConfig (VP_CONFIG_S *VpConfig);
【功能描述】
获取Video Pool视频缓冲池属性
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| vpConfig | 视频缓冲池属性指针 | 输出 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.9. HB_VP_Init
【函数声明】
int HB_VP_Init(void);
【功能描述】
初始化视频缓冲池
【参数描述】
无
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
必须先调用 HB_VP_SetConfig 配置缓存池属性,再初始化缓存池,否则会失败。
【参考代码】
VideoPool参考代码
8.3.3.10. HB_VP_Exit
【函数声明】
int HB_VP_Exit(void);
【功能描述】
去初始化视频缓冲池
【参数描述】
无
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.11. HB_VP_CreatePool
【函数声明】
uint32_t HB_VP_CreatePool(VP_POOL_CONFIG_S *VpPoolCfg);
【功能描述】
创建一个视频缓冲池
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| VpPoolCfg | 缓冲池配置属性参数指针 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 非VP_INVALID_POOLID | 有效的缓冲池ID号 |
| VP_INVALID_POOLID | 创建缓冲池失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.12. HB_VP_DestroyPool
【函数声明】
int HB_VP_DestroyPool(uint32_t Pool);
【功能描述】
销毁一个视频缓冲池
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Pool | 缓冲池的id号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.13. 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参考代码
8.3.3.14. HB_VP_ReleaseBlock
【函数声明】
int HB_VP_ReleaseBlock(uint32_t Block);
【功能描述】
释放一个已经获取的缓冲块
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Block | 缓冲块id | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.15. HB_VP_PhysAddr2Block
【函数声明】
uint32_t HB_VP_PhysAddr2Block(uint64_t u64PhyAddr);
【功能描述】
通过缓冲块物理地址获取缓冲块id
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| u64PhyAddr | 缓冲块物理地址 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.16. HB_VP_Block2PhysAddr
【函数声明】
uint64_t HB_VP_Block2PhysAddr(uint32_t Block);
【功能描述】
获取一个缓冲块的物理地址
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Block | 缓冲块id | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 无效返回值 |
| 非0 | 有效物理地址 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.17. HB_VP_Block2PoolId
【函数声明】
uint32_t HB_VP_Block2PoolId(uint32_t Block);
【功能描述】
通过缓冲块id获取缓冲池id
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Block | 缓冲块id | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 非负数 | 有效的缓冲池id |
| 负数 | 无效的缓冲池id |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.18. HB_VP_MmapPool
【函数声明】
int HB_VP_MmapPool(uint32_t Pool);
【功能描述】
为一个缓冲池映射用户态虚拟地址
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Pool | 缓冲池id号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.19. HB_VP_MunmapPool
【函数声明】
int HB_VP_MunmapPool(uint32_t Pool);
【功能描述】
为一个缓冲池去除用户态映射
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Pool | 缓冲池id号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.20. HB_VP_GetBlockVirAddr
【函数声明】
int HB_VP_GetBlockVirAddr(uint32_t Pool, uint64_t u64PhyAddr, void **ppVirAddr);
【功能描述】
获取一个视频缓存池中的缓存块的用户态虚拟地址
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Pool | 缓冲池id号 | 输入 |
| u64PhyAddr | 缓冲池物理地址 | 输入 |
| ppVirAddr | 缓冲池虚拟地址 | 输出 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
VideoPool参考代码
8.3.3.21. HB_VP_InquireUserCnt
【函数声明】
int HB_VP_InquireUserCnt(uint32_t Block);
【功能描述】
查询缓冲块是否使用
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| Block | 缓冲块id | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| VP_INVALID_HANDLE | 查询失败 |
| 非VP_INVALID_HANDLE | 引用计数 |
【注意事项】
无
【参考代码】
无
8.3.3.22. HB_VP_SetAuxiliaryConfig
【函数声明】
int HB_VP_SetAuxiliaryConfig (const VP_AUXILIARY_CONFIG_S *pstAuxiliaryConfig);
【功能描述】
设置视频缓冲池的附加信息
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| pstAuxiliaryConfig | 视频缓冲池附加信息配置结构体 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.23. HB_SYS_Alloc
【函数声明】
int HB_SYS_Alloc(uint64_t *pu64PhyAddr, void **ppVirAddr, uint32_t u32Len);
【功能描述】
在用户态分配内存
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| pu64PhyAddr | 物理地址指针 | 输出 |
| ppVirAddr | 指向虚拟地址的指针 | 输出 |
| u32Len | 申请内存的大小 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
需要调用HB_VP_Init初始化视频缓冲池
【参考代码】
ret = HB_SYS_Alloc(&paddr, &vaddr, 0x1000);
if (ret == 0) {
printf("Alloc paddr = 0x%x, vaddr = 0x%x\n", paddr, vaddr);
}
ret = HB_SYS_Free(paddr, vaddr);
if (ret == 0) {
printf("Free ok\n");
}
8.3.3.24. HB_SYS_AllocCached
【函数声明】
int HB_SYS_AllocCached(uint64_t *pu64PhyAddr, void **ppVirAddr, uint32_t u32Len);
【功能描述】
在用户态分配带cache内存
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| pu64PhyAddr | 物理地址指针 | 输出 |
| ppVirAddr | 指向虚拟地址的指针 | 输出 |
| u32Len | 申请内存的大小 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
需要调用HB_VP_Init初始化视频缓冲池
【参考代码】
无
8.3.3.25. HB_SYS_Free
【函数声明】
int HB_SYS_Free(uint64_t u64PhyAddr, void *pVirAddr);
【功能描述】
释放内存块
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| u64PhyAddr | 物理地址 | 输入 |
| pVirAddr | 虚拟地址指针 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
参考HB_SYS_Alloc
8.3.3.26. HB_SYS_CacheInvalidate
【函数声明】
int HB_SYS_CacheInvalidate(uint64_t pu64PhyAddr, void *pVirAddr, uint32_t u32Len);
【功能描述】
设置该带cache的内存cache无效。
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| pu64PhyAddr | 物理地址 | 输入 |
| pVirAddr | 虚拟地址指针 | 输入 |
| u32Len | 长度 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.27. HB_SYS_CacheFlush
【函数声明】
int HB_SYS_CacheFlush(uint64_t pu64PhyAddr, void *pVirAddr, uint32_t u32Len);
【功能描述】
刷新该带cache的内存cache。
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| p | u64PhyAddr | 物理地址 |
| pVirAddr | 虚拟地址指针 | 输入 |
| u32Len | 长度 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
无
【参考代码】
无
8.3.3.28. HB_VP_DmaCopy
【函数声明】
int HB_VP_DmaCopy(void *dstPaddr, void *srcPaddr, uint32_t len);
【功能描述】
通过DMA拷贝物理内存。
【参数描述】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| dstPaddr | 目的物理地址 | 输入 |
| srcPaddr | 源物理地址 | 输入 |
| len | 长度 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败 |
【注意事项】
dstPaddr、srcPaddr需要是连续的物理地址
【参考代码】
无
8.3.4. 数据类型
8.3.4.1. HB_SYS_MOD_ID_E
【结构定义】
typedef enum HB_SYS_MOD_ID_E {
HB_ID_SYS = 0,
HB_ID_VIN,
HB_ID_VOT,
HB_ID_VPS,
HB_ID_RGN,
HB_ID_AIN,
HB_ID_AOT,
HB_ID_VENC,
HB_ID_VDEC,
HB_ID_AENC,
HB_ID_ADEC,
HB_ID_MAX,
} SYS_MOD_ID_E;
【功能描述】
模块的ID号。
【成员说明】
无。
8.3.4.2. HB_SYS_MOD_S
【结构定义】
typedef struct HB_SYS_MOD_S {
SYS_MOD_ID_E enModId;
uint8_t s32DevId;
uint8_t s32ChnId;
} SYS_MOD_S;
【功能描述】
该结构体是各模块索引的一种抽象。
【成员说明】
| 成员 | 含义 |
|---|---|
| enModId | 模块ID号 |
| s32DevId | 多路时各模块pipeline的抽象,如在VIN中表示第几个pipe,在VPS中表示第几个group |
| s32ChnId | 通道索引号 |
8.3.4.3. HB_SYS_VIN_VPS_MODE_E
【结构定义】
typedef enum HB_SYS_VIN_VPS_MODE_E {
VIN_ONLINE_VPS_ONLINE,
VIN_ONLINE_VPS_OFFLINE,
VIN_OFFLINE_VPS_ONLINE,
VIN_OFFLINE_VPS_OFFINE,
VIN_SIF_VPS_ONLINE,
VIN_SIF_OFFLINE_ISP_OFFLINE_VPS_ONLINE,
VIN_SIF_ONLINE_DDR_ISP_DDR_VPS_ONLINE,
VIN_SIF_ONLINE_DDR_ISP_ONLINE_VPS_ONLINE,
VIN_FEEDBACK_ISP_ONLINE_VPS_ONLINE,
VIN_SIF_OFFLINE_VPS_OFFLINE,
VIN_SIF_OFFLINE,
} SYS_VIN_VPS_MODE_E;
【功能描述】
表示VIN和VPS的在线与离线模式和VIN内部的工作模式。
【成员说明】
| 成员 | 含义 |
|---|---|
| VIN_ONLINE_VPS_ONLINE | VIN_SIF和VIN_ISP在线,VIN_ISP和VPS在线 |
| VIN_ONLINE_VPS_OFFLINE | VIN_SIF和VIN_ISP在线,VIN_ISP和VPS离线 |
| VIN_OFFLINE_VPS_ONLINE | VIN_SIF和VIN_ISP离线,VIN_ISP和VPS在线 |
| VIN_OFFLINE_VPS_OFFINE | VIN_SIF和VIN_ISP离线,VIN_ISP和VPS离线 |
| VIN_SIF_VPS_ONLINE | VIN_SIF直接在线发送数据到VPS |
| VIN_SIF_OFFLINE_ISP_OFFLINE _VPS_ONLINE | VIN_SIF和VIN_ISP离线,VIN_ISP和VPS在线,同时VIN_ISP到DDR,一般用来dump VIN_ISP的图 |
| VIN_SIF_ONLINE_DDR_ISP_DDR _VPS_ONLINE | VIN_SIF和VIN_ISP在线,同时VIN_SIF到DDR,VIN_ISP和VPS离线 |
| VIN_SIF_ONLINE_DDR_ISP_ONL INE_VPS_ONLINE | VIN_SIF和VIN_ISP在线,VIN_ISP和VPS在线,同时VIN_SIF到DDR,一般用来dump VIN_SIF出来的图 |
| VIN_FEEDBACK_ISP_ONLINE _VPS_ONLINE | VIN_SIF回灌raw模式 |
| VIN_SIF_OFFLINE_VPS_OFFLINE | VIN_SIF和VPS离线,一般是YUV到IPU |
| VIN_SIF_OFFLINE | VIN_SIF直接到DDR |
8.3.4.4. HB_VP_POOL_CONFIG_S
【结构定义】
typedef struct HB_VP_POOL_CONFIG_S {
uint64_t u64BlkSize;
uint32_t u32BlkCnt;
uint32_t cacheEnable;
} VP_POOL_CONFIG_S;
【功能描述】
视频缓冲池配置结构体
【成员说明】
| 成员 | 含义 |
|---|---|
| u64BlkSize | 缓冲块大小 |
| u32BlkCnt | 每个缓冲池的缓冲块个数 |
| cacheEnable | 缓冲池是否使能cache |
8.3.4.5. HB_VP_CONFIG_S
【结构定义】
struct HB_VP_CONFIG_S {
uint32_t u32MaxPoolCnt;
VP_POOL_CONFIG_S pubPool[VP_MAX_PUB_POOLS];
} VP_CONFIG_S;
【功能描述】
视频缓冲池属性结构体
【成员说明】
| 成员 | 含义 |
|---|---|
| u32MaxPoolCnt | 整个系统中可以容纳缓冲池的个数 |
| pubPool | 公共缓冲池属性结构体 |
8.3.4.6. HB_VP_AUXILIARY_CONFIG_S
【结构定义】
typedef struct HB_VP_AUXILIARY_CONFIG_S {
int u32AuxiliaryConfig;
} VP_AUXILIARY_CONFIG_S;
【功能描述】
视频缓冲池附加信息的配置结构体
【成员说明】
| 成员 | 含义 |
|---|---|
| AuxiliaryConfig | 附加信息类型 |
8.3.4.7. hb_vio_buffer_t
【结构定义】
typedef struct hb_vio_buffer_s {
image_info_t img_info;
address_info_t img_addr;
} hb_vio_buffer_t;
【功能描述】
普通buf信息结构体,一个结构体表示一帧图像
【成员说明】
| 成员 | 含义 |
|---|---|
| img_info | 图像数据信息 |
| img_addr | 图像地址信息 |
8.3.4.8. pym_buffer_t
【结构定义】
typedef struct pym_buffer_s {
image_info_t pym_img_info;
address_info_t pym[6];
address_info_t pym_roi[6][3];
address_info_t us[6];
char *addr_whole[HB_VIO_BUFFER_MAX_PLANES];
uint64_t paddr_whole[HB_VIO_BUFFER_MAX_PLANES];
uint32_t layer_size[30][HB_VIO_BUFFER_MAX_PLANES];
} pym_buffer_t;
【功能描述】
金字塔buf结构体
【成员说明】
| 成员 | 含义 |
|---|---|
| pym_img _info | 金字塔数据信息 |
| pym | 金字塔基础层数据地址,对应s0 s4 s8 s16 s20 s24 |
| pym_roi | 金字塔基础层关联的roi层数据地址信息pym_roi[0][0]对应s0下的s1 pym_roi[0][1]对应s0下的s2, pym_roi[0][2]对应s0下的s3 |
| us | 金字塔6个us通道输出数据地址信息 |
| addr_whole | 金字塔整块buf虚拟地址首地址 |
| paddr_whole | 金字塔整块buf物理地址首地址 |
| layer_size | 每一层的数据大小 |
8.3.4.9. image_info_t
【结构定义】
typedef struct image_info_s {
uint16_t sensor_id;
uint32_t pipeline_id;
uint32_t frame_id;
uint64_t time_stamp;
struct timeval tv;
int buf_index;
int img_format;
int fd[HB_VIO_BUFFER_MAX_PLANES];
uint32_t size[HB_VIO_BUFFER_MAX_PLANES];
uint32_t planeCount;
uint32_t dynamic_flag;
uint32_t water_mark_line;
VIO_DATA_TYPE_E data_type;
buffer_state_e state;
} image_info_t;
【功能描述】
图像信息结构体
【成员说明】
| 成员 | 含义 |
|---|---|
| sensor_id | Sensor id |
| pipeline_id | 对应数据通道号 |
| frame_id | 数据帧号 |
| time_stamp | HW time stamp,sif内部硬件时间,每次FS的时候更新,和系统时间没关系,一般用来同步 |
| tv | system time of hal get buf,sif在framestart打的系统时间 |
| buf_index | 获取到的Buffer索引 |
| img_format | 图像格式 |
| fd | ion buf fd |
| size | 对应plane的size |
| planeCount | image 含有的plane 数目 |
| dynamic_flag | 动态改变size标记 |
| water_mark_line | 提前水位信息,XJ3不支持 |
| data_type | image的数据类型 |
| state | buf的状态,在用户层则是user状态 |
8.3.4.10. address_info_t
【结构定义】
typedef struct address_info_s {
uint16_t width;
uint16_t height;
uint16_t stride_size;
char *addr[HB_VIO_BUFFER_MAX_PLANES];
uint64_t paddr[HB_VIO_BUFFER_MAX_PLANES];
} address_info_t;
【功能描述】
图像地址信息结构体
【成员说明】
| 成员 | 含义 |
|---|---|
| width | 图像数据宽度 |
| height | 图像数据高度 |
| stride_size | 图像数据内存stride(实际内存存储的一行宽度) |
| addr | 虚拟地址,按照yuv plane数存放 |
| paddr | 物理地址,按照yuv plane数存放 |
8.3.5. 错误码
| 错误码 | 宏定义 | 描述 |
|---|---|---|
| -268500032 | VP_INVALID_BLOCKID | 无效缓冲块 |
| -268500033 | VP_INVALID_POOLID | 无效缓冲池 |
| -268500034 | HB_ERR_VP_NOT_PERM | 操作不允许 |
| -268500035 | HB_ERR_VP_UNEXIST | 视频缓冲池不存在 |
| -268500036 | HB_ERR_VP_BUSY | 缓冲池忙 |
| -268500037 | HB_ERR_SYS_BUSY | 系统忙 |
| -268500038 | HB_ERR_SYS_ILLEGAL_PARAM | 系统接口参数非法 |
| -268500039 | HB_ERR_SYS_NOMEM | 系统接口分配内存失败 |
| -268500040 | HB_ERR_VP_ILLEGAL_PARAM | 缓冲池接口参数设置无效 |