5.10.2. GDC API
5.10.2.1. 模块描述
GDC( Geometrical Distortion Correction )模块
基础规格
模式
硬件
最大
分辨率 : 4096x2160 最小
分辨率 : 100x100( 奇数 行 或者 列 不 支持 ) 性能 : 4096x2160@60fps
输入
格式 : YUV420 semi-planar 输出
格式 : YUV420 semi-planar
5.10.2.2. 参考示例
GDC 部分
示例 代码 可以 参考 sample_gdc 章节
5.10.2.3. API 参考
| API 接口 | 接口 |
|---|---|
| hbn_vnode_open | 打开 vnode |
| hbn_vnode_close | 关闭 vnode |
| hbn_vnode_set_attr | 设置 vnode 属性 |
| hbn_vnode_set_ochn_attr | 设置 GDC vnode 输出 |
| hbn_vnode_get_ochn_attr | 获取 GDC vnode 输出 |
| hbn_vnode_set_ichn_attr | 设置 GDC vnode 输入 |
| hbn_vnode_get_ichn_attr | 获取 GDC vnode 输入 |
| hbn_vnode_set_ochn_buf_attr | 设置 GDC vnode 输出 buffer 属性 |
| hbn_vnode_start | 启动 vnode |
| hbn_vnode_stop | 停止 vnode |
| hbn_vnode_getframe | 从 vnode 获取 |
| hbn_vnode_sendframe | 将 |
| hbn_vnode_releaseframe | 释放 |
5.10.2.4. 接口说明
hbn_vnode_open
【函数声明】
hobot_status hbn_vnode_open(hb_vnode_type vnode_type, uint32_t hw_id, int32_t ctx_id, hbn_vnode_handle_t *vnode_fd);
【功能描述】
初始化 vnode,打开 vnode 设备
【参数描述】
[IN] hb_vnode_type vnode_type : vnode 类型,对于 GDC,取值
为 HB_GDC [IN] uint32_t hw_id : 模块
的 硬件 id,对于 GDC,hw_id 取值 为0 [IN] int32_t ctx_id : 模块
的 context id,软件 上 的 概念,可 指定 context id 值,也 可 设置 为 AUTO_ALLOC_ID,由 HBN 框架 自动 分配 context id [OUT] hbn_vnode_handle_t *vnode_fd : 返回
模块 的 vnode handle
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_close
【函数声明】
void hbn_vnode_close(hbn_vnode_handle_t vnode_fd);
【功能描述】
关闭
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle;
【返回值】
无
【注意事项】
需要
【兼容性】
硬件: X5
hbn_vnode_set_attr
【函数声明】
hobot_status hbn_vnode_set_attr(hbn_vnode_handle_t vnode_fd, void *attr);
【功能描述】
设置
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] void *attr:模块
的 基本 属性 结构 体 指针,对于 GDC,其 属性 结构 体为 gdc_attr_t;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_set_ochn_attr
【函数声明】
hobot_status hbn_vnode_set_ochn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, void *attr);
【功能描述】
设置
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ochn_id:模块
的 输出 通道 id,对于 GDC,输出 通道 为0; [IN] void *attr:模块
的 输出 通道 属性 结构 体 指针。对于 GDC,输出 通道 属性 结构 体为 gdc_ochn_attr_t;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_get_ochn_attr
【函数声明】
hobot_status hbn_vnode_get_ochn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, void *attr);
【功能描述】
获取
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ochn_id:模块
的 输出 通道 id,对于 GDC,输出 通道 为0; [OUT] void *attr:模块
输出 通道 属性 结构 体 指针。对于 GDC,输出 通道 属性 结构 体为 gdc_ochn_attr_t;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_set_ichn_attr
【函数声明】
hobot_status hbn_vnode_set_ichn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ichn_id, void *attr);
【功能描述】
设置
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ichn_id:模块
的 输入 通道 id,对于 GDC,输入 通道 为0; [IN] void *attr:模块
的 输入 通道 属性 结构 体 指针。对于 GDC,输入 通道 属性 结构 体为 gdc_ichn_attr_t;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_get_ichn_attr
【函数声明】
hobot_status hbn_vnode_get_ichn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ichn_id, void *attr);
【功能描述】
获取
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ichn_id:模块
的 输入 通道 id,对于 GDC,输入 通道 为0; [OUT] void *attr:模块
的 输入 通道 属性 结构 体 指针。对于 GDC,输入 通道 属性 结构 体为 gdc_ichn_attr_t;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_set_ochn_buf_attr
【函数声明】
hobot_status hbn_vnode_set_ochn_buf_attr(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id,
hbn_buf_alloc_attr_t *alloc_attr);
【功能描述】
设置
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ochn_id:模块
的 输出 通道 id,对于 GDC,输出 通道 为0; [IN] hbn_buf_alloc_attr_t *alloc_attr:buffer 分配
属性;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_start
【函数声明】
hobot_status hbn_vnode_start(hbn_vnode_handle_t vnode_fd);
【功能描述】
模块
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
启动
【兼容性】
硬件: X5
hbn_vnode_stop
【函数声明】
hobot_status hbn_vnode_stop(hbn_vnode_handle_t vnode_fd);
【功能描述】
模块
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_getframe
【函数声明】
hobot_status hbn_vnode_getframe(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, uint32_t millisecondTimeout,
hbn_vnode_image_t *out_img);
【功能描述】
获取
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ochn_id:模块
的 输出 通道 id,对于 GDC,输出 通道 为0; [IN] uint32_t millisecondTimeout:超时
等待时间; [OUT] hbn_vnode_image_t *out_img:输出
图像 buffer 结构 体 地址;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_sendframe
【函数声明】
hobot_status hbn_vnode_sendframe(hbn_vnode_handle_t vnode_fd, uint32_t ichn_id,
hbn_vnode_image_t *img);
【功能描述】
发送
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ichn_id:模块
的 输入 通道 id,对于 GDC,输入 通道 为0; [IN] hbn_vnode_image_t *img:输入
图像 buffer 地址;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
hbn_vnode_releaseframe
【函数声明】
hobot_status hbn_vnode_releaseframe(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, hbn_vnode_image_t *img);
【功能描述】
释放
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块
的 vnode handle; [IN] uint32_t ochn_id:模块
的 输出 通道 id,对于 GDC,输出 通道 为0; [IN] hbn_vnode_image_t *img:图像 buffer 结构
体 地址;
【返回值】
成功,返回 HBN_STATUS_SUCESS 0
失败:异常
为 负值 错误码,参考返回值 说明
【注意事项】
无
【兼容性】
硬件: X5
5.10.2.5. 数据结构
gdc_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
| config_addr | uint64_t | - | - | - | gdc 配置文件 |
是 |
| config_size | uint32_t | - | - | - | gdc 配置文件 |
是 |
| div_width | uint8_t | 8 | - | 0 | 暂时 |
是 |
| div_height | uint8_t | 0 | - | 0 | 暂时 |
否 |
| total_planes | uint32_t | 0 | - | 0 | yuv 图层 |
是 |
| binary_ion_id | int32_t | 0 | - | 0 | 配置文件 |
是 |
| binary_offset | uint64_t | 0 | - | 0 | 配置文件 |
是 |
gdc_ichn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
| input_width | uint32_t | 0 | 4096 | 0 | 输入 |
是 |
| input_height | uint32_t | 0 | 2160 | 0 | 输入 |
是 |
| input_stride | uint32_t | 0 | - | 0 | 输入 |
是 |
| n_in_one | uint32_t | 0 | - | 0 | 回灌 n 帧 |
是 |
gdc_ochn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
| output_width | uint32_t | 0 | - | 0 | 输出 |
是 |
| output_height | uint32_t | 0 | - | 0 | 输出 |
是 |
| output_stride | uint32_t | 0 | - | 0 | 输出 |
是 |
5.10.2.6. 返回值说明
| 错误码 | 宏 |
描述 | 常见 |
|---|---|---|---|
| 0 | HBN_STATUS_SUCESS | 成功 | |
| 1 | HBN_STATUS_INVALID_NODE | vnode 无效,找 |
|
| 2 | HBN_STATUS_INVALID_NODETYPE | vnode 类型 |
对于 GDC,vnode 类型 |
| 3 | HBN_STATUS_INVALID_HWID | 无效 |
对于 GDC,hw_id 取值 |
| 4 | HBN_STATUS_INVALID_CTXID | 无效 |
可 |
| 5 | HBN_STATUS_INVALID_OCHNID | 无效 |
GDC 输出 |
| 6 | HBN_STATUS_INVALID_ICHNID | 无效 |
GDC 仅 |
| 7 | HBN_STATUS_INVALID_FORMAT | 无效 |
|
| 8 | HBN_STATUS_INVALID_NULL_PTR | 空 |
|
| 9 | HBN_STATUS_INVALID_PARAMETER | 无效 |
|
| 10 | HBN_STATUS_ILLEGAL_ATTR | 无效 |
|
| 11 | HBN_STATUS_INVALID_FLOW | 无效 |
|
| 12 | HBN_STATUS_FLOW_EXIST | flow 已经 |
|
| 13 | HBN_STATUS_FLOW_UNEXIST | flow 不 |
|
| 14 | HBN_STATUS_NODE_EXIST | node 已经 |
|
| 15 | HBN_STATUS_NODE_UNEXIST | node 不 |
|
| 16 | HBN_STATUS_NOT_CONFIG | 预留 | |
| 17 | HBN_STATUS_CHN_NOT_ENABLED | 通道 |
|
| 18 | HBN_STATUS_CHN_ALREADY_ENABLED | 通道 |
|
| 19 | HBN_STATUS_ALREADY_BINDED | node 已经 |
|
| 20 | HBN_STATUS_NOT_BINDED | node 未 |
|
| 21 | HBN_STATUS_TIMEOUT | 超时 | |
| 22 | HBN_STATUS_NOT_INITIALIZED | 未 |
|
| 23 | HBN_STATUS_NOT_SUPPORT | 通道 |
|
| 24 | HBN_STATUS_NOT_PERM | 操作 |
|
| 25 | HBN_STATUS_NOMEM | 内存不足 | |
| 26 | HBN_STATUS_INVALID_VNODE_FD | 无效 |
|
| 27 | HBN_STATUS_INVALID_ICHNID_FD | 无效 |
|
| 28 | HBN_STATUS_INVALID_OCHNID_FD | 无效 |
|
| 29 | HBN_STATUS_OPEN_OCHN_FAIL | 打开 |
|
| 30 | HBN_STATUS_OPEN_ICHN_FAIL | 打开 |
|
| 31 | HBN_STATUS_JSON_PARSE_FAIL | json 解析 |
|
| 32 | HBN_STATUS_REQ_BUF_FAIL | 请求 buffer 失败 | |
| 33 | HBN_STATUS_QUERY_BUF_FAIL | 查询 buffer 信息 |
|
| 34 | HBN_STATUS_SET_CONTROL_FAIL | 模块 |
|
| 35 | HBN_STATUS_GET_CONTROL_FAIL | 模块 |
|
| 36 | HBN_STATUS_NODE_START_FAIL | node 开启 |
|
| 37 | HBN_STATUS_NODE_STOP_FAIL | node 停止 |
|
| 38 | HBN_STATUS_NODE_POLL_ERROR | node 通道 poll 错误 | |
| 39 | HBN_STATUS_NODE_POLL_TIMEOUT | node 通道 poll 超时 | |
| 40 | HBN_STATUS_NODE_POLL_FRAME_DROP | node 通道 poll 时 |
|
| 41 | HBN_STATUS_NODE_POLL_HUP | node 通道 poll 时 |
|
| 42 | HBN_STATUS_NODE_ILLEGAL_EVENT | node 通道 poll 时 |
|
| 43 | HBN_STATUS_NODE_DEQUE_ERROR | node 通道 dequeue buffer 错误 | |
| 44 | HBN_STATUS_ILLEGAL_BUF_INDEX | 无效 |
|
| 45 | HBN_STATUS_NODE_QUE_ERROR | node 通道 queue buffer 错误 | |
| 46 | HBN_STATUS_FLUSH_FRAME_ERROR | node 通道 |
|
| 47 | HBN_STATUS_INIT_BIND_ERROR | 用 json 解析 |
|
| 48 | HBN_STATUS_ADD_NODE_FAIL | 向 flow 中 |
|
| 49 | HBN_STATUS_WRONG_CONFIG_ID | 系统 |
|
| 50 | HBN_STATUS_BIND_NODE_FAIL | flow 绑定 node 时 |
|
| 51 | HBN_STATUS_INVALID_VERSION | 底层 |
|
| 52 | HBN_STATUS_GET_VERSION_ERROR | 获取 |
|
| 53 | HBN_STATUS_MEM_INIT_FAIL | hbmem 内存 |
|
| 54 | HBN_STATUS_MEM_IMPORT_FAIL | hbmem 内存 |
|
| 55 | HBN_STATUS_MEM_FREE_FAIL | hbmem 内存 |
|
| 56 | HBN_STATUS_SYSFS_OPEN_FAIL | 系统文件 |
|
| 57 | HBN_STATUS_STRUCT_SIZE_NOT_MATCH | hal 层 |
|
| 58 | HBN_STATUS_RGN_UNEXIST | 获取 |
|
| 59 | HBN_STATUS_RGN_INVALID_OPERATION | rgn 操作 |
|
| 60 | HBN_STATUS_RGN_OPEN_FILE_FAIL | rgn 模块 |
|
| 128 | HBN_STATUS_ERR_UNKNOW | 未知 |