K230 DPU API参考
1. 概述
1.1 概述
DPU 主要负责 3D 结构光的深度计算,为 3D 人脸识别提供深度信息。
1.2 功能描述
1.2.1 绑定模式调用流程

1.2.2 非绑定模式调用流程

2. API 参考
2.1 DPU 使用
该功能模块提供以下API:
- kd_mpi_dpu_init
- kd_mpi_dpu_delete
- kd_mpi_dpu_parse_file
- kd_mpi_dpu_set_dev_attr
- kd_mpi_dpu_get_dev_attr
- kd_mpi_dpu_set_ref_image
- kd_mpi_dpu_set_processed_ref_image
- kd_mpi_dpu_set_template_image
- kd_mpi_dpu_start_dev
- kd_mpi_dpu_set_chn_attr
- kd_mpi_dpu_get_chn_attr
- kd_mpi_dpu_start_chn
- kd_mpi_dpu_stop_chn
- kd_mpi_dpu_send_frame
- kd_mpi_dpu_get_frame
- kd_mpi_dpu_release_frame
2.1.1 kd_mpi_dpu_init
【描述】
初始化 dpu 设备
【语法】
k_s32 kd_mpi_dpu_init(k_dpu_init_t *init);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| init | 初始化 dpu 设备的结构体指针。 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无。
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
无
【举例】
无
【相关主题】
2.1.2 kd_mpi_dpu_delete
【描述】
删除已经初始化的 dpu 设备。
【语法】
k_s32 kd_mpi_dpu_delete();
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| 无 | 无 | 无 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
需要在对 dpu 设备初始化以后才可以调用此函数 delete dpu。
【举例】
无
【相关主题】
无
2.1.3 kd_mpi_dpu_parse_file
【描述】
从 dpu 配置文件中解析 dpu 配置参数。
【语法】
k_s32 kd_mpi_dpu_parse_file(const k_char *param_path, k_dpu_dev_param_t *param, k_dpu_lcn_param_t *lcn_param, k_dpu_ir_param_t *ir_param, k_dpu_user_space_t *g_temp_space);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| param_path | 配置文件的路径 | 输入 |
| param | dpu 设备参数的结构体指针,从配置文件中解析出来的设备参数保存在此结构体中 | 输出 |
| lcn_param | lcn 通道参数的结构体指针,从配置文件中解析出来的通道参数保存在此结构体中。 | 输出 |
| ir_param | ir 通道参数的结构体指针,从配置文件中解析出来的通道参数保存在此结构体中。 | 输出 |
| g_temp_space | 模板图结构体指针,从配置文件中解析出来的模板图首地址保存在此结构体中。 | 输出 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- dpu 设备参数包括长周期参数和短周期参数。
- lcn_param 和 ir_param 这两个通道参数是 dpu 设备参数的子集,如果已经配置了 dpu 设备参数,可以忽略这两个通道参数。如果需要更改这两个通道参数结构体中的参数,既可以更改通道参数以后调用 kd_mpi_dpu_set_chn_attr 来使更改生效,也可以更改设备参数以后调用 kd_mpi_dpu_set_dev_attr 来使更改生效。如果只更改了通道参数,那么调用 kd_mpi_dpu_set_chn_attr 效率更高。
- 模板图结构体中包含了从配置文件中解析出来的模板图的虚拟地址和物理地址,以及模板图的大小。
【举例】
无
【相关主题】
2.1.4 kd_mpi_dpu_set_dev_attr
【描述】
配置 dpu 设备属性。
【语法】
k_s32 kd_mpi_dpu_set_dev_attr(k_dpu_dev_attr_t *attr);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| attr | dpu 设备属性 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 只有对 dpu 设备初始化以后才可以调用此函数配置 dpu 设备属性。
- 在首次配置 dpu 设备属性时,应该将 attr 中的 tytz_temp_recfg 和 align_depth_recfg 配置为 K_TRUE,以使 dpu 加载对应参数。后续更改 dpu 设备属性时,如果对应的长周期参数没有改变,将这两个成员配置为 K_FALSE,可以节省 dpu 再次加载长周期参数的时间。
【举例】
无
【相关主题】
2.1.5 kd_mpi_dpu_get_dev_attr
【描述】
获取 dpu 设备属性。
【语法】
k_s32 kd_mpi_dpu_set_dev_attr(k_dpu_dev_attr_t *attr);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| attr | dpu 设备属性 | 输出 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
无
【举例】
无
【相关主题】
2.1.6 kd_mpi_dpu_set_ref_image
【描述】
配置 dpu 参考图。
【语法】
k_s32 kd_mpi_dpu_set_ref_image(const k_char *ref_path);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| ref_path | 参考图路径 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 需要在配置 dpu 设备属性以后再调用此函数配置参考图。
【举例】
无
【相关主题】
无
2.1.7 kd_mpi_dpu_set_processed_ref_image
【描述】
配置离线处理后的 dpu 参考图。
【语法】
k_s32 kd_mpi_dpu_set_processed_ref_image(const k_char *ref_path);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| ref_path | 处理后的参考图路径 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 需要在配置 dpu 设备属性以后再调用此函数配置参考图,配置的参考图需要离线处理好,调用此函数可以比 kd_mpi_dpu_set_ref_image 节省约 70ms 时间。
【举例】
无
【相关主题】
无
2.1.8 kd_mpi_dpu_set_template_image
【描述】
配置 dpu 模板图
【语法】
k_s32 kd_mpi_dpu_set_template_image(k_dpu_user_space_t *temp_space);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| temp_space | 模板图结构体。 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 需要在配置 dpu 设备属性以后再调用此函数配置参考图。
- temp_space 需要在 kd_mpi_dpu_parse_file 时作为参数传入,以从配置文件中获取模板图信息。
【举例】
无
【相关主题】
k_dpu_user_space_t kd_mpi_dpu_parse_file
2.1.9 kd_mpi_dpu_start_dev
【描述】
启动 dpu 设备
【语法】
k_s32 kd_mpi_dpu_start_dev();
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| 无 | 无 | 无 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
无
【举例】
无
【相关主题】
无
2.1.10 kd_mpi_dpu_set_chn_attr
【描述】
配置 dpu 通道属性
【语法】
k_s32 kd_mpi_dpu_set_chn_attr(k_dpu_chn_lcn_attr_t *lcn_attr, k_dpu_chn_ir_attr_t *ir_attr);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| lcn_attr | 散斑图通道属性。 | 输入 |
| ir_attr | 红外图通道属性。 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 当前 dpu 设备一共有两个通道:0 和 1。通过配置 lcn_attr->chn_num 和 ir_attr->chn_num(如果开启了红外图通道) 来指明散斑图和红外图各自的输入输出通道。
- 在首次启动 dpu 设备 kd_mpi_dpu_start_dev 以后,应该调用此函数来配置通道属性,其中散斑图通道必须配置,红外图通道如果没有开启可以不配置(配置为 NULL)。
- 在运行过程中如果只需要更改某个通道的属性,可以只传入该通道的结构体参数,另一个通道的参数可以为 NULL。也可以同时传入两个通道的参数。如果两个通道的参数都为 NULL,则该次配置是不会生效的。
【举例】
无
【相关主题】
k_dpu_chn_lcn_attr_t k_dpu_chn_ir_attr_t
2.1.11 kd_mpi_dpu_get_chn_attr
【描述】
获取 dpu 通道属性。
【语法】
k_s32 kd_mpi_dpu_get_chn_attr(k_dpu_chn_lcn_attr_t *lcn_attr, k_dpu_chn_ir_attr_t *ir_attr);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| lcn_attr | 散斑图通道属性。 | 输出 |
| ir_attr | 红外图通道属性。 | 输出 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
无
【举例】
无
【相关主题】
k_dpu_chn_lcn_attr_t k_dpu_chn_ir_attr_t
2.1.12 kd_mpi_dpu_start_chn
【描述】
启动 dpu 通道
【语法】
k_s32 kd_mpi_dpu_start_chn(k_u32 chn_num);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| chn_num | 通道号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 通道号应该为 0 或 1。
【举例】
无
【相关主题】
无
2.1.13 kd_mpi_dpu_stop_chn
【描述】
停止 dpu 通道
【语法】
k_s32 kd_mpi_dpu_stop_chn(k_u32 chn_num);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| chn_num | 通道号 | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 通道号应为 0 或 1。
【举例】
无
【相关主题】
无
2.1.14 kd_mpi_dpu_send_frame
【描述】
在非绑定模式下,向 dpu 发送一帧数据。
【语法】
k_s32 kd_mpi_dpu_send_frame(k_u32 chn_num, k_u64 addr, k_s32 s32_millisec);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| chn_num | 通道号 | 输入 |
| addr | 发送数据的物理地址 | 输入 |
| s32_millisec | 等待时间。 当此参数设置为 -1 时,阻塞模式,直到发送成功才会返回; 当此参数设置为 0 时,非阻塞模式,发送成功立即返回零,发送失败立即返回其他值,具体失败信息参考 dpu 错误码; | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 如果同时开启了散斑图和红外图通路,需要红外图和散斑图严格交叉输入。
【举例】
无
【相关主题】
无
2.1.15 kd_mpi_dpu_get_frame
【描述】
从 dpu 获取一帧数据。
【语法】
k_s32 kd_mpi_dpu_get_frame(k_u32 chn_num, k_dpu_chn_result_u *result, k_s32 s32_millisec);
【参数】
| 参数名称 | 描述 | 输入/输出 |
|---|---|---|
| chn_num | 通道号 | 输入 |
| result | dpu 输出结果联合体,其成员变量分别是 k_dpu_chn_lcn_result_t 和 k_dpu_chn_ir_result_t 。选择哪个成员作为该通道的输出结果由用户根据 kd_mpi_dpu_set_chn_attr 的配置来自行决定。 | 输出 |
| s32_millisec | 等待时间。 当此参数设置为 -1 时,阻塞模式,直到获取成功才会返回; 当此参数设置为 0 时,非阻塞模式,获取成功立即返回零,获取失败立即返回其他值,具体失败信息参考 dpu 错误码; | 输入 |
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_dpu_api.h
- 库文件:libdpu.a
【注意】
- 如果同时开启了红外图和散斑图,注意及时取走两个通道的输出结果,否则 buffer 中的结果会溢出造成无法继续输入的情况。
【举例】
无
【相关主题】
k_dpu_chn_result_u k_dpu_chn_lcn_result_t k_dpu_chn_ir_result_t k_dpu_disp_out_t k_dpu_depth_out_t k_dpu_ir_out_t k_dpu_qlt_out_t
2.1.16 kd_mpi_dpu_release_frame
【描述】
在非绑定模式下,释放已经获取的结果。
【语法】
k_s32 kd_mpi_dpu_release_frame();
【参数】
无
【返回值】
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| 非0 | 失败,其值参见错误码 |
【芯片差异】
无
【需求】