5.2. HBN 框架说明
5.2.1. 概述
HBN 框架在多媒体系统软件架构图中以 红色 标识,覆盖了 Camera Sensor 采集链路中大部分的模块,包括 VIN、 ISP、 VSE、 GDC、 N2D。
其中 Camera API 和 OSD API ( 图中 绿色 部分 ) 没有包含在 HBN 框架中,但是可以通过对应的 attach 函数绑定到 HBN 框架中。
总的来说, HBN 框架覆盖了 Camera Sensor 采集链路的所有模块,并且提供了简单灵活的 API。

5.2.2. 软件抽象
HBN 框架中将 VIN、 ISP、 VSE、 GDC、 N2D 中的每个模块用 vnode 来抽象,多个 vnode 连接成一个 vflow (类似于一条流水线)。
由于 Camera 和 OSD 使用独立的 API,所以 HBN 框架提供了 attach 接口,实现 Camera 和 VIN 进行绑定, OSD 和 VSE 进行绑定。
vnode 是对硬件加速单元的抽象,在 HBN 框架中 VIN、 ISP、 VSE、 GDC、 N2D ,都会抽象成 vnode 的概念, vnode 包含如下属性 :
硬件加速单元本身的属性, 比如 isp_attr_t
硬件加速单元输入通道的属性, 比如 isp_ichn_attr_t
硬件加速单元输出通道的属性, 比如 isp_ochn_attr_t
多个 vnode 连接起来形成 1 个 vflow, 支持同时创建多条 vflow, 不同 vflow 之间是完全独立的 , 连接 vnode 的流程如下:
创建 vflow 的接口:hbn_vflow_create
vflow 中添加 vnode 节点的接口:hbn_vflow_add_vnode
在 vflow 中绑定两个 vnode 的接口:hbn_vflow_bind_vnode
启动 vflow 的接口:hbn_vflow_start
对于
HBN API中非HBN Framework API的模块,比如 Camera 和 OSD,支持使用 attach 接口绑定到 vflow 中对于非
HBN API中的模块, 比如 BPU 和 Display 等,通过接口hbn_vnode_get_output_frame从 vflow 中获取视频帧
下图是三种场景的 vflow 例子(场景 1 中 回灌 的含义:数据源来自 DDR 的情况):

场景 1 :单路 vflow( 回灌 )
场景描述:视频帧来自 DDR ( 比如读取视频文件到 DDR),使用 VSE 对视频帧进行缩放
数据源:数据源没有包含在 vflow 中,需要在线程中主动将 DDR 中的视频帧送入到 vflow 中
vflow 中至少有 1 个 vnode,可以有多个,只有 1 个节点时可以不绑定到 vflow 中,多个 vnode 节点并且需要连接起来时,必须绑定到 vflow
VSE、 GDC、 ISP、 N2D 都支持回灌的方式
场景 2 :单路 vflow
场景描述:接入 1 路 Camera, 分别经过 VIN、 ISP、 GDC、 VSE,在 VSE 中输出 3 个通道,分别进行如下处理,
通道 0 :交给 CODEC 进行编码
通道 1 :交给 Display 进行显示
通道 2 :交给 BPU 进行推理
数据源:通过 mipi 接口接入的 Camera Sensor
vflow 中包含数据源, vflow 启动后, HBN 框架会自动调度完成数据流的传递,不需要开发者介入
vflow 启动后,可以从末尾节点持续获取视频帧,并传递到非 HBN API 中的加速单元,比如图中 虚线框中的设备 (Codec、 Display、 BPU)
场景 3 :多路 vflow
场景描述:接入 2 路 Camera, 分别经过不同的处理链路
数据源:每个 vflow 中各接入 1 个 Camera
使用两个 vflow 完成两路视频链路的采集
两个 vflow 之间是完全独立
5.2.3. vnode 连接方式
vnode 之间通过输入通道和输出通道进行连接 :
每个 vnode 节点,有一个输入通道和多个输出通道
上游 vnode 的输出通道和下游 vnode 的输入通道连接 , 多个 vnode 连接成一个 vflow
上游 vnode 节点的输出通道决定了 vnode 的连接方式
下面从三个方面展开描述:输出通道、连接方式、参数配置
5.2.3.1. 输出通道
输出通道决定了 vnode 的连接方式,支持 online 模式和 offline 模式,详细见 系统概述
只有 VIN、 ISP 的输出通道支持 online 通道,其他模块只支持 offline 通道
| 模块 | 输出通道编号 | 通道功能 |
|---|---|---|
| VIN | 0 | offline 通道,输出 camera 帧到 ddr |
| 1 | online 通道,连接到 isp | |
| 3 | offline 通道,只输出 emb data 到 ddr | |
| ISP | 0 | offline 通道,输出 isp 处理后的帧到 ddr |
| 1 | online 通道,连接到 vse | |
| VSE | 0 | offline 通道, 4K Downscale |
| 1 | offline 通道, 1080P0 Downscale | |
| 2 | offline 通道, 1080P1 Downscale | |
| 3 | offline 通道, 720P0 Downscale | |
| 4 | offline 通道, 720P1 Downscale | |
| 5 | offline 通道, 4K Upscale | |
| GDC | 0 | offline 通道,输出 gdc 处理后的帧到 ddr |
5.2.3.2. 连接方式
只有 VIN、 ISP 的输出通道支持 online 通道,其他模块只支持 offline 通道,所以针对 VIN、 ISP、 VSE 之间的组合,描述如下:
| 模块组合 | 连接方式 | 说明 |
|---|---|---|
| VIN - ISP | VIN online ISP, ISP 工作模式 PASSTHROUGH_MODE | VIN 和 ISP 间是硬件连接,中间不经过 DDR,最多支持 1 路使用该连接方式 |
| VIN online ISP, ISP 工作模式 MCM_MODE | 最多支持 4 路使用该连接方式。预留模式,当前不建议使用 | |
| VIN offline ISP, ISP 工作模式 DDR_MODE | 中间需要经过 DDR,最多支持 6 路使用该连接方式 | |
| VIN - VSE | VIN offline VSE | Camera Sensor 不需要 ISP 时,使用 VIN 与 VSE 直接绑定, 只支持 offline |
| ISP - VSE | ISP online VSE | ISP 和 VSE 间是硬件连接,中间不经过 DDR,最多支持 4 路使用该连接方式 |
| ISP offline VSE | 中间需要经过 DDR |
5.2.3.3. 参数配置
函数 hbn_vflow_bind_vnode 绑定两个 vnode 节点时,会确定模块间的连接方式,但是需要 VIN 和 ISP 节点设置为对应的配置,具体如下:
| 模块组合 | 连接方式 | hbn_vflow_bind_vnode 函数 | vin_node_attr 结构体 | isp_node_attr 结构体 |
|---|---|---|---|---|
| VIN - ISP | online (ISP 是 PASSTHROUGH_MODE 模式 ) | 1. src_out_channel =1 2. dst_input_channel =0 |
cim_isp_flyby =1 | input_mode = 0 |
| VIN - ISP | online (ISP 是 MCM_MODE 模式 ) | 1. src_out_channel =1 2. dst_input_channel =0 |
cim_isp_flyby =1 | input_mode = 1 |
| VIN - ISP | offline (ISP 是 DDR_MODE) | 1. src_out_channel =0 2. dst_input_channel =0 |
1. ddr_en =1 2. cim_isp_flyby =0 |
input_mode = 2 |
| VIN - VSE | offline | 1. src_out_channel =0 2. dst_input_channel =0 |
- | - |
| ISP - VSE | online | 1. src_out_channel =1 2. dst_input_channel =0 |
- | - |
| ISP - VSE | offline | 1. src_out_channel =0 2. dst_input_channel =0 |
ddr_en =1 | - |
5.2.4. API 列表
| API 接口 | 接口功能 |
|---|---|
| hbn_vnode_open | 打开 vonde |
| hbn_vnode_close | 关闭 vonde |
| hbn_vnode_set_attr | 设置 vnode 属性 |
| hbn_vnode_get_attr | 获取 vnode 属性 |
| hbn_vnode_set_attr_ex | 设置 vnode 扩展属性 |
| hbn_vnode_get_attr_ex | 获取 vnode 扩展属性 |
| hbn_vnode_set_ochn_attr | 设置模块的输出通道属性 |
| hbn_vnode_get_ochn_attr | 获取模块的输出通道属性 |
| hbn_vnode_set_ochn_attr_ex | 设置模块的输出通道扩展属性,可在应用运行中动态设置 |
| hbn_vnode_set_ichn_attr | 设置模块的输入通道属性 |
| hbn_vnode_get_ichn_attr | 获取模块的输入通道属性 |
| hbn_vnode_set_ichn_attr_ex | 设置模块的输入通道扩展属性,可在应用运行中动态设置 |
| hbn_vnode_set_ochn_buf_attr | 设置输出通道 buffer 属性 |
| hbn_vnode_start | 启动 vnode,启动前需要先打开模块 |
| hbn_vnode_stop | 停止 vonde |
| hbn_vnode_getframe | 获取模块输出通道的图像,阻塞型接口 |
| hbn_vnode_releaseframe | 释放图像 buffer, buffer 会归还到指定的输出通道 |
| hbn_vnode_sendframe | 发送图像到模块的输入通道,会触发模块进行处理。阻塞型接口,等待硬件处理完再返回,默认超时时间为 1 秒 |
| hbn_vnode_sendframe_async | 发送图像到模块的输入通道,会触发模块进行处理。非阻塞型接口 |
| hbn_vnode_set_output_frame | 设置模块输出通道的图像 buffer,非阻塞型接口,外部设置输出 buffer |
| hbn_vnode_get_output_frame | 获取模块处理后的图像 buffer,和 hbn_vnode_set_output_frame 配合使用,非阻塞型接口 |
| hbn_vflow_create | 创建一个 vflow,返回 vflow handle |
| hbn_vflow_destroy | 根据 vflow handle,销毁一个 vflow |
| hbn_vflow_add_vnode | 把模块添加到 vflow 里面,用 vflow 管理起来 |
| hbn_vflow_bind_vnode | 把两个模块绑定到一起,绑定后 src_vnode_fd 模块的数据帧会自动流向 dst_vnode_fd 模块 |
| hbn_vflow_unbind_vnode | 解绑 src_vnode_fd 和 dst_vnode_fd 模块 |
| hbn_vflow_start | 启动一条 vflow, vflow 里包含的 vnode 都会启动 |
| hbn_vflow_stop | 停止一条 vflow, vflow 里包含的 vnode 都会停止 |
| hbn_vflow_get_vnode_handle | 通过模块 id 和 context id 获取 vnode handle |
| hbn_vflow_create_cfg | 通过配置文件创建一条包含 vnode 及其绑定关系的 vflow |
| hbn_vflow_get_version | 获取 hbn api 的版本信息 |
5.2.5. API 调用流程
5.2.5.1. 创建流程

5.2.5.2. 销毁流程
销毁流程是创建流程的反操作,但是有如下几点需要注意:
调用了 hbn_vflow_destroy 就不需要再调用 hbn_vnode_close 和 hbn_vflow_unbind_vnode
调用了
hbn_camera_destroy就不需要再调用hbn_camera_detach_from_vin

5.2.6. API 接口说明
5.2.6.1. 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)
【参数描述】
[IN] hb_vnode_type vnode_type: vnode 类型,每个硬件模块对应一个 vnode 类型。取值为 HB_VIN、 HB_ISP、 HB_VSE、 HB_GDC、 HB_N2D;
[IN] uint32_t hw_id:模块的硬件 id。对于 VIN 模块, hw_id 取值为 [0, 3],依次对应 SIF0~SIF3 ,其他模块只取 0 ;
[IN] uint32_t ctx_id:模块的 context id,软件上的概念,可指定 context id 值,也可设置为 AUTO_ALLOC_ID,由 HNB 框架 自动分配 context id;
[OUT] hbn_vnode_handle_t *vnode_fd:返回模块的 vnode handle;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
初始化某个模块,返回该模块的句柄 hbn_vnode_handle_t。
使用某个模块前,必须先调用
hbn_vnode_open函数hbn_vnode_open函数打开该模块设备节点 ( 比如/dev/vin0_cap)hbn_vnode_open函数返回一个指向hbn_vnode_handle_t类型的指针( vnode_fd),用于标识模块的特定软件实例。
例如,在函数 hbn_vflow_bind_vnode 中,其两个参数 src_vnode_fd 和 dst_vnode_fd 均为hbn_vnode_open函数返回的hbn_vnode_handle_t指针hbn_vnode_handle_t的本质是int64_t类型,hbn_vnode_open函数产生一个系统唯一的整型值通过*vnode_fd返回
【注意事项】
5.2.6.2. hbn_vnode_close
【函数声明】
void hbn_vnode_close(hbn_vnode_handle_t vnode_fd)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的 vnode handle;
【返回值】
无
【功能描述】
关闭模块的设备节点。
【注意事项】
调用了 hbn_vflow_destroy 就无须再调用 hbn_vnode_close。
模块绑定在 vflow 的情况:需要调用 hbn_vflow_destroy,不需要调用 hbn_vnode_close。
模块单独使用的情况(例如只是 ISP、 VSE、 GDC 回灌, 不绑定到 vflow):需要调用 hbn_vnode_close
5.2.6.3. 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:模块的基本属性结构体指针。基本属性结构体可以是 vin_attr_t、isp_attr_t、vse_attr_t 等,以模块名 +_attr_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块的基本属性。
【注意事项】
无
5.2.6.4. hbn_vnode_get_attr
【函数声明】
hobot_status hbn_vnode_get_attr(hbn_vnode_handle_t vnode_fd, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的 vnode handle;
[OUT] void *attr:模块的基本属性结构体指针。基本属性结构体可以是 vin_attr_t、isp_attr_t、vse_attr_t 等,以模块名 +_attr_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
获取模块的基本属性。
【注意事项】
无
5.2.6.5. hbn_vnode_set_attr_ex
【函数声明】
hobot_status hbn_vnode_set_attr_ex(hbn_vnode_handle_t vnode_fd, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的 vnode handle;
[IN] void *attr:模块的扩展属性结构体指针。扩展属性结构体可以是
vin_attr_ex_t等,以模块名 +_attr_ex_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块的扩展属性,可在应用运行中动态设置。
【注意事项】
无
5.2.6.6. hbn_vnode_get_attr_ex
【函数声明】
hobot_status hbn_vnode_get_attr_ex(hbn_vnode_handle_t vnode_fd, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的 vnode handle;
[OUT] void *attr:模块的扩展属性结构体指针。扩展属性结构体可以是
vin_attr_ex_t等,以模块名 +_attr_ex_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
获取模块的扩展属性。
【注意事项】
无
5.2.6.7. 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,通道 id 见 : 模块通道说明 ;
[IN] void *attr:模块的输出通道属性结构体指针。输出通道属性可以是 vin_ochn_attr_t、isp_ochn_attr_t 等,以模块名 +_ochn_attr_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块的输出通道属性。
【注意事项】
无
5.2.6.8. 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,通道 id 见 : 模块通道说明
[OUT] void *attr:模块输出通道属性结构体指针。输出通道属性可以是 vin_ochn_attr_t、isp_ochn_attr_t 等,以模块名 +_ochn_attr_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
获取模块的输出通道属性。
【注意事项】
无
5.2.6.9. hbn_vnode_set_ochn_attr_ex
【函数声明】
hobot_status hbn_vnode_set_ochn_attr_ex(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,通道 id 见 : 模块通道说明
[IN] void *attr:模块的输出通道扩展属性结构体指针。输出通道扩展属性可以是
vse_ochn_attr_ex_t等,以模块名 +_ochn_attr_ex_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块的输出通道扩展属性,可在应用运行中动态设置。
【注意事项】
无
5.2.6.10. 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,通道 id 见 : 模块通道说明
[IN] void *attr:模块的输入通道属性结构体指针。输入通道属性可以是 vin_ichn_attr_t、isp_ichn_attr_t 等,以模块名 +_ichn_attr_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块的输入通道属性。
【注意事项】
无
5.2.6.11. 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,通道 id 见 : 模块通道说明
[OUT] void *attr:模块的输入通道属性结构体指针。输入通道属性可以是 vin_ichn_attr_t、isp_ichn_attr_t 等,以模块名 +_ichn_attr_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
获取模块的输入通道属性。
【注意事项】
无
5.2.6.12. hbn_vnode_set_ichn_attr_ex
【函数声明】
hobot_status hbn_vnode_set_ichn_attr_ex(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,通道 id 见 : 模块通道说明
[IN] void *attr:模块的输入通道扩展属性结构体指针。输入通道扩展属性指以模块名 +_ichn_attr_ex_t 结尾的属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块的输入通道扩展属性,可在应用运行中动态设置。
【注意事项】
无
5.2.6.13. 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,通道 id 见 : 模块通道说明
[IN] hbn_buf_alloc_attr_t *alloc_attr: buffer 分配属性;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置输出通道 buffer 属性。
【注意事项】
5.2.6.14. 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
失败:异常为负值错误码,参考 返回值说明
【功能描述】
模块启动。
【注意事项】
启动前需要先打开模块
5.2.6.15. 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
失败:异常为负值错误码,参考 返回值说明
【功能描述】
模块停止。
【注意事项】
无
5.2.6.16. 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,通道 id 见 : 模块通道说明
[IN] uint32_t millisecondTimeout:超时等待时间;
[OUT] hbn_vnode_image_t *out_img:输出图像 buffer 结构体地址;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
获取模块输出通道的图像,阻塞型接口。
【注意事项】
无
5.2.6.17. 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,通道 id 见 : 模块通道说明
[IN] hbn_vnode_image_t *img:图像 buffer 结构体地址;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
释放图像 buffer, buffer 会归还到指定的输出通道。
【注意事项】
无
5.2.6.18. 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,通道 id 见 : 模块通道说明
[IN] hbn_vnode_image_t *img:输入图像 buffer 地址;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
发送图像到模块的输入通道,会触发模块进行处理。阻塞型接口,等待硬件处理完再返回,默认超时时间为 1 秒。
【注意事项】
无
5.2.6.19. hbn_vnode_sendframe_async
【函数声明】
hobot_status hbn_vnode_sendframe_async(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,通道 id 见 : 模块通道说明
[IN] hbn_vnode_image_t *img:输入图像 buffer 地址;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
发送图像到模块的输入通道,会触发模块进行处理。非阻塞型接口。
【注意事项】
无
5.2.6.20. hbn_vnode_set_output_frame
【函数声明】
hobot_status hbn_vnode_set_output_frame(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,通道 id 见 : 模块通道说明
[IN] hbn_vnode_image_t *img:输出图像 buffer 地址;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块输出通道的图像 buffer,非阻塞型接口,外部设置输出 buffer,用法参考 sample 代码。
【注意事项】
只支持 VSE, GDC 和 GDC 绑定 VSE,三种场景回灌模式使用
需控制输出 buffer 的申请和释放以及 cache 管理
输出 buf 需满足: Y 和 UV 地址空间要连续,使用 ION 空间,填充必要 bufferindex 和 share_id
不支持同时有内部 buffer 控制操作,即通过 hbn_vnode_set_ochn_buf_attr 下发申请内部 buffer
5.2.6.21. hbn_vnode_get_output_frame
【函数声明】
hobot_status hbn_vnode_get_output_frame(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,通道 id 见 : 模块通道说明
[IN] hbn_vnode_image_t *img:输出图像 buffer 地址;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
获取模块处理后的图像 buffer,和 hbn_vnode_set_output_frame 配合使用,非阻塞型接口,用法参考 sample 代码。
【注意事项】
只支持 VSE, GDC 和 GDC 绑定 VSE,三种场景回灌模式使用
需控制输出 buffer 的申请和释放以及 cache 管理
输出 buf 需满足: Y 和 UV 地址空间要连续,使用 ION 空间,填充必要 bufferindex 和 share_id
不支持同时有内部 buffer 控制操作,即通过 hbn_vnode_set_ochn_buf_attr 下发申请内部 buffer
5.2.6.22. hbn_vflow_create
【函数声明】
hobot_status hbn_vflow_create(hbn_vflow_handle_t *vflow_fd)
【参数描述】
[OUT] hbn_vflow_handle_t *vflow_fd: vflow handle;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
创建一个 vflow,返回 vflow handle。
【注意事项】
无
5.2.6.23. hbn_vflow_destroy
【函数声明】
void hbn_vflow_destroy(hbn_vflow_handle_t vflow_fd)
【参数描述】
[IN] hbn_vflow_handle_t *vflow_fd: vflow handle;
【返回值】
无
【功能描述】
根据 vflow handle,销毁一个 vflow。
【注意事项】
无
5.2.6.24. hbn_vflow_add_vnode
【函数声明】
hobot_status hbn_vflow_add_vnode(hbn_vflow_handle_t vflow_fd, hbn_vnode_handle_t vnode_fd)
【参数描述】
[IN] hbn_vflow_handle_t *vflow_fd: vflow handle;
[IN] hbn_vnode_handle_t vnode_fd:模块的 vnode handle;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
把模块添加到 vflow 里面,用 vflow 管理起来。
【注意事项】
无
5.2.6.25. hbn_vflow_bind_vnode
【函数声明】
hobot_status hbn_vflow_bind_vnode(hbn_vflow_handle_t vflow_fd, hbn_vnode_handle_t src_vnode_fd, uint32_t out_chn, hbn_vnode_handle_t dst```_vnode_fd, uint32_t in_chn)
【参数描述】
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
把两个模块绑定到一起。绑定后 src_vnode_fd 模块的数据帧会自动流向 dst_vnode_fd 模块。
【注意事项】
flow 需要创建,模块需要 open。
5.2.6.26. hbn_vflow_unbind_vnode
【函数声明】
hobot_status hbn_vflow_unbind_vnode(hbn_vflow_handle_t vflow_fd, hbn_vnode_handle_t src_vnode_fd, uint32_t out_chn, hbn_vnode_handle_t dst_vnode_fd, uint32_t in_chn)
【参数描述】
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
解绑 src_vnode_fd 和 dst_vnode_fd 模块。
【注意事项】
调用了 hbn_vflow_destroy 就无须再调用 hbn_vflow_unbind_vnode
5.2.6.27. hbn_vflow_start
【函数声明】
hobot_status hbn_vflow_start(hbn_vflow_handle_t vflow_fd)
【参数描述】
[IN] hbn_vflow_handle_t vflow_fd: vflow handle;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
启动一条 vflow。 vflow 里包含的 vnode 都会启动。
【注意事项】
模块 vnode 需要事先添加到 vflow 中。
5.2.6.28. hbn_vflow_stop
【函数声明】
hobot_status hbn_vflow_stop(hbn_vflow_handle_t vflow_fd)
【参数描述】
[IN] hbn_vflow_handle_t vflow_fd: vflow handle;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
停止一条 vflow。 vflow 里包含的 vnode 都会停止。
【注意事项】
和 hbn_vflow_start 成对使用。
5.2.6.29. hbn_vflow_get_vnode_handle
【函数声明】
hbn_vnode_handle_t hbn_vflow_get_vnode_handle(hbn_vflow_handle_t vflow_fd, hb_vnode_type vnode_type, uint32_t index)
【参数描述】
[IN] hbn_vflow_handle_t vflow_fd: vflow handle;
[IN] hb_vnode_type vnode_type:模块 id;
[IN] uint32_t index: context id,范围为 [0, 7]
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
通过模块 id 和 context id 获取 vnode handle。
【注意事项】
模块需要事先 open。
5.2.6.30. hbn_vflow_create_cfg
【函数声明】
hobot_status hbn_vflow_create_cfg(const char *cfg_file, hbn_vflow_handle_t *vflow_fd)
【参数描述】
[IN] const char *cfg_file:配置文件路径;
[OUT] hbn_vflow_handle_t *vflow_fd:指向 vflow handle 数组的指针,可包含多个 vflow;
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
通过配置文件创建一条包含 vnode 及其绑定关系的 vflow。 接口内部的操作有:创建 vflow、创建 vnode、 vnode 添加到 vflow、绑定 vnode。
【注意事项】
无
5.2.6.31. hbn_vflow_get_version
【函数声明】
hobot_status hbn_vflow_get_version(hbn_version_t *version)
【参数描述】
[OUT] hbn_version_t *version:版本信息结构体指针
【返回值】
成功: HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
获取 hbn api 的版本信息。
【注意事项】
暂不支持。
5.2.7. 数据结构
5.2.7.1. 通用参数
hbn_buf_alloc_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
flags |
int64_t |
- | - | - | buffer flag,具体参考 hbmem 模块 | 是 |
buffers_num |
uint32_t |
- | - | - | 申请 buffer 数量 | 是 |
is_contig |
uint32_t |
- | - | - | 多图层的 buffer 是否是一块连续 buffer | 是 |
hbn_frame_info_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
frame_id |
uint32_t |
- | - | - | frame id | - |
timestamps |
uint64_t |
- | - | - | sif framestart 时,内核获取的时间戳 | - |
sys_timestamps |
uint64_t |
- | - | - | sif framestart 时,内核获取的系统时间戳 | - |
tv |
struct timeval |
- | - | - | sif framestart 时,获取的硬件时间戳 | - |
trig_tv |
struct timeval |
- | - | - | 触发模式下, sensor 被触发曝光时刻的硬件时间戳 | - |
frame_done |
uint32_t |
- | - | - | 暂时不用 | - |
bufferindex |
int32_t |
- | - | - | 对应 buffer 的 index |
hbn_vnode_image_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
info |
hbn_frame_info_t |
- | - | - | frame 信息 | - |
buffer |
hb_mem_graphic_buf_t |
- | - | - | buffer 信息 | - |
*metadata |
void |
- | - | - | metadata 数据 | - |
hbn_version_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
major |
uint32_t |
- | - | - | 版本 major 号 | - |
minor |
uint32_t |
- | - | - | 版本 minor 号 | - |
5.2.7.2. MIPI 参数
mipi_config_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
rx_enable |
uint32_t |
0 | 1 | 0 | RX 设备使能,使能对应的 MIPI RX 端口。 | 是 |
rx_attr |
mipi_host_cfg_t |
- | - | - | RX 设备属性,设置对应的 MIPI RX 端口属性。 | 是 |
rx_ex_mask |
uint64_t |
- | - | - | RX 高级属性掩码。 | 否 |
rx_attr_ex |
mipi_host_param_t |
- | - | - | RX 高级属性配置 | 否 |
*bypass |
mipi_bypass_t |
- | - | - | MIPI RX -> TX bypass 使能, MIPI RX 接收到的数据,直接通过 MIPI TX 发送出去。 | 否 |
mipi_host_cfg_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
phy |
uint16_t |
0 | 1 | 0 | 0: 代表 dphy, X5 只支持该协议。 | 否 |
lane |
uint16_t |
1 | 4 | - | mipi lane 数,目前每一个 MIPI RX 默认支持 2 lane,如果设置为 4 lane,则会开启 lane 拼接功能。 | 是 |
datatype |
uint16_t |
- | - | - | mipi 输入的数据格式,与 sensor 配置保持一致。 | 是 |
fps |
uint16_t |
0 | 120 | 0 | 帧率,供计算 MIPI 配置用。 | 是 |
mclk |
uint16_t |
0 | 65535 | 0 | sensor mclk 配置: | 是 |
| 0 :使用外部 mclk | ||||||
| 1 :使用芯片 产生的 mclk 24M | ||||||
| 2~24: invalid and drop | ||||||
| 25~636: invalid and error | ||||||
| 637~ : 配置频率 =mclk*10KHz freq -> 6.37MHz~655.35MHz | ||||||
mipiclk |
uint16_t |
0 | - | 0 | mipi 总传输率 ( 所有 LANE) | 是 |
width |
uint16_t |
0 | 8192 | - | 输入图像 宽度( pixel) | 是 |
height |
uint16_t |
0 | 4096 | - | 输入图像 高度( pixel) | 是 |
linelenth |
uint16_t |
0 | - | - | 带 hblank 的总行长, RX 用于 ipi 参数计算, TX 的 VPG 模式可调整帧率 | 是 |
framelenth |
uint16_t |
0 | - | - | 带 hblank 的总高, RX 用于 ipi 参数计算, TX 的 VPG 模式可调整帧率 | 是 |
settle |
uint16_t |
0 | - | - | mipi settle, phy 的 settle 时间配置,报 phy 错时可调整 | 是 |
ppi_pg |
uint16_t |
0 | - | - | mipi 输出 test pattern,不生效,预留使用 | 否 |
hsaTime |
uint16_t |
0 | - | - | ipi 配置, time of horizontal synchronism active | 否 |
hbpTime |
uint16_t |
0 | - | - | ipi 配置, time of horizontal back period | 否 |
hsdTime |
uint16_t |
0 | - | - | ipi 配置, time of horizontal sync porch delay period | 否 |
channel_num |
uint16_t |
0 | 4 | 0 | mipi 虚拟通道 number | 是 |
channel_sel[MIPIHOST_CHANNEL_NUM] |
uint16_t |
0 | 1 | 0 | mipi 虚拟通道对应的 ipi channel | 是 |
| `` |
5.2.7.3. SIF 参数
vin_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
vin_node_attr |
vin_node_attr_t |
- | - | - | vin node 属性描述 | 是 |
vin_attr_ex |
vin_attr_ex_t |
- | - | - | vin node 增强属性描述 | 是 |
vin_ochn_attr[] |
vin_ochn_attr_t |
- | - | - | vin node 输出通道属性描述 | 是 |
vin_ichn_attr |
vin_ichn_attr_t |
- | - | - | vin node 输入通道属性描述 | 是 |
vin_ochn_buff_attr[] |
vin_ochn_buff_attr_t |
- | - | - | vin node 输出 buffer 属性描述 | 是 |
vin_node_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
cim_attr |
cim_attr_t |
- | - | - | cim/sif 属性描述 | 是 |
lpwm_attr |
lpwm_attr_t |
- | - | - | lpwm 属性描述,用于多 sensor 同步 | 否 |
vcon_attr |
vcon_attr_t |
- | - | - | vcon 属性描述 | 否 |
flow_id |
uint32_t |
0 | - | - | pipeline id,可以不用设置 | 否 |
cim_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
mipi_en |
uint32_t |
0 | 1 | 0 | 使能 mipi,预留值,目前不需要配置 | 否 |
mipi_rx |
uint32_t |
0 | 4 | 0 | mipi rx 端口号 | 是 |
vc_index |
uint32_t |
0 | 4 | 0 | mipi virtual index | 是 |
ipi_channel |
uint32_t |
1 | 2 | 0 | ipi channel number, | 是 |
| linear mode 为 1 , | ||||||
| hdr dol2 mode 为 2 | ||||||
tpg_input |
cim_input_tpg_t |
- | - | - | 预留使用 | 否 |
func |
cim_func_desc_t |
- | - | - | cim/sif 高阶功能 | 是 |
cim_func_desc_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
enable_frame_id |
uint32_t |
0 | 1 | 0 | 使能 frame id | 否 |
set_init_frame_id |
uint32_t |
0 | - | 0 | frame id 初始赋值 | 否 |
time_stamp_en |
uint32_t |
- | - | - | 使能时间戳 | 否 |
time_stamp_mode |
uint32_t |
1 | 8 | - | 时间戳模式选择 | 否 |
| 1 :时间戳为 sensor 到达 sif 的时间 | ||||||
| 2 :时间戳 trigger 时间戳功能的时间,相当于 trigger source 的时间 | ||||||
| 其他:预留值 | ||||||
enable_pattern |
uint32_t |
- | - | - | 预留值,无需使用 | 否 |
skip_frame |
uint32_t |
- | - | - | 预留值,无需使用 | 否 |
input_fps |
uint32_t |
- | - | - | 预留值,无需使用 | 否 |
output_fps |
uint32_t |
- | - | - | 预留值,无需使用 | 否 |
skip_nums |
uint32_t |
- | - | - | 预留值,无需使用 | 否 |
hw_extract_m |
uint32_t |
- | - | - | 预留值,无需使用 | 否 |
hw_extract_n |
uint32_t |
- | - | - | 预留值,无需使用 | 否 |
hdr_mode |
enum hdr_mode |
0 | 2 | 0 | 设置值为 enum hdr_mode: | 是 |
| 0: 无需 SoC ISP 做多帧合成 | ||||||
| 1: 需要 SoC 侧做两帧合成 | ||||||
| 2: 需要 SoC 侧做三帧合成(预留, X5 不支持) |
vin_ochn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
ddr_en |
uint32_t |
0 | 1 | 0 | 数据是否写到 DDR | 是 |
roi_en |
uint32_t |
- | - | - | 预留 | 否 |
emb_en |
uint32_t |
- | - | - | 预留, sensor embedded data 是否写到 DDR | 否 |
ochn_attr_type |
vin_ochn_attr_type_e |
- | - | - | vin ochn 属性 VIN_BASIC_ATTR, // 默认,最基础的 vin 属性 VIN_EMB_ATTR,// sensor 带有 emb 输出 |
是 |
vin_basic_attr |
vin_basic_attr_t |
- | - | - | vin basic 属性,下 ddr 需要设置 | 是 |
rawds_attr |
vin_rawds_attr_t |
- | - | - | 预留 | 否 |
roi_attr |
vpm_commn_roi_data_desc |
- | - | - | 预留 | 否 |
emb_attr |
vin_emb_attr_t |
- | - | - | 预留, emb 需要设置 | 否 |
vin_basic_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
pack_mode |
uint32_t |
- | - | - | 预留 | 否 |
wstride |
uint32_t |
0 | - | - | cim/sif 下 ddr 的 wide stride, 16 字节对齐。 | 是 |
| sensor raw8 为 width, raw10~raw16 为 2*width | ||||||
vstride |
uint32_t |
- | - | - | 预留 | 否 |
format |
uint32_t |
- | - | - | 下 ddr 时需要设置 | 是 |
vin_pdaf_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
| pdaf_en | uint32_t | - | - | 0 | PD 信息通道是否使能, 1 为使能, 0 为不使能 | 是 |
| pd_ipi_channel | uint32_t | 0 | 3 | - | 指定 PD 信息从哪个 IPI 通道传输。 RAW 数据从 IPI 通道 0 传输, PD 信息可指定为 1 ,从 IPI 通道 1 传输 |
是 |
| pd_width | uint32_t | - | - | PD 信息的宽 | 是 | |
| pd_height | uint32_t | - | - | - | PD 信息的高 | 是 |
| pd_format | uint32_t | - | - | - | PD 信息的格式 | 是 |
vin_ichn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
format |
uint32_t |
- | - | - | vin format, sensor 输出 format | 是 |
width |
uint32_t |
0 | 8192 | 0 | sensor 输出分辨率 宽度 pixel | 是 |
height |
uint32_t |
0 | 4096 | 0 | sensor 输出分辨率 高度 pixel | 是 |
vin_ochn_buff_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
buffers_num |
uint32_t |
0 | - | 0 | cim/sif 下 ddr 的 buffer number,一般设置为 6 | 是 |
flags |
int64_t |
- | - | - | 一般在程序设置为: | 否 |
| hbn_buf_alloc_attr_t.flags = HB_MEM_USAGE_CPU_READ_OFTEN 逻辑或 | ||||||
| HB_MEM_USAGE_CPU_WRITE_OFTEN 逻辑或 | ||||||
| HB_MEM_USAGE_CACHED |
lpwm_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
enable |
uint32_t |
0 | - | 0 | 是否使能 LPWM | 否 |
lpwm_chn_attr_t lpwm_chn_attr[LPWM_CHN_NUM] |
- | - | - | - | LPWM channel 属性配置 | 否 |
| LPWM_CHN_NUM 值为 4 |
lpwm_chn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 | 输出 30hz,高电平 10us 参数 |
|---|---|---|---|---|---|---|---|
trigger_source |
uint32_t |
0 | 10 | 0 | 触发源选择 | 否 | |
| 0-3: pad_trigger_in,硬件 IO 输入 PPS | |||||||
| 4: enet_ptp_pps,预留 | |||||||
| 5: sw_trigger_in,软件触发 | |||||||
| 6: gps_trigger_in (TIME_SYNC2),硬件 IO 输入 PPS | |||||||
| 7: mcu_trigger_in (TIME_SYNC1), 硬件 IO 输入 PPS | |||||||
| 8: time_sync2_in (TIME_SYNC3),硬件 IO 输入 PPS | |||||||
| 9: time_sync3_in (TIME_SYNC4),硬件 IO 输入 PPS | |||||||
| 10: camera_1sec_pulse_out,预留 | |||||||
| 注:硬件 IO 对应的 pin 请在 pinlist 资料中查找。 | |||||||
trigger_mode |
uint32_t |
0 | 1 | 0 | 触发机制 (1- 外界硬件触发, 0- 内部软件触发 ) | 否 | |
| trigger_mode 设置为 0 时,自动设置为软件触发,可以不选择 trigger_source | |||||||
period |
uint32_t |
2 us | 1000000 us | 0 | 周期,实际生效的周期时间为 (period + 1)us | 否 | 33332 |
offset |
uint32_t |
0 | (1000000/period) us | 0 | 源触发 LPWM 后, LPWM 经过 offset(us) 再输出方波。 | 否 | 11 |
| 时间生效的时间为: (1/24) * (offset * 24 + 3) us 向下取整。 | |||||||
duty_time |
uint32_t |
0 | (4096/period) us | 0 | 有效高电平时间,实际生效的时间为 (duty_time + 1)us | 否 | 9 |
threshold |
uint32_t |
0 | 65535 us | 0 | 缓慢同步功能阈值 | 否 | 0 |
adjust_step |
uint32_t |
0 | 15 | 0 | 每次的调整时间 adjust_time = 2 ^ adjust_step | 否 | 0 |
5.2.7.4. ISP 参数
isp_cfg_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
isp_attr |
isp_attr_t |
· | · | · | ISP 基本属性 | 是 |
ochn_attr |
isp_ochn_attr_t |
· | · | · | ISP 输出通道属性 | 是 |
ichn_attr |
isp_ichn_attr_t |
· | · | · | ISP 输入通道属性 | 是 |
isp_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
input_mode |
uint32_t |
0 | 2 | 0 | 前级模块输入方式 0 - PASSTHROUGH_MODE 1 - MCM_MODE 2 - DDR_MODE 需要注意的是: input_mode 为 0 或者 1 时, sif 绑定到 isp 要用通道 1 。 input_mode 为 2 时, sif 下 drr 的功能必须打开, sif 绑定到 isp 要用通道 0 。 PASSTHROUGH_MODE 仅支持单路, MCM_MODE 最大支持四路。 |
是 |
sched_mode |
uint32_t |
0 | 2 | 0 | 图像处理优先级策略,暂时不支持 0 - ROUND_ROBIN 1 - FIXED_SEQUENCE 2 - FIFO |
否 |
tile_mode |
uint32_t |
0 | 1 | 0 | 是否开启 tile_mode 模式,当输入尺寸超过 4096 时必须开启 | 否 |
sensor_mode |
isp_sensor_mode_e |
0 | 2 | 0 | 对应的 sensor 模式 0 - ISP_NORMAL_M 1 - ISP_DOL2_M 2 - ISP_PWL_M |
是 |
crop |
common_rect_t |
· | · | · | 指对输入图像的 crop | 否 |
isp_ichn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
tpg_en |
cam_bool_e |
0 | 1 | 0 | 开启 tpg 功能,暂时不支持 | 否 |
width |
uint32_t |
0 | 5472 | 0 | 输入图像宽度 | 是 |
height |
uint32_t |
0 | 3076 | 0 | 输入图像高度 | 是 |
fmt |
frame_format_e |
FRM_FMT_RAW | FRM_FMT_RAW | 0 | FRM_FMT_NULL - 无效值 , FRM_FMT_RAW - RAW 格式 , FRM_FMT_NV12 - NV12 格式, FRM_FMT_UYVY - UYVY 格式, 目前只支持 RAW 格式 | 是 |
bit_width |
uint32_t |
8 | 12 | 0 | 输入图像数据的 bit 宽度 | 是 |
isp_ochn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
ddr_en |
cam_bool_e |
0 | 1 | 0 | 图像输出到 ddr | 是 |
out |
common_rect_t |
· | · | · | 输出图像的尺寸,暂时不支持后级 crop,因此配置无作用 | 否 |
fmt |
frame_format_e |
FRM_FMT_NV12 | FRM_FMT_NV12 | 0 | FRM_FMT_NULL - 无效值, FRM_FMT_RAW - RAW 格式, FRM_FMT_NV12 - NV12 格式, FRM_FMT_UYVY - UYVY 格式, 目前只支持 NV12 格式 | 是 |
bit_width |
uint32_t |
8 | 8 | 8 | 输出图像数据的 bit 宽度, 目前只支持 nv12 格式, 8bit | 是 |
5.2.7.5. VSE 参数
vse_ochn_type_e
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
VSE_DOWN_SCALE_4K |
- | - | - | - | downscale 输出通道,最大支持 4K | - |
VSE_DOWN_SCALE_1080P0 |
- | - | - | - | downscale 输出通道,最大支持 1080p-0 | - |
VSE_DOWN_SCALE_1080P1 |
- | - | - | - | downscale 输出通道,最大支持 1080p-1 | - |
VSE_DOWN_SCALE_720P0 |
- | - | - | - | downscale 输出通道,最大支持 720p-0 | - |
VSE_DOWN_SCALE_720P1 |
- | - | - | - | downscale 输出通道,最大支持 720p-1 | - |
VSE_UP_SCALE_4K |
- | - | - | - | upscale 输出通道,支持最多 4 倍放大,最大输出尺寸为 4096x3076 | - |
| 注意是 crop 后尺寸的 4 倍;宽、高放大比例可随意调整,总放大倍数为 4 | ||||||
VSE_OCHN_MAX |
vse_cfg_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
vse_attr |
vse_attr_t |
- | - | - | vse 基本属性 | 是 |
ochn_attr[VSE_OCHN_MAX] |
vse_ochn_attr_t |
- | - | - | vse 输出通道属性 | 是 |
ichn_attr |
vse_ichn_attr_t |
- | - | - | vse 输入通道属性 | 是 |
vse_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
fps |
frame_fps_ctrl_t |
- | - | 0 | 配置输入图像 src 的 fps,用于帧率控制 | 否 |
vse_ichn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
tpg_en |
cam_bool_e |
0 | 1 | 0 | 使能 tpg 功能,暂时不支持 | 否 |
width |
uint32_t |
0 | 5432 | 0 | 输入图像原始宽度 | 是 |
height |
uint32_t |
0 | 3076 | 0 | 输入图像原始高度 | 是 |
fmt |
frame_format_e |
FRM_FMT_NV12 |
FRM_FMT_NV12 |
0 | 图像格式,目前只支持 NV12 格式 | 是 |
bit_width |
uint32_t |
8 | 8 | 0 | 输入图像 bit 宽度 | 是 |
vse_ochn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
chn_en |
cam_bool_e |
0 | 1 | 0 | 使能通道 | 是 |
roi |
common_rect_t |
- | - | - | 对输出图像的 crop,值全为 0 表示禁用 | 否 |
target_w |
uint32_t |
0 | 受通道能力限制 | 0 | 输出图像的宽度,值为 0 表示禁用 scale | 是 |
target_h |
uint32_t |
0 | 受通道能力限制 | 0 | 输出图像的高度,值为 0 表示禁用 scale | 是 |
y_stride |
uint32_t |
0 | - | 0 | 输出图像 y 图层 stride,暂时不支持 | 否 |
uv_stride |
uint32_t |
0 | - | 0 | 输出图像 uv 图层 stride,暂时不支持 | 否 |
fmt |
frame_format_e |
FRM_FMT_NV12 |
FRM_FMT_NV12 |
0 | 输出图像格式,目前只支持 NV12 格式 | 是 |
bit_width |
uint32_t |
8 | 8 | 0 | 输出图像 bit 宽度 | 是 |
fps |
frame_fps_ctrl_t |
- | - | 0 | 配置输出图像 dst 的 fps,用于帧率控制 | 否 |
注意事项:
宽度、高度、格式等字段需符合硬件能力限制。
默认值为 0 时,可能会禁用相关功能。
5.2.7.6. GDC 参数
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 | 配置文件的物理地址的 shareid | 是 |
binary_offset |
uint64_t |
0 | - | 0 | 配置文件所在物理地址的 offset | 是 |
gdc_ichn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
input_width |
uint32_t |
0 | 4096 | 0 | 输入图像的宽度 | 是 |
input_height |
uint32_t |
0 | 2160 | 0 | 输入图像的高度 | 是 |
input_stride |
uint32_t |
0 | - | 0 | 输入图像的 stride | 是 |
n_in_one |
uint32_t |
0 | - | 0 | 回灌 n 帧合成 1 帧 | 是 |
gdc_ochn_attr_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
output_width |
uint32_t |
0 | - | 0 | 输出图像的宽度 | 是 |
output_height |
uint32_t |
0 | - | 0 | 输出图像的高度 | 是 |
output_stride |
uint32_t |
0 | - | 0 | 输出图像的 stride | 是 |
注意事项
GDC 输入输出宽高必须是偶数。
输入输出 stride 必须为 16 的倍数。
5.2.7.7. N2D 参数
n2d_command_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
| scale | - | - | - | - | 表示将进行 scale(缩放)处理 | 是 |
| overlay | - | - | - | - | 表示将进行 overlay(叠层)处理 | 是 |
| stitch | - | - | - | - | 表示将进行 stitch(拼接)处理 | 是 |
| csc | - | - | - | - | 表示将进行 csc(色彩空间转换)处理 | 是 |
n2d_config_t
| 名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
|---|---|---|---|---|---|---|
| ninputs | uint32_t | 0 | 4 | - | 输入通道数 | 是 |
| input_width[N2D_IN_MAX] | uint32_t | 0 | 4096 | - | n2d 输入通道宽度 | 是 |
| input_height[N2D_IN_MAX] | uint32_t | 0 | 2160 | - | n2d 输入通道高度 | 是 |
| input_stride[N2D_IN_MAX] | uint32_t | - | - | - | n2d 输入通道行跨 | 是 |
| output_width | uint32_t | 0 | 4096 | - | n2d 输出通道宽度 | 是 |
| output_height | uint32_t | 0 | 2160 | - | n2d 输出通道高度 | 是 |
| output_stride | uint32_t | - | - | - | n2d 输出通道行跨 | 是 |
| output_format | uint32_t | - | - | - | n2d 输出通道格式 | 是 |
| in_buffer_addr[N2D_IN_MAX][HBN_VIO_BUFFER_MAX_PLANES] | uint64_t | - | - | - | n2d 输入通道数据地址 | 是 |
| out_buffer_addr[HBN_VIO_BUFFER_MAX_PLANES] | uint64_t | - | - | - | n2d 输出通道数据地址 | 是 |
| command | n2d_command_t | - | - | - | 该配置文件进行的操作 | 是 |
5.2.8. 返回值说明
| 错误码 | 宏定义 | 描述 | 常见原因及解决方法 |
|---|---|---|---|
| 0 | HBN_STATUS_SUCESS | 成功 | |
| 1 | HBN_STATUS_INVALID_NODE | vnode 无效,找不到对应的 vnode | |
| 2 | HBN_STATUS_INVALID_NODETYPE | vnode 类型无效,找不到对应的 vnode | 对于 VSE, vnode 类型为 HB_VSE |
| 3 | HBN_STATUS_INVALID_HWID | 无效的硬件模块 id | 对于 VSE, hw_id 取值为 0 |
| 4 | HBN_STATUS_INVALID_CTXID | 无效的 context id | 可设置为 AUTO_ALLOC_ID,由 HNB 框架 自动分配 |
| 5 | HBN_STATUS_INVALID_OCHNID | 无效的输出通道 id | VSE 输出通道范围 [0,5] |
| 6 | HBN_STATUS_INVALID_ICHNID | 无效的输入通道 id | VSE 仅支持 1 个输入通道 |
| 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 | 无效的 flow,找不到对应的 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 | 无效的 node 文件描述符 | |
| 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 | 模块控制、调节参数(如 ISP 效果参数)设置失败 | |
| 35 | HBN_STATUS_GET_CONTROL_FAIL | 模块控制、调节参数(如 ISP 效果参数)获取失败 | |
| 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 | 无效的 buffer 索引 | |
| 45 | HBN_STATUS_NODE_QUE_ERROR | node 通道 queue buffer 错误 | |
| 46 | HBN_STATUS_FLUSH_FRAME_ERROR | node 通道帧 flush 错误 | |
| 47 | HBN_STATUS_INIT_BIND_ERROR | 用 json 解析并绑定时发生错误 | |
| 48 | HBN_STATUS_ADD_NODE_FAIL | 向 flow 中添加 node 失败 | |
| 49 | HBN_STATUS_WRONG_CONFIG_ID | 系统不支持的 node 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 层结构体大小与 kernel 层不匹配 | |
| 58 | HBN_STATUS_RGN_UNEXIST | 获取不到对应的 rgn 数据 | |
| 59 | HBN_STATUS_RGN_INVALID_OPERATION | rgn 操作无效 | |
| 60 | HBN_STATUS_RGN_OPEN_FILE_FAIL | rgn 模块打开文件失败 | |
| 128 | HBN_STATUS_ERR_UNKNOW | 未知错误 |