Skip to content

Latest commit

 

History

History
1545 lines (983 loc) · 47.1 KB

K230_DPU_API参考.md

File metadata and controls

1545 lines (983 loc) · 47.1 KB

K230 DPU API参考

cover

版权所有©2023北京嘉楠捷思信息技术有限公司

免责声明

您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。

由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。

商标声明

logo、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。

版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

目录

[TOC]

前言

概述

本文档主要介绍 K230 DPU 软件的使用,内容主要包括 DPU API 的使用及 demo 介绍。

读者对象

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师
  • 软件开发工程师

缩略词定义

简称 说明
DPU Depth Process Unit,深度处理单元
LCN Local Contrast Normalization,局部对比度归一化

修订记录

文档版本号 修改说明 修改者 日期
v1.0 初版 刘孙涛 2023/3/30
v1.1 增加了配置离线处理后的参考图的接口函数 kd_mpi_dpu_set_processed_ref_image; 增加了模块调试信息。 刘孙涛 2023/4/20
V1.2 增加了 buffer 可配置的功能 刘孙涛 2023/5/31

1. 概述

1.1 概述

DPU 主要负责 3D 结构光的深度计算,为 3D 人脸识别提供深度信息。

1.2 功能描述

1.2.1 绑定模式调用流程

图示, 示意图 描述已自动生成

1.2.2 非绑定模式调用流程

图示 描述已自动生成

2. API 参考

2.1 DPU 使用

该功能模块提供以下API:

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

【注意】

【举例】

【相关主题】

k_dpu_init_t

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 效率更高。
  • 模板图结构体中包含了从配置文件中解析出来的模板图的虚拟地址和物理地址,以及模板图的大小。

【举例】

【相关主题】

k_dpu_dev_param_t

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 再次加载长周期参数的时间。

【举例】

【相关主题】

k_dpu_dev_attr_t

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

【注意】

【举例】

【相关主题】

k_dpu_dev_attr_t

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 失败,其值参见错误码

【芯片差异】

【需求】

  • 头文件:mpi_dpu_api.h
  • 库文件:libdpu.a

【注意】

  • 此函数会依次释放 buffer 中的数据,先生成的结果先释放。目前 dpu buffer 为 3,使用完 kd_mpi_dpu_get_frame 获取的结果以后请尽快释放。

【举例】

【相关主题】

3. 数据类型

3.1 公共数据类型

本模块有如下数据类型:

3.1.1 k_dpu_init_t

【说明】

dpu 设备初始化结构体

【定义】

typedef struct {
    k_u32 start_num;
    k_u32 buffer_num;
} k_dpu_init_t;

【成员】

成员名称 描述
start_num dpu 设备起始帧号(即 dpu 计算出来的第一帧的帧号)。
buffer_num dpu 缓存 buffer 的数量,至少为 1

【注意事项】

【相关数据类型及接口】

kd_mpi_dpu_init

3.1.2 k_dpu_dev_param_t

【说明】

dpu 设备参数结构体。

【定义】

typedef struct
{
    k_dpu_long_parameter_t lpp;
    k_dpu_short_parameter_t spp;
} k_dpu_dev_param_t;

【成员】

成员名称 描述
lpp dpu 长周期参数结构体
spp dpu 短周期参数结构体

【注意事项】

  • 用户需要对长周期参数中的值进行改变时,应该使用虚拟地址成员变量。

【相关数据类型及接口】

k_dpu_long_parameter_t kd_mpi_dpu_parse_file

3.1.3 k_dpu_lcn_param_t

【说明】

散斑图通道参数结构体。

【定义】

typedef struct {
    k_u8 matching_length_left_p0;
    k_u8 matching_length_right_p0;

    float image_check_match_threshold;
    float depth_p1;
    float depth_p2;
    float depth_precision;
} k_dpu_lcn_param_t;

【成员】

成员名称 描述
matching_length_left_p0 粗搜索:视差计算向左搜索范围,取值:0~256,整型
matching_length_right_p0 粗搜索:视差计算向右搜索范围,取值:0~256,整型
image_check_match_threshold 散斑图质量评定:模板匹配阈值,取值范围:0.0~1.0,浮点型:0.01精度
depth_p1 视差转深度:深度数值计算系数p1,取值范围:0.0~50000.0,浮点型:0.01精度
depth_p2 视差转深度:深度数值计算系数p2,取值范围:-5.0~100.0,浮点型:0.01精度
depth_precision 视差转深度:深度数值精度(倍数),取值范围:0.0~100.0,浮点型:0.1精度

【注意事项】

  • 此通道结构体参数是设备结构体参数的子集,如果已经配置了设备参数,且通道参数和设备参数相同,可以不配置通道参数。

【相关数据类型及接口】

kd_mpi_dpu_parse_file

3.1.4 k_dpu_ir_param_t

【说明】

红外图通道参数结构体。

【定义】

typedef struct {
    float depth_k1;
    float depth_k2;
    float tz;
} k_dpu_ir_param_t;

【成员】

成员名称 描述
depth_k1 直接完全对应一个寄存器。三图对齐:深度数值计算系数k1,取值范围:2e-4~1e-2,浮点型:1e-5精度
depth_k2 直接完全对应一个寄存器。三图对齐:深度数值计算系数k2,取值范围:0.5~1.5,浮点型:0.001精度
tz 直接完全对应一个寄存器。三图对齐:投射器z方向偏移量(毫米),取值范围:-5.0~5.0,浮点型:0.001精度

【注意事项】

  • 此通道结构体参数是设备结构体参数的子集,如果已经配置了设备参数,且通道参数和设备参数相同,可以不配置通道参数。

【相关数据类型及接口】

kd_mpi_dpu_parse_file

3.1.5 k_dpu_user_space_t

【说明】

用户获取模板图结构体参数。

【定义】

typedef struct {
    k_bool used;
    k_u32 size;
    k_u64 phys_addr;
    void *virt_addr;
} k_dpu_user_space_t;

【成员】

成员名称 描述
used 用户不需要关注
size 用户获取的模板图的大小
phys_addr 模板图的物理地址
virt_addr 模板图的虚拟地址

【注意事项】

【相关数据类型及接口】

kd_mpi_dpu_parse_file

3.1.6 k_dpu_dev_attr_t

【说明】

配置 dpu 设备属性结构体。

【定义】

typedef struct {
    k_dpu_mode_e mode;
    k_bool tytz_temp_recfg;
    k_bool align_depth_recfg;
    k_bool ir_never_open;
    k_u32 param_valid;
    k_dpu_dev_param_t dev_param;
} k_dpu_dev_attr_t;

【成员】

成员名称 描述
mode dpu 运行模式,包括绑定模式和非绑定模式。
tytz_temp_recfg 是否更新加载 SAD 温度补偿参数和 TyTz 行补偿计算算数。当此标志位为 K_FALSE 时表明不更新,当此标志位为 K_TRUE 时表明更新。
align_depth_recfg 是否更新加载三图对齐/转深度计算参数。当此标志位为 K_FALSE 时表明不更新,当此标志位为 K_TRUE 时表明更新。
ir_never_open vb 池是在启动 dpu 设备时配置的,直到暂停 dpu 设备时释放。其大小在启动设备时进行初始化,因此在启动设备时就预留了深度/视差图、红外输出、质量检测、粗细列视差、初始行列式差共五部分的空间。用户可以在使用周期内通过 dev_param.spp.flag_align 来选择是否开启三图对齐。 如果在整个使用周期内都不会有红外图的输出,就不需要为红外图预留空间。配置为 K_TRUE 表明不需要为红外图输出预留空间,配置为 K_FALSE 表明需要为红外图输出预留空间。
param_valid 用户配置 dpu 设备属性时,将此成员设置为一个任意的非零值,当设备属性生效时,会在对应生效的帧的输出结果中返回该任意值。
dev_param dpu 设备参数结构体。

【注意事项】

  • 在首次配置 dpu 设备属性时,应该将 tytz_temp_recfg 和 align_depth_recfg 配置为 K_TRUE,以使 dpu 加载对应参数。

【相关数据类型及接口】

k_dpu_dev_param_t kd_mpi_dpu_set_dev_attr

3.1.7 k_dpu_chn_lcn_attr_t

【说明】

配置散斑图通道属性结构体

【定义】

typedef struct {
    k_u8 param_valid;
    k_s32 chn_num;
    k_dpu_lcn_param_t lcn_param;
} k_dpu_chn_lcn_attr_t;

【成员】

成员名称 描述
param_valid 用户配置散斑图通道属性时,将此成员设置为一个任意的非零值,当设备属性生效时,会在对应生效的帧的输出结果中返回该任意值。
chn_num 通道号。当前 dpu 设备一共有两个通道,用户可以将此通道号设为 0 或 1,散斑图通道将在对应通道中输入输出。如果开启了红外图通道,此通道号应该与红外图通道号不同。
lcn_param 散斑图通道参数。

【注意事项】

【相关数据类型及接口】

kd_mpi_dpu_set_chn_attr

3.1.8 k_dpu_chn_ir_attr_t

【说明】

配置红外图通道属性结构体

【定义】

typedef struct {
    k_u8 param_valid;
    k_s32 chn_num;
    k_dpu_ir_param_t ir_param;
} k_dpu_chn_ir_attr_t;

【成员】

成员名称 描述
param_valid 用户配置散斑图通道属性时,将此成员设置为一个任意的非零值,当设备属性生效时,会在对应生效的帧的输出结果中返回该任意值。
chn_num 通道号。当前 dpu 设备一共有两个通道,用户可以将此通道号设为 0 或 1,红外图通道将在对应通道中输入输出。此通道号应该与散斑图通道号不同。
ir_param 红外图通道参数。

【注意事项】

【相关数据类型及接口】

kd_mpi_dpu_set_chn_attr

3.1.9 k_dpu_chn_result_u

【说明】

获取 dpu 输出结果的联合体

【定义】

typedef union {
    k_dpu_chn_lcn_result_t lcn_result;
    k_dpu_chn_ir_result_t ir_result;
} k_dpu_chn_result_u;

【成员】

成员名称 描述
lcn_result 散斑图通道输出结果结构体。k_dpu_chn_lcn_result_t
ir_result 红外图通道输出结果结构体。k_dpu_chn_ir_result_t

【注意事项】

  • 用户选择哪个成员作为输出结果需要根据用户自己的配置来选择。在 kd_mpi_dpu_set_chn_attr 中用户配置了通道号和通道类型的对应关系。

【相关数据类型及接口】

k_dpu_chn_lcn_result_t k_dpu_chn_ir_result_t kd_mpi_dpu_get_frame

3.1.10 k_dpu_chn_lcn_result_t

【说明】

dpu 散斑图通道输出结果的结构体

【定义】

typedef struct {
    k_u32 time_ref;
    k_u64 pts;
    k_dpu_disp_out_t disp_out;
    k_dpu_depth_out_t depth_out;
    k_dpu_qlt_out_t qlt_out;
    k_dpu_param_flag_t flag;
} k_dpu_chn_lcn_result_t;

【成员】

成员名称 描述
pts 时间戳,绑定模式下有效。
disp_out 视差图输出结果结构体。
depth_out 深度图输出结果结构体。
qlt_out 质量检测输出结果结构体。包括质量检测结果、粗细_列视差(初始分辨率)结果、初始行列式差结果。
flag 此结构体用来标记用户配置的参数在哪一帧生效了。结构体中包含了 k_dpu_dev_attr_tk_dpu_chn_lcn_attr_tk_dpu_chn_ir_attr_t 中的 param_valid 变量。

【注意事项】

【相关数据类型及接口】

k_dpu_disp_out_t k_dpu_depth_out_t k_dpu_qlt_out_t kd_mpi_dpu_get_frame

3.1.11 k_dpu_chn_ir_result_t

【说明】

dpu 红外图通道输出结果的结构体

【定义】

typedef struct {
    k_u32 time_ref;
    k_u64 pts;
    k_dpu_ir_out_t ir_out;
    k_dpu_param_flag_t flag;
} k_dpu_chn_ir_result_t;

【成员】

成员名称 描述
pts 时间戳,绑定模式下有效。
ir_out 红外图输出结果结构体。
flag 此结构体用来标记用户配置的参数在哪一帧生效了。结构体中包含了 k_dpu_dev_attr_tk_dpu_chn_lcn_attr_tk_dpu_chn_ir_attr_t 中的 param_valid 变量。

【注意事项】

【相关数据类型及接口】

k_dpu_ir_out_t kd_mpi_dpu_get_frame

3.1.12 k_dpu_disp_out_t

【说明】

视差图输出结果的结构体

【定义】

typedef struct {
    k_bool valid;
    k_u32 length;
    k_u64 disp_phys_addr;
    k_u64 disp_virt_addr;
} k_dpu_disp_out_t;

【成员】

成员名称 描述
valid K_TRUE:表明输出结果有效; K_FALSE:表明输出结果无效。
length 输出结果长度。
disp_phys_addr 视差图输出结果物理地址。
disp_virt_addr 视差图输出结果虚拟地址。

【注意事项】

【相关数据类型及接口】

k_dpu_chn_lcn_result_t kd_mpi_dpu_get_frame

3.1.13 k_dpu_depth_out_t

【说明】

深度图输出结果的结构体

【定义】

typedef struct {
    k_bool valid;
    k_u32 length;
    k_u64 depth_phys_addr;
    k_u64 depth_virt_addr;
} k_dpu_depth_out_t;

【成员】

成员名称 描述
valid K_TRUE:表明输出结果有效; K_FALSE:表明输出结果无效。
length 输出结果长度。
depth_phys_addr 深度图输出结果物理地址。
depth_virt_addr 深度图输出结果虚拟地址。

【注意事项】

【相关数据类型及接口】

k_dpu_chn_lcn_result_t kd_mpi_dpu_get_frame

3.1.14 k_dpu_ir_out_t

【说明】

红外图输出结果的结构体

【定义】

typedef struct {
    k_bool valid;
    k_u32 length;
    k_u64 ir_phys_addr;
    k_u64 ir_virt_addr;
} k_dpu_ir_out_t;

【成员】

成员名称 描述
valid K_TRUE:表明输出结果有效; K_FALSE:表明输出结果无效。
length 输出结果长度。
ir_phys_addr 红外图输出结果物理地址。
ir_virt_addr 红外图输出结果虚拟地址。

【注意事项】

【相关数据类型及接口】

k_dpu_chn_ir_result_t kd_mpi_dpu_get_frame

3.1.15 k_dpu_qlt_out_t

【说明】

质量检测输出结果的结构体

【定义】

typedef struct {
    k_bool valid;
    k_u32 qlt_length;
    k_u32 sad_disp_length;
    k_u32 init_sad_disp_length;
    k_u64 qlt_phys_addr;
    k_u64 qlt_virt_addr;
    k_u64 sad_disp_phys_addr;
    k_u64 sad_disp_virt_addr;
    k_u64 init_sad_disp_phys_addr;
    k_u64 init_sad_disp_virt_addr;
} k_dpu_qlt_out_t;

【成员】

成员名称 描述
valid K_TRUE:表明输出结果有效; K_FALSE:表明输出结果无效。
qlt_length 质量检测输出结果长度。
sad_disp_length 粗细列视差(初始分辨率)输出结果长度。
init_sad_disp_length 初始行列式差输出结果长度。
qlt_phys_addr 质量检测输出结果物理地址。
qlt_virt_addr 质量检测输出结果虚拟地址。
sad_disp_phys_addr 粗细列视差(初始分辨率)输出结果物理地址。
sad_disp_virt_addr 粗细列视差(初始分辨率)输出结果虚拟地址。
init_sad_disp_phys_addr 初始行列式差输出结果物理地址。
init_sad_disp_virt_addr 初始行列式差输出结果虚拟地址。

【注意事项】

【相关数据类型及接口】

k_dpu_chn_lcn_result_t kd_mpi_dpu_get_frame

3.2 长短周期参数类型

本模块有如下数据类型:

3.2.1 k_dpu_long_parameter_t

【说明】

dpu 长周期参数结构体

【定义】

长周期参数成员过多,不在此展示,可以参见 K230_SDK 中 k_dpu_comm.h 中的结构体 k_dpu_long_parameter_t。

【注意事项】

  • 用户需要对长周期参数中的值进行改变时,应该使用虚拟地址成员变量。

【相关数据类型及接口】

k_dpu_dev_param_t kd_mpi_dpu_parse_file kd_mpi_dpu_set_dev_attr

3.2.2 k_dpu_short_parameter_t

【说明】

dpu 短周期参数结构体

【定义】

短周期参数成员过多,不在此展示,可以参见 K230_SDK 中 k_dpu_comm.h 中的结构体 k_dpu_short_parameter_t。

【注意事项】

【相关数据类型及接口】

k_dpu_dev_param_t kd_mpi_dpu_set_dev_attr kd_mpi_dpu_get_dev_attr

4. 错误码

4.1 dpu 错误码

表 41

错误代码 宏定义 描述
0xa0118001 K_ERR_DPU_INVALID_DEVID 无效的设备号
0xa0118002 K_ERR_DPU_INVALID_CHNID 无效的通道号
0xa0118003 K_ERR_DPU_ILLEGAL_PARAM 参数错误
0xa0118004 K_ERR_DPU_EXIST DPU 设备已经存在
0xa0118005 K_ERR_DPU_UNEXIST DPU 设备不存在
0xa0118006 K_ERR_DPU_NULL_PTR 空指针错误
0xa0118007 K_ERR_DPU_NOT_CONFIG 尚未配置 DPU
0xa0118008 K_ERR_DPU_NOT_SUPPORT 不支持的功能
0xa0118009 K_ERR_DPU_NOT_PERM 操作不允许
0xa011800c K_ERR_DPU_NOMEM 分配内存失败,如系统内存不足
0xa011800d K_ERR_DPU_NOBUF BUFF 不足
0xa011800e K_ERR_DPU_BUF_EMPTY BUFF 为空
0xa011800f K_ERR_DPU_BUF_FULL BUFF 已满
0xa0118010 K_ERR_DPU_NOTREADY 设备未就绪
0xa0118011 K_ERR_DPU_BADADDR 错误的地址
0xa0118012 K_ERR_DPU_BUSY DPU 处与忙状态

5. 调试信息

5.1 概述

调试信息采用了 proc 文件系统,可实时反映当前系统的运行状态,所记录的信息可供问题定位及分析时使用

【文件目录】

/proc/

【文件清单】

文件名称 描述
umap/dpu 记录当前 dpu 模块的一些信息

5.2 调试信息

【调试信息】

----------------------DPU Device Information----------------------
--------------------Pathway Switch Information--------------------
downScale: false align: false
align_ir: false align_rgbCoord: false
depthout: false denoise: false
median_p0: false median_denoise: false
median_post: false median_ir: false
check: false

----------------------Image Size Information----------------------
width_speckle: 0 height_speckle: 0
width_color: 0 height_color: 0
width_output: 0 height_output: 0

---------------------Result Length Information--------------------
sad_disp_x: 0 init_sad_disp_xy: 0
quanlity_check: 0 ir: 0
disp/depth: 0

----------------------------Frame Count---------------------------
from open to close, dpu has send 0 frames

【通路选择信息】

参数 描述
downScale 是否粗搜索降分辨率
align 是否三图对齐
align_ir 是否红外图对齐
align_rgbCoord 是否视差数值对齐到彩色图坐标系
depthout 是否输出深度图
denoise 是否视差图去噪
median_p0 是否粗搜索中值滤波
median_denoise 是否视差去噪内部中值滤波
median_post 是否视差后处理/三图对齐视差图中值滤波
median_ir 是否三图对齐红外图中值滤波
check 是否物体散斑图质量检测及初始搜索

【图像大小信息】

参数 描述
width_speckle 原始散斑图/红外图宽度像素数
height_speckle 原始散斑图/红外图高度像素数
width_color 原始彩色图宽度像素数
height_color 原始彩色图高度像素数
width_output 输出视差图/深度图/红外图宽度像素数
height_output 输出视差图/深度图/红外图高度像素数

【结果长度信息】

参数 描述
sad_disp_x 粗细列视差(初始分辨率)结果长度
init_sad_disp_xy 初始行列视差输出结果长度
quanlity_check 质量检测结果长度
ir 红外图结果长度
disp/depth 视差图/深度图结果长度

调测信息需要在 dpu 运行过程中查看,dpu 结束运行以后,当前所有信息会重置为零。

6. demo 描述

6.1 dpu demo 简介

dpu demo 实现了绑定和非绑定两种模式。在 msh 中输入 /bin/sample_dpu.elf 执行非绑定模式,运行十帧后结束;在 msh 中输入 /bin/sample_dpu.elf BOUND 执行绑定模式,以 vvi 作为模拟上级不停的输入数据给 dpu,dpu 计算完成后显示信息。

6.2 Feature 说明

demo 中包含了初始化和删除 dpu,从配置文件解析参数,配置设备属性,配置通道属性,启动和暂停设备,启动和暂停通道,输入输出数据,pipeline 绑定等功能。

6.2.1 非绑定模式

通过调用 API 完成 dpu 设备的初始化,从配置文件中解析参数,根据解析参数配置设备属性,调用 API 设置参考图和模板图,启动 dpu 设备,配置散斑图和红外图通道属性,启动通道,循环输入十帧并比对结果后停止,停止通道,停止设备,删除设备。

6.2.2 绑定模式

通过调用 API 完成 dpu 设备的初始化,从配置文件中解析参数,绑定 vvi 和 dpu 通道,根据解析参数配置设备属性,调用 API 设置参考图和模板图,启动 dpu 设备,配置散斑图和红外图通道属性,启动 dpu 通道,启动 vvi 通道,vvi 作为模拟上级数据不停的输入数据给 dpu。用户输入 e 以后停止通道和设备。

6.2.3 编译和执行

编译和执行可以参考文档《K230 SDK Demo使用指南》。