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 | 缓冲池接口参数设置无效 |