10.3.1. ARM运行时API

10.3.1.1. 通用API说明

10.3.1.1.1. 数据类型与数据结构

10.3.1.1.1.1. HB_DSP_VERSION_MAJOR

#define HB_DSP_VERSION_MAJOR 0U

DSP主版本号信息。

10.3.1.1.1.2. HB_DSP_VERSION_MINOR

#define HB_DSP_VERSION_MINOR 3U

DSP次版本号信息。

10.3.1.1.1.3. HB_DSP_VERSION_PATCH

#define HB_DSP_VERSION_PATCH 3U

DSP补丁版本号信息。

10.3.1.1.1.4. HB_DSP_INITIALIZE_RPC_CTRL_PARAM

#define HB_DSP_INITIALIZE_RPC_CTRL_PARAM(param) \
  {                                             \
    (param)->dspCoreId = HB_DSP_CORE_ANY;       \
    (param)->rpcCmd = HB_DSP_RPC_CMD_BUTT;      \
    (param)->priority = 0;                      \
    (param)->customId = 0;                      \
    (param)->reserved1 = 0;                     \
    (param)->reserved2 = 0;                     \
  }

初始化控制参数。

10.3.1.1.1.5. hbDSPRpcCmd

typedef enum {
  // Naming rules: B means begin, E means end
  // [0x1, 0x400) reserved for framework
  HB_DSP_RPC_CMD_R_B = 0x0,
  HB_DSP_RPC_CMD_PING = HB_DSP_RPC_CMD_R_B,
  HB_DSP_RPC_CMD_R_E = 0x3ff,
  // [0x400, 0x800) for neural network operators
  HB_DSP_RPC_CMD_NN_B = 0x400,
  HB_DSP_RPC_CMD_NN_SOFTMAX = HB_DSP_RPC_CMD_NN_B,
  HB_DSP_RPC_CMD_NN_E = 0x7ff,
  // [0x800, 0xfff) for cv operators
  HB_DSP_RPC_CMD_CV_B = 0x800,
  HB_DSP_RPC_CMD_CV_E = 0xfff,
  // [0x1000, 0xffff] for custom purpose
  HB_DSP_RPC_CMD_BUTT = 0xffff
} hbDSPRpcCmd;

DSP RPC命令。

  • 成员

    成员名称

    描述

    HB_DSP_RPC_CMD_R_B

    DSP保留命令起始编码。

    HB_DSP_RPC_CMD_PING

    DSP Ping命令。

    HB_DSP_RPC_CMD_R_E

    DSP保留命令结束编码。

    HB_DSP_RPC_CMD_NN_B

    DSP NN命令起始编码。

    HB_DSP_RPC_CMD_NN_SOFTMAX

    DSP SoftMax命令。

    HB_DSP_RPC_CMD_NN_E

    DSP NN命令结束编码。

    HB_DSP_RPC_CMD_CV_B

    DSP CV命令起始编码。

    HB_DSP_RPC_CMD_CV_E

    DSP CV命令结束编码。

    HB_DSP_RPC_CMD_BUTT

    DSP 最大命令编码,获取注册命令信息。

10.3.1.1.1.6. hbDspRpcPriority

typedef enum {
  HB_DSP_RPC_PRIORITY_LOWEST = 0,
  HB_DSP_RPC_PRIORITY_HIGHEST = 255,
  HB_DSP_RPC_PRIORITY_PREEMP = HB_DSP_RPC_PRIORITY_HIGHEST
} hbDspRpcPriority;

DSP RPC任务优先级。

  • 成员

    成员名称

    描述

    HB_DSP_RPC_PRIORITY_LOWEST

    DSP RPC最低优先级。

    HB_DSP_RPC_PRIORITY_HIGHEST

    DSP RPC最高优先级。

    HB_DSP_RPC_PRIORITY_PREEMP

    DSP RPC抢占型任务。

10.3.1.1.1.7. hbDSPRpcCtrlParam

typedef struct {
  int32_t dspCoreId;
  int32_t rpcCmd;
  int32_t priority;
  int64_t customId;
  int32_t reserved1;
  int32_t reserved2;
} hbDSPRpcCtrlParam;

DSP RPC控制参数。

  • 成员

    成员名称

    描述

    dspCoreId

    DSP核ID;0为任意核,1为核0,2为核1。

    rpcCmd

    DSP任务命令。

    priority

    任务优先级,第一优先级。

    customId

    自定义ID,值越小,优先级越高,第二优先级。

    reserved1

    保留字段1。

    Reserved2

    保留字段2。

10.3.1.1.1.8. hbDSPTask_t

typedef void *hbDSPTask_t;

DSP任务指针。

10.3.1.1.2. API接口

10.3.1.1.2.1. hbDSPGetVersion

const char *hbDSPGetVersion();

获取DSP的版本信息。

  • 返回值

    • 返回DSP的版本相关信息。

10.3.1.1.2.2. hbDSPRpc

int32_t hbDSPRpc(hbDSPTask_t *task,
                 hbSysMem *input,
                 hbSysMem *output,
                 hbDSPRpcCtrlParam *rpcCtrlParam);

向DSP提交一个rpc任务。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] input 表示任务的输入内存。

    • [in/out] output 表示任务的输出内存。

    • [in] rpcCtrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.1.2.3. hbDSPWaitTaskDone

int32_t hbDSPWaitTaskDone(hbDSPTask_t task,
                          int32_t timeout);

等待任务运行结束。

  • 参数

    • [in] task 任务句柄。

    • [in] timeout 任务超时时间, 单位是ms。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

注解

  1. timeout > 0 表示等待时间;

  2. timeout = 0 表示一直等待,直到任务完成。

10.3.1.1.2.4. hbDSPReleaseTask

int32_t hbDSPReleaseTask(hbDSPTask_t task);

释放task handle,需要在 hbDSPWaitTaskDone 之后调用。

  • 参数

    • [in] task task handle。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.2. 错误码

typedef enum {
  HB_DSP_SUCCESS = 0,                             // 执行成功
  HB_DSP_INVALID_ARGUMENT = -7000001,             // 非法参数
  HB_DSP_MEM_ALLOC_FAIL = -7000002,               // 内存申请失败
  HB_DSP_TASK_TIME_OUT = -7000003,                // 任务超时
  HB_DSP_CMD_UNAVAILABLE = -7000004,              // 非法命令
  HB_DSP_DSP_UNAVAILABLE = -7000005,              // DSP不可用
  HB_DSP_TASK_RUN_FAIL = -7000006,                // 任务失败
  HB_DSP_OP_NOT_REGISTER = -7000007,              // DSP算子未注册
  HB_DSP_MMAP_FAIL = -7000008,                    // DSP内存映射失败
  HB_DSP_XV_ALLOC_FAIL = -7000009,                // DSP内存申请失败
  HB_DSP_XV_FREE_FAIL = -7000010,                 // DSP内存释放失败
  HB_DSP_IDMA_COPY_FAIL = -7000011,               // DSP DMA拷贝失败
  HB_DSP_IDMA_BAD_INIT = -7000012,                // DSP DMA初始化失败
  HB_DSP_TASK_NUMBER_EXCEED_LIMIT = -7000013,     // 任务数量超限
  HB_DSP_INVALID_SCALE = -7000014,                // DSP无效缩放比例
} hbDSPStatus;

10.3.1.3. 配置信息

环境变量:

HB_DSP_LOG_LEVEL                // 设置ARM侧日志等级,值为1、2、3、4、5、6,分别对应为Verbose、Debug、Info、Warning、Error、Always等级。
HB_DSP_VDSP_LOG_LEVEL           // 设置DSP侧日志等级,值为1、2、3、4、5,分别对应为Debug、Info、Warning、Error、Always等级。
HB_DSP_ENABLE_DIRECT_MODE       // 使能RPC直连模式,值为true、false,默认值为false,即中继模式。
HB_DSP_ENABLE_CORES             // 使能DSP核,0 for all(默认), 1 for vdsp0, 2 for vdsp1。
HB_DSP_RPMSG_RECV_TIMEOUT       // 设置RPMSG超时时间,默认值为0ms,表示不使用timeout。

注解

DSP侧日志可以通过如下步骤获取:

  • 配置环境变量,使能DSP日志输出

    export HB_DSP_ENABLE_CONFIG_VDSP=true
    export HB_DSP_WRITE_VDSP_LOG_TO_ARM=true
    
  • 启动日志监听服务

    # VDSP0的日志服务:
    /usr/bin/hrut_remoteproc_log -b dsp0
    # VDSP1的日志服务:
    /usr/bin/hrut_remoteproc_log -b dsp1
    

10.3.1.4. RPC模式

RPC包含两种模式:直连模式与中继模式。

  • 直连模式:不支持多进程,通信开销约200us。

  • 中继模式支持多进程,通信开销约300us。

直连模式配置方法如下:

  1. 直连模式与中继模式冲突,确保后台没有 dsp_relay_server 进程(如有,可kill dsp_relay_server && rm /var/run/vdsp_relay_*);

  2. export HB_DSP_ENABLE_DIRECT_MODE=true。

中继模式配置方法如下:

  1. unset HB_DSP_ENABLE_DIRECT_MODE;

  2. export PATH=$PATH:{path of dsp_relay_server},dsp_relay_server进程启动后常驻。

在使用中继模式运行可执行程序时,请先确保 PATH 路径下存在 dsp_relay_server 文件。若在运行代码时仍出现 异常情况,则意味着 dsp_relay_server 文件没有执行权限,修改权限的示例命令如下:

chmod -R 777 execute_file

10.3.1.5. CV侧API说明

10.3.1.5.1. 内置约束

此小结用来描述内置的参数和属性约束,辅助用户了解接口的隐含属性,减少试错成本。

10.3.1.5.1.1. 输入输出图片的尺寸约束

部分算子的输入输出有对应的比例关系,优先遵从算子内的约束。

约束名称

图片宽度最小值

32

图片高度最小值

16

图片宽度最大值

4096

图片高度最大值

2160

10.3.1.5.1.2. 对NV12图片格式的约束

当前部分算子提供了对NV12格式的支持,具体有哪些算子可以查看算子中的参数约束。其中NV12格式的图片需要保证遵循以下约束:

  1. 图片的宽和高均需为偶数;

  2. 图片使用的两个指针需分别指向Y区域数据和UV区域数据;

  3. UV区域的高在像素单位和字节单位上均需等于Y区域高的一半;

  4. UV区域的宽在像素单位上需等于Y区域宽的一半,在字节单位上需等于Y区域的宽。

若NV12图片没有遵循上述约束,则将会被认为是非法的NV12格式,虽然算子已经在内部对以上约束进行了错误检查,但仍可能会导致在算子执行过程中出现预期之外的情况, 请在使用NV12格式时充分保证输入输出的有效性。

10.3.1.5.2. 数据类型与数据结构

10.3.1.5.2.1. hbDSPImageFormat

typedef enum {
  HB_DSP_IMAGE_FORMAT_Y = 0,
  HB_DSP_IMAGE_FORMAT_NV12,     /*YYYYYYYY... UVUV...*/
  HB_DSP_IMAGE_FORMAT_RGB_P,    /*RRRR...GGGG...BBBB...*/
  HB_DSP_IMAGE_FORMAT_RGB,      /*RGBRGBRGB...(C3) or RGB_RGB_RGB_...(C4)*/
  HB_DSP_IMAGE_FORMAT_BGR_P,    /*BBBB...GGGG...RRRR*/
  HB_DSP_IMAGE_FORMAT_BGR,      /*BGRBGRBGR...(C3) or BGR_BGR_BGR_...(C4)*/
  HB_DSP_IMAGE_FORMAT_YUV444,   /*YUVYUVYUV... or YUV_YUV_YUV_...*/
  HB_DSP_IMAGE_FORMAT_YUV444_P, /*YYYY...UUUU...VVVV...*/
  HB_DSP_IMAGE_FORMAT_YUV420    /*YYYY...U...V...*/
} hbDSPImageFormat;

图片的格式枚举。

  • 成员

    成员名称

    描述

    HB_DSP_IMAGE_FORMAT_Y

    灰度格式。

    HB_DSP_IMAGE_FORMAT_NV12

    NV12格式,通道排布为YYYYYYYY… UVUV…。

    HB_DSP_IMAGE_FORMAT_RGB_P

    RGB_P格式,通道排布为RRRR…GGGG…BBBB…。

    HB_DSP_IMAGE_FORMAT_RGB

    RGB格式,通道排布为RGBRGBRGB…(C3) or RGB*RGB*RGB*…(C4)。

    HB_DSP_IMAGE_FORMAT_BGR_P

    BGR_P格式,通道排布为BBBB…GGGG…RRRR。

    HB_DSP_IMAGE_FORMAT_BGR

    BGR格式,通道排布为BGRBGRBGR…(C3) or BGR*BGR*BGR*…(C4)。

    HB_DSP_IMAGE_FORMAT_YUV444

    YUV_P格式,通道排布为YUVYUVYUV… or YUV*YUV*YUV*…。

    HB_DSP_IMAGE_FORMAT_YUV444_P

    YUV格式,通道排布为YYYY…UUUU…VVVV…。

    HB_DSP_IMAGE_FORMAT_YUV420

    YUV格式,通道排布为YYYY…U…V…。

10.3.1.5.2.2. hbDSPImageType

typedef enum {
  HB_DSP_IMAGE_TYPE_U8C1 = 0,
  HB_DSP_IMAGE_TYPE_U8C3,
  HB_DSP_IMAGE_TYPE_U8C4,
  HB_DSP_IMAGE_TYPE_S16C1,
  HB_DSP_IMAGE_TYPE_S16C2,
  HB_DSP_IMAGE_TYPE_S32C1,
  HB_DSP_IMAGE_TYPE_F32C1
} hbDSPImageType;

图片的类型枚举,图片的类型包括图片的深度和通道数。

  • 成员

    成员名称

    描述

    HB_DSP_IMAGE_TYPE_U8C1

    单通道uint_8类型。

    HB_DSP_IMAGE_TYPE_U8C3

    三通道uint_8类型。

    HB_DSP_IMAGE_TYPE_U8C4

    四通道uint_8类型。

    HB_DSP_IMAGE_TYPE_S16C1

    单通道int_16类型。

    HB_DSP_IMAGE_TYPE_S16C2

    双通道int_16类型。

    HB_DSP_IMAGE_TYPE_S32C1

    单通道int_32类型。

    HB_DSP_IMAGE_TYPE_F32C1

    单通道float_32类型。

10.3.1.5.2.3. hbDSPImage

typedef struct {
  uint8_t imageFormat;
  uint8_t imageType;
  int32_t width;
  int32_t height;
  int32_t stride;
  void *dataVirAddr;
  uint64_t dataPhyAddr;
  void *uvVirAddr;
  uint64_t uvPhyAddr;
  int32_t uvStride;
} hbDSPImage;

图片结构体。只支持BPU内存使用。

  • 成员

    成员名称

    描述

    imageFormat

    图片格式。

    imageType

    图片类型。

    width

    图片的像素宽度。

    height

    图片的像素高度。

    stride

    图片的像素偏移量,以字节数量表示。

    dataVirAddr

    图片在arm侧的逻辑地址。

    dataPhyAddr

    图片的物理地址。

    uvVirAddr

    图片格式为NV12时,uv数据逻辑地址。

    uvPhyAddr

    图片格式为NV12时,uv数据物理地址。

    uvStride

    图片格式为NV12时,uv数据的偏移量,以字节数量表示。

10.3.1.5.2.4. hbDSPRoi

typedef struct {
  int32_t left;
  int32_t top;
  int32_t right;
  int32_t bottom;
} hbDSPRoi;

图片ROI区域结构体,参数为ROI区域的四条边下标,编号从0开始。ROI区域的width等于right - left + 1,height = bottom - top + 1。

  • 成员

    成员名称

    描述

    left

    ROI区域的左边下标。

    top

    ROI区域的上边下标。

    right

    ROI区域的右边下标。

    bottom

    ROI区域的下边下标。

10.3.1.5.2.5. hbDSPRpcCmd

typedef enum {
  HB_DSP_RPC_CMD_CV_RESIZE = 0x800,
  HB_DSP_RPC_CMD_CV_CVT_COLOR = 0x801,
  HB_DSP_RPC_CMD_CV_THRESHOLD = 0x802,
  HB_DSP_RPC_CMD_CV_BILATERAL_FILTER = 0x803,
  HB_DSP_RPC_CMD_CV_BOX_FILTER = 0x804,
  HB_DSP_RPC_CMD_CV_GAUSSIAN_BLUR = 0x805,
  HB_DSP_RPC_CMD_CV_MEDIAN_BLUR = 0x806,
  HB_DSP_RPC_CMD_CV_SOBEL = 0x807,
  HB_DSP_RPC_CMD_CV_ERODE = 0x808,
  HB_DSP_RPC_CMD_CV_PYR_UP = 0x809,
  HB_DSP_RPC_CMD_CV_EQUALIZE_HIST = 0x80a,
  HB_DSP_RPC_CMD_CV_FILTER2D = 0x80b,
  HB_DSP_RPC_CMD_CV_SEP_FILTER2D = 0x80c,
  HB_DSP_RPC_CMD_CV_TRANSPOSE = 0x80d,
  HB_DSP_RPC_CMD_CV_PYR_DOWN = 0x80e,
  HB_DSP_RPC_CMD_CV_WARP_AFFINE = 0x80f,
  HB_DSP_RPC_CMD_CV_WARP_PERSPECTIVE = 0x810,
  HB_DSP_RPC_CMD_CV_FLIP = 0x811,
  HB_DSP_RPC_CMD_CV_DILATE = 0x812,
  HB_DSP_RPC_CMD_CV_INTEGRAL = 0x813,
  HB_DSP_RPC_CMD_CV_CANNY = 0x814,
  HB_DSP_RPC_CMD_CV_ROTATE = 0x815,
  HB_DSP_RPC_CMD_CV_CORNER_HARRIS = 0x816,
  HB_DSP_RPC_CMD_CV_ROI_RESIZE = 0x817,
  HB_DSP_RPC_CMD_CV_REMAP = 0x818,
} hbDSPCvCmd;

调用CV算子的RPC命令。

  • 成员

    成员名称

    描述

    HB_DSP_RPC_CMD_CV_RESIZE

    DSP CV Resize命令。

    HB_DSP_RPC_CMD_CV_CVT_COLOR

    DSP CV CvtColor命令。

    HB_DSP_RPC_CMD_CV_THRESHOLD

    DSP CV Threshold命令。

    HB_DSP_RPC_CMD_CV_BILATERAL_FILTER

    DSP CV BilateralFilter命令。

    HB_DSP_RPC_CMD_CV_BOX_FILTER

    DSP CV Box Filter命令。

    HB_DSP_RPC_CMD_CV_GAUSSIAN_BLUR

    DSP CV GaussianBlur命令。

    HB_DSP_RPC_CMD_CV_MEDIAN_BLUR

    DSP CV MedianBlur命令。

    HB_DSP_RPC_CMD_CV_SOBEL

    DSP CV Sobel命令。

    HB_DSP_RPC_CMD_CV_ERODE

    DSP CV Erode命令。

    HB_DSP_RPC_CMD_CV_PYR_UP

    DSP CV PyrUp命令。

    HB_DSP_RPC_CMD_CV_EQUALIZE_HIST

    DSP CV Equalize命令。

    HB_DSP_RPC_CMD_CV_FILTER2D

    DSP CV Filter2D命令。

    HB_DSP_RPC_CMD_CV_SEP_FILTER2D

    DSP CV SepFilter2D命令。

    HB_DSP_RPC_CMD_CV_TRANSPOSE

    DSP CV Transpose命令。

    HB_DSP_RPC_CMD_CV_PYR_DOWN

    DSP CV PyrDown命令。

    HB_DSP_RPC_CMD_CV_WARP_AFFINE

    DSP CV WarpAffine命令。

    HB_DSP_RPC_CMD_CV_WARP_PERSPECTIVE

    DSP CV WarpPerspective命令。

    HB_DSP_RPC_CMD_CV_FLIP

    DSP CV Flip命令。

    HB_DSP_RPC_CMD_CV_DILATE

    DSP CV Dilate命令。

    HB_DSP_RPC_CMD_CV_INTEGRAL

    DSP CV Intergral命令。

    HB_DSP_RPC_CMD_CV_CANNY

    DSP CV Canny命令。

    HB_DSP_RPC_CMD_CV_ROTATE

    DSP CV Rotate命令。

    HB_DSP_RPC_CMD_CV_CORNER_HARRIS

    DSP CV CornerHarris命令。

    HB_DSP_RPC_CMD_CV_ROI_RESIZE

    DSP CV RoiResize命令。

    HB_DSP_RPC_CMD_CV_REMAP

    DSP CV Remap命令。

10.3.1.5.2.6. hbDSPCVInterpolationFlags

typedef enum {
  HB_CV_INTER_NEAREST = 0,
  HB_CV_INTER_LINEAR = 1,
} hbDSPCVInterpolationFlags;

插值方式。

  • 成员

    成员名称

    描述

    HB_CV_INTER_NEAREST

    最邻近插值。

    HB_CV_INTER_LINEAR

    双线性插值。

10.3.1.5.2.7. hbDSPCVBorderTypes

typedef enum {
  HB_CV_BORDER_CONSTANT = 0,
  HB_CV_BORDER_REPLICATE = 1,
} hbDSPCVBorderTypes;

填充类型。

  • 成员

    成员名称

    描述

    HB_CV_BORDER_CONSTANT

    值填充,iiiiii|abcdefgh|iiiiiii

    HB_CV_BORDER_REPLICATE

    边界复制填充,aaaaaa|abcdefgh|hhhhhhh

10.3.1.5.2.8. hbDSPCVThresholdType

typedef enum
{
  HB_CV_THRESH_TOZERO = 3
} hbDSPCVThresholdType;

Threshold类型。

  • 成员

    成员名称

    描述

    HB_CV_THRESH_TOZERO

    阈值类型,if(src > thresh) dst = src else dst = 0。

10.3.1.5.2.9. hbDSPCVCannyNorm

typedef enum {
  HB_CV_NORM_L1 = 1,
} hbDSPCVCannyNorm;

Canny norm参数。

  • 成员

    成员名称

    描述

    HB_CV_NORM_L1

    Canny参数,NORM_L1。

10.3.1.5.2.10. hbDSPRotateDegree

typedef enum {
  HB_CV_ROTATE_90_CLOCKWISE = 0,
  HB_CV_ROTATE_180_CLOCKWISE,
  HB_CV_ROTATE_90_COUNTERCLOCKWISE,
} hbDSPRotateDegree;

Rotate degree参数。

  • 成员

    成员名称

    描述

    HB_CV_ROTATE_90_CLOCKWISE

    Rotate参数,顺时针旋转90度。

    HB_CV_ROTATE_180_CLOCKWISE

    Rotate参数,顺时针旋转180度。

    HB_CV_ROTATE_90_COUNTERCLOCKWISE

    Rotate参数,逆时针旋转90度。

10.3.1.5.2.11. hbDSPResizeParam

typedef struct { int8_t interpolation; } hbDSPResizeParam;

Resize算子参数。

  • 成员

    成员名称

    描述

    interpolation

    Resize 中的插值类型,只支持hbDSPCVInterpolationFlags中的类型。

10.3.1.5.2.12. hbDSPWarpAffineParam

typedef struct {
  float transformMatrix[6];
  int8_t interpolation;
  int8_t borderType;
  uint8_t borderValue;
} hbDSPWarpAffineParam;

WarpAffine算子参数。

  • 成员

    成员名称

    描述

    transformMatrix[6]

    WarpAffine 逆转换矩阵(dst->src),2X3矩阵。

    interpolation

    WarpAffine 中的插值类型,只支持 hbDSPCVInterpolationFlags 中的类型。

    borderType

    保留参数。

    borderValue

    保留参数。

10.3.1.5.2.13. hbDSPWarpPerspectiveParam

typedef struct {
  float transformMatrix[9];
  int8_t interpolation;
  int8_t borderType;
  uint8_t borderValue;
} hbDSPWarpPerspectiveParam;

WarpPerspective算子参数。

  • 成员

    成员名称

    描述

    transformMatrix[9]

    WarpPerspective 转换矩阵,3X3矩阵。

    interpolation

    WarpPerspective 中的插值类型,支持 hbDSPCVInterpolationFlags 中的类型。

    borderType

    保留参数。

    borderValue

    保留参数。

10.3.1.5.2.14. hbDSPFlipParam

typedef struct {
  uint8_t flipMode;
} hbDSPFlipParam;

Flip算子参数。

  • 成员

    成员名称

    描述

    flipMode

    翻转参数,0为绕 X 轴翻转,大于0的正整数为绕 Y 轴翻转。

10.3.1.5.2.15. hbDSPThresholdParam

typedef struct {
  float64_t thresh;
  float64_t maxVal;
  int8_t type;
} hbDSPThresholdParam;

Threshold算子参数。

  • 成员

    成员名称

    描述

    thresh

    阈值,值小于等于255。

    maxVal

    保留参数。

    type

    阈值类型,保留参数。

10.3.1.5.2.16. hbDSPBilateralFilterParam

typedef struct {
  float64_t sigmaColor;
  float64_t sigmaSpace;
  int8_t kernelSize;
  int8_t borderType;
} hbDSPBilateralFilterParam;

BilateralFilter算子参数。

  • 成员

    成员名称

    描述

    sigmaColor

    颜色空间中的sigma滤波参数。

    sigmaSpace

    坐标空间中的sigma滤波参数。

    kernelSize

    滤波核大小,支持大小为 5 或者 9 。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

10.3.1.5.2.17. hbDSPBoxFilterParam

typedef struct {
  int8_t kernelHeight;
  int8_t kernelWidth;
  int8_t pointLocX;
  int8_t pointLocY;
  int8_t normalize;
  int8_t borderType;
} hbDSPBoxFilterParam;

BoxFilter算子参数。

  • 成员

    成员名称

    描述

    kernelHeight

    滤波核的高度,值为[3,31)间的奇数,核高和宽相等。

    kernelWidth

    滤波核的宽度,值为[3,31)间的奇数,核宽和高相等。

    pointLocX

    保留参数。

    pointLocY

    保留参数。

    normalize

    保留参数。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

10.3.1.5.2.18. hbDSPGaussianBlurParam

typedef struct {
  float64_t sigmaX;
  float64_t sigmaY;
  int8_t kernelSize;
  int8_t borderType;
} hbDSPGaussianBlurParam;

GaussianBlur算子参数。

  • 成员

    成员名称

    描述

    sigmaX

    保留参数。

    sigmaY

    保留参数。

    kernelSize

    滤波核的尺寸,支持 3X3 和 5X5 的尺寸。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

10.3.1.5.2.19. hbDSPMedianBlurParam

typedef struct { int8_t maskWidth; } hbDSPMedianBlurParam;

MedianBlur算子参数。

  • 成员

    成员名称

    描述

    maskWidth

    滤波核大小,需要为大于 1 小于 9 的奇数。

10.3.1.5.2.20. hbDSPSobelParam

typedef struct {
  float64_t scale;
  float64_t delta;
  int8_t dx;
  int8_t dy;
  int8_t kernelSize;
  int8_t borderType;
} hbDSPSobelParam;

Sobel算子参数。

  • 成员

    成员名称

    描述

    scale

    保留参数。

    delta

    保留参数。

    dx

    导数 X 的阶。

    dy

    导数 Y 的阶。

    kernelSize

    sobel扩展核大小,支持 3 和 5 。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

10.3.1.5.2.21. hbDSPErodeParam

typedef struct {
  int8_t pointLocX;
  int8_t pointLocY;
  int8_t iterations;
  int8_t borderType;
  uint8_t borderValue;
} hbDSPErodeParam;

Erode算子参数。

  • 成员

    成员名称

    描述

    pointLocX

    保留参数 。

    pointLocY

    保留参数 。

    iterations

    保留参数 。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

    borderValue

    保留参数。

10.3.1.5.2.22. hbDSPDilateParam

typedef struct {
  int8_t pointLocX;
  int8_t pointLocY;
  int8_t iterations;
  int8_t borderType;
  uint8_t borderValue;
} hbDSPDilateParam;

Dilate算子参数。

  • 成员

    成员名称

    描述

    pointLocX

    保留参数。

    pointLocY

    保留参数。

    iterations

    保留参数。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

    borderValue

    保留参数。

10.3.1.5.2.23. hbDSPFilter2DParam

typedef struct {
  float64_t delta;
  int8_t pointLocX;
  int8_t pointLocY;
  int8_t borderType;
} hbDSPFilter2DParam;

Filter2D算子参数。

  • 成员

    成员名称

    描述

    delta

    保留参数。

    pointLocX

    保留参数。

    pointLocY

    保留参数。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

10.3.1.5.2.24. hbDSPSepFilter2DParam

typedef struct {
  int32_t delta;
  int8_t pointLocX;
  int8_t pointLocY;
  int8_t borderType;
} hbDSPSepFilter2DParam;

SepFilter2D算子参数。

  • 成员

    成员名称

    描述

    delta

    保留参数。

    pointLocX

    保留参数。

    pointLocY

    保留参数。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

10.3.1.5.2.25. hbDSPCannyParam

typedef struct {
    uint32_t     threshold1;
    uint32_t     threshold2;
    int8_t       kernelSize;
    int8_t       norm;
    int8_t       overlap;
    int8_t       borderType;
} hbDSPCannyParam;

Canny算子参数。

  • 成员

    成员名称

    描述

    threshold1

    低位阈值。

    threshold2

    高位阈值。

    kernelSize

    核尺寸,支持 3X3, 5X5 和 7x7。

    norm

    支持 hbDSPCVCannyNorm 中的类型。

    overlap

    保留参数。

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

10.3.1.5.2.26. hbDSPRotateParam

typedef struct {
    int8_t rotateCode;
} hbDSPRotateParam;

Rotate算子参数。

  • 成员

    成员名称

    描述

    rotateCode

    旋转角度,支持 hbDSPRotateDegree 中的类型。

10.3.1.5.2.27. hbDSPCornerHarrisParam

typedef struct {
    int8_t borderType;
    int8_t kernelSize;
    uint32_t blockSize;
    float sensitivity;
} hbDSPCornerHarrisParam;

CornerHarris算子参数。

  • 成员

    成员名称

    描述

    borderType

    填充类型,支持 hbDSPCVBorderTypes 中的类型。

    kernelSize

    核尺寸,支持 3X3, 5X5 和 7x7。

    blockSize

    邻域尺寸,取值为[3, 27]内的奇数

    sensitivity

    检测器自由参数,推荐取值范围为[0.04, 0.06]

10.3.1.5.2.28. hbDSPRoiResizeParam

typedef struct {
  int8_t interpolation;
  uint8_t paddingValue[4];
} hbDSPRoiResizeParam;

RoiResize算子参数。

  • 成员

    成员名称

    描述

    interpolation

    插值类型,支持 hbDSPCVInterpolationFlags 中的类型。

    paddingValue[4]

    Padding 值,每个通道对应一个值,NV12使用三个通道。

10.3.1.5.2.29. hbDSPRemapParam

typedef struct {
  int8_t interpolation;
  int8_t borderType;
  uint8_t borderValue;
} hbDSPRemapParam;

Remap算子参数。

  • 成员

    成员名称

    描述

    interpolation

    Remap 中的插值类型,支持 hbDSPCVInterpolationFlags 中的类型。

    borderType

    保留参数。

    borderValue

    保留参数。

10.3.1.5.3. CV API接口

10.3.1.5.3.1. hbDSPResize

int32_t hbDSPResize(hbDSPTask_t *task,
                    hbDSPImage *dstImg,
                    hbDSPImage *srcImg,
                    hbDSPResizeParam *resizeParam,
                    hbDSPRpcCtrlParam *ctrlParam);

调用Resize API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type和format与输入图像一致,图像尺寸可由输入图像和缩放比例计算得出。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] resizeParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.2. hbDSPCvtColor

int32_t hbDSPCvtColor(hbDSPTask_t *task,
                      hbDSPImage *dstImg,
                      hbDSPImage *srcImg,
                      hbDSPRpcCtrlParam *ctrlParam);

调用 CvtColor API,支持RGB转换为GRAY,RGB与BGR转换为NV12。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,大小与输入图像一致,type支持U8C1,format支持Y和nv12。

    • [in] srcImg 输入图像,type支持U8C3,format支持RGB和BGR。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

  • 转换支持表

    srcFmtdstFmt

    gray

    nv12

    rgb_p

    rgb

    bgr_p

    bgr

    yuv_p

    yuv

    gray

    N

    N

    N

    N

    N

    N

    N

    N

    nv12

    N

    N

    N

    N

    N

    N

    N

    N

    rgb_p

    N

    N

    N

    N

    N

    N

    N

    N

    rgb

    Y

    Y

    N

    N

    N

    N

    N

    N

    bgr_p

    N

    N

    N

    N

    N

    N

    N

    N

    bgr

    N

    Y

    N

    N

    N

    N

    N

    N

    yuv_p

    N

    N

    N

    N

    N

    N

    N

    N

    yuv

    N

    N

    N

    N

    N

    N

    N

    N

10.3.1.5.3.3. hbDSPWarpAffine

int32_t hbDSPWarpAffine(hbDSPTask_t *task,
                        hbDSPImage *dstImg,
                        hbDSPImage *srcImg,
                        hbDSPWarpAffineParam *warpAffineParam,
                        hbDSPRpcCtrlParam *ctrlParam);

调用 WarpAffine API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type和format与输入图像一致,尺寸大小由转换矩阵计算得出。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] warpAffineParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.4. hbDSPWarpPerspective

int32_t hbDSPWarpPerspective(hbDSPTask_t *task,
                             hbDSPImage *dstImg,
                             hbDSPImage *srcImg,
                             hbDSPWarpPerspectiveParam *warpPerspectiveParam,
                             hbDSPRpcCtrlParam *ctrlParam);

调用 WarpPerspective API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和size与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] warpPerspectiveParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.5. hbDSPThreshold

int32_t hbDSPThreshold(hbDSPTask_t *task,
                       hbDSPImage *dstImg,
                       hbDSPImage *srcImg,
                       hbDSPThresholdParam *thresholdParam,
                       hbDSPRpcCtrlParam *ctrlParam);

调用 Threshold API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,支持U8C1,format Y,大小和输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] thresholdParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.6. hbDSPBilateralFilter

int32_t hbDSPBilateralFilter(hbDSPTask_t *task,
                             hbDSPImage *dstImg,
                             hbDSPImage *srcImg,
                             hbDSPBilateralFilterParam *bilateralParam,
                             hbDSPRpcCtrlParam *ctrlParam);

调用 bilateralFilter API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] bilateralParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.7. hbDSPBoxFilter

int32_t hbDSPBoxFilter(hbDSPTask_t *task,
                       hbDSPImage *dstImg,
                       hbDSPImage *srcImg,
                       hbDSPBoxFilterParam *boxParam,
                       hbDSPRpcCtrlParam *ctrlParam);

调用 boxFilter API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] boxParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.8. hbDSPGaussianBlur

int32_t hbDSPGaussianBlur(hbDSPTask_t *task,
                          hbDSPImage *dstImg,
                          hbDSPImage *srcImg,
                          hbDSPGaussianBlurParam *gaussianParam,
                          hbDSPRpcCtrlParam *ctrlParam);

调用 gaussianBlur API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] gaussianParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.9. hbDSPMedianBlur

int32_t hbDSPMedianBlur(hbDSPTask_t *task,
                        hbDSPImage *dstImg,
                        hbDSPImage *srcImg,
                        hbDSPMedianBlurParam *medianParam,
                        hbDSPRpcCtrlParam *ctrlParam);

调用 medianBlur API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] medianParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.10. hbDSPSobel

int32_t hbDSPSobel(hbDSPTask_t *task,
                   hbDSPImage *dstImg,
                   hbDSPImage *srcImg,
                   hbDSPSobelParam *sobelParam,
                   hbDSPRpcCtrlParam *ctrlParam);

调用 Sobel API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,format和大小与输入图像一致,type支持S16C1。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] sobelParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.11. hbDSPErode

int32_t hbDSPErode(hbDSPTask_t *task,
                   hbDSPImage *dstImg,
                   hbDSPImage *srcImg,
                   hbDSPImage *krnImg,
                   hbDSPErodeParam *erodeParam,
                   hbDSPRpcCtrlParam *ctrlParam);

调用 Erode API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] krnImg 算子处理核,type支持U8C1,format支持Y,宽和高为小于等于9的奇数。

    • [in] erodeParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.12. hbDSPDilate

int32_t hbDSPDilate(hbDSPTask_t *task,
                    hbDSPImage *dstImg,
                    hbDSPImage *srcImg,
                    hbDSPImage *krnImg,
                    hbDSPDilateParam *dilateParam,
                    hbDSPRpcCtrlParam *ctrlParam);

调用 Dilate API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] krnImg 算子处理核,type支持U8C1,format支持Y,宽和高为小于等于9的奇数。

    • [in] dilateParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.13. hbDSPPyrUp

int32_t hbDSPPyrUp(hbDSPTask_t *task,
                   hbDSPImage *dstImg,
                   hbDSPImage *srcImg,
                   hbDSPRpcCtrlParam *ctrlParam);

调用 PyrUp API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type和format与输入图像一致,其长和宽均为输入图像的两倍。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.14. hbDSPEqualizeHist

int32_t hbDSPEqualizeHist(hbDSPTask_t *task,
                          hbDSPImage *dstImg,
                          hbDSPImage *srcImg,
                          hbDSPRpcCtrlParam *ctrlParam);

调用 EqualizeHist API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.15. hbDSPFilter2D

int32_t hbDSPFilter2D(hbDSPTask_t *task,
                      hbDSPImage *dstImg,
                      hbDSPImage *srcImg,
                      hbDSPImage *krnImg,
                      hbDSPFilter2DParam *filter2DParam,
                      hbDSPRpcCtrlParam *ctrlParam);

调用 Filter2D API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] krnImg 算子处理核,type支持F32C1,format支持Y,尺寸为小于等于9的正奇数。

    • [in] filter2DParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.16. hbDSPSepFilter2D

int32_t hbDSPSepFilter2D(hbDSPTask_t *task,
                         hbDSPImage *dstImg,
                         hbDSPImage *srcImg,
                         hbDSPImage *krnXImg,
                         hbDSPImage *krnYImg,
                         hbDSPSepFilter2DParam *sepFilter2DParam,
                         hbDSPRpcCtrlParam *ctrlParam);

调用 SepFilter2D API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] krnXImg 算子每行滤波系数,type支持F32C1,format支持Y,大小为1xN,N为小于等于9的正奇数。

    • [in] krnYImg 算子每列滤波系数,type支持F32C1,format支持Y,大小为Nx1,N为小于等于9的正奇数。

    • [in] sepFilter2DParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.17. hbDSPTranspose

int32_t hbDSPTranspose(hbDSPTask_t *task,
                       hbDSPImage *dstImg,
                       hbDSPImage *srcImg,
                       hbDSPRpcCtrlParam *ctrlParam);

调用 Transpose API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type与format与输入图像一致,其width等于输入图像的height,height等于输入图像的width。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.18. hbDSPPyrDown

int32_t hbDSPPyrDown(hbDSPTask_t *task,
                     hbDSPImage *dstImg,
                     hbDSPImage *srcImg,
                     hbDSPRpcCtrlParam *ctrlParam);

调用 PyrDown API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type与format与输入图像一致,其width为输入图像width的一半(上取整),其height为输入图像height的一半(上取整)。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.19. hbDSPFlip

int32_t hbDSPFlip(hbDSPTask_t *task,
                  hbDSPImage *dstImg,
                  hbDSPImage *srcImg,
                  hbDSPFlipParam *flipParam,
                  hbDSPRpcCtrlParam *ctrlParam);

调用 Flip API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] flipParam 算子参数,参数中值为0表示沿x轴翻转,值为正整数表示沿y轴翻转。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.20. hbDSPIntegral

int32_t hbDSPIntegral(hbDSPTask_t *task,
                      hbDSPImage *dstImg,
                      hbDSPImage *srcImg,
                      hbDSPRpcCtrlParam *ctrlParam);

调用 Integral API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,format与输入图像一致,type支持S32C1,其width为输入图像的width加一,其height为输入图像的height加一。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.21. hbDSPCanny

int32_t hbDSPCanny(hbDSPTask_t *task,
                   hbDSPImage *dstImg,
                   hbDSPImage *srcImg,
                   hbDSPCannyParam *cannyParam,
                   hbDSPRpcCtrlParam *ctrlParam);

调用 Canny API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type、format和大小与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] cannyParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.22. hbDSPRotate

int32_t hbDSPRotate(hbDSPTask_t *task,
                    hbDSPImage *dstImg,
                    hbDSPImage *srcImg,
                    hbDSPRotateParam *rotateParam,
                    hbDSPRpcCtrlParam *ctrlParam);

调用 Rotate API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,type和format与输入图像一致,其大小根据旋转角度与输入图像的大小决定。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] rotateParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.23. hbDSPCornerHarris

int32_t hbDSPCornerHarris(hbDSPTask_t *task,
                          hbDSPImage *dstImg,
                          hbDSPImage *srcImg,
                          hbDSPCornerHarrisParam *cornerHarrisParam,
                          hbDSPRpcCtrlParam *ctrlParam);

调用 CornerHarris API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,format与输入图像一致,type支持S32C1,大小与输入一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y。

    • [in] cornerHarrisParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.24. hbDSPRoiResize

int32_t hbDSPRoiResize(hbDSPTask_t *task,
                       hbDSPImage *dstImg,
                       hbDSPImage *srcImg,
                       hbDSPRoi *roi,
                       hbDSPRoiResizeParam *roiResizeParam,
                       hbDSPRpcCtrlParam *ctrlParam);

调用 RoiResize API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,format和type与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] roi ROI区域,有效范围取ROI区域与srcImg的交集,且有效范围需要符合图片的内置约束。

    • [in] roiResizeParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.5.3.25. hbDSPRemap

int32_t hbDSPRemap(hbDSPTask_t *task,
                   hbDSPImage *dstImg,
                   hbDSPImage *srcImg,
                   hbDSPImage *map1,
                   hbDSPImage *map2,
                   hbDSPRemapParam *remapParam,
                   hbDSPRpcCtrlParam *ctrlParam);

调用 Remap API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstImg 输出图像,format和type与输入图像一致。

    • [in] srcImg 输入图像,type支持U8C1,format支持Y和nv12。

    • [in] map1 map1映射坐标(x,y),type支持S16C2,大小与输出图像一致,坐标交错排列xyxy。

    • [in] map2 map2映射坐标(x,y),type支持S16C2,大小与输出图像一致,坐标交错排列xyxy。当插值类型为HB_CV_INTER_NEAREST时,只用到map1,当插值类型为HB_CV_INTER_LINEAR时,存储坐标权重,可自定义或者由opencv接口convertMaps转换得到。

    • [in] remapParam 算子参数。

    • [in] ctrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

注解

  1. 由于DSP 实现分 tile 计算,且 TCM 大小限制 J5 2 x 128 KB,所以 tile 也有大小限制。分 tile 计算需要根据输出 tile 的大小映射到输入 tile 大小,所以当前缩小变换时,输入 tile 会比输出 tile 大(当前 remap 实现缩小比例限制 >= 0.25);

  2. 如果输出 tile 需要的输入 tile 过大,会走到内部未优化的分支,性能会特别慢,此时可以检查 map 数据是否存在上述情况。

../../../_images/remap_restrict.png

10.3.1.6. NN侧API说明

10.3.1.6.1. 数据类型与数据结构

10.3.1.6.1.1. hbDSPDataLayout

typedef enum {
  HB_DSP_LAYOUT_NONE = 0,
  HB_DSP_LAYOUT_NCHW = 1,
  HB_DSP_LAYOUT_NHWC = 2,
} hbDSPDataLayout;

DSP NN数据排布类型枚举。

  • 成员

    成员名称

    描述

    HB_DSP_LAYOUT_NONE

    DSP NN 无排布,使用默认参数。

    HB_DSP_LAYOUT_NCHW

    DSP NN 数据 NCHW 顺序排布。

    HB_DSP_LAYOUT_NHWC

    DSP NN 数据 NHWC 顺序排布。

10.3.1.6.1.2. hbDSPDataType

typedef enum {
  HB_DSP_TENSOR_TYPE_S8 = 0x01,
  HB_DSP_TENSOR_TYPE_S16 = 0x02,
  HB_DSP_TENSOR_TYPE_S32 = 0x03,
  HB_DSP_TENSOR_TYPE_F32 = 0x04,
} hbDSPDataType;

DSP NN数据类型枚举。

  • 成员

    成员名称

    描述

    HB_DSP_TENSOR_TYPE_S8

    DSP NN 8位int类型。

    HB_DSP_TENSOR_TYPE_S16

    DSP NN 16位int类型。

    HB_DSP_TENSOR_TYPE_S32

    DSP NN 32位int类型。

    HB_DSP_TENSOR_TYPE_F32

    DSP NN float类型。

10.3.1.6.1.3. hbDSPTensor

#define HB_DSP_TENSOR_MAX_DIMENSIONS 8

typedef struct {
  int32_t dimensionSize[HB_DSP_TENSOR_MAX_DIMENSIONS];
  int32_t numDimensions;
} hbDSPTensorShape;

typedef struct {
  hbDSPTensorShape dataShape;
  // Tensor data layout  NCHW | NHWC :  1 | 2
  uint8_t dataLayout;
  // Tensor data type  int8_t | int16_t | int32_t | float_t : 1 | 2 | 3 | 4
  uint8_t dataType;
  // Physical address for tensor data
  uint64_t dataPhyAddr;
} hbDSPTensor;
  • 成员

    成员名称

    描述

    hbDSPTensorShape

    张量尺寸。

    dataLayout

    张量布局。

    dataType

    数据类型。

    dataPhyAddr

    张量数据物理地址。

10.3.1.6.1.4. hbDSPNNCmd

typedef enum {
  // [0x400, 0x800) for neural network operators
  HB_DSP_RPC_CMD_NN_QUANTIZE = 0x401,
  HB_DSP_RPC_CMD_NN_DEQUANTIZE = 0x402,
} hbDSPNNCmd;

DSP调用NN API的RPC命令。

  • 成员

    成员名称

    描述

    HB_DSP_RPC_CMD_NN_QUANTIZE

    DSP NN Quantize命令。

    HB_DSP_RPC_CMD_NN_DEQUANTIZE

    DSP NN Dequantize命令。

10.3.1.6.1.5. hbDSPQuantizeParam

typedef struct {
  int32_t scaleChannel;
  int32_t zeroPointChannel;
  uint64_t scalePhyAddr;
  uint64_t zeroPointPhyAddr;
  int32_t min;
  int32_t max;
} hbDSPQuantizeParam;

量化算子参数。

  • 成员

    成员名称

    描述

    scaleChannel

    scale通道数。

    zeroPointChannel

    zeroPoint通道数。

    scalePhyAddr

    scale物理地址,其中的数据必须是float32_t类型。

    zeroPointPhyAddr

    zeroPoint物理地址,其中的数据必须是float32_t类型。

    min

    量化最小值。

    max

    量化最大值。

10.3.1.6.1.6. hbDSPDequantizeParam

typedef struct {
  int32_t scaleChannel;
  int32_t zeroPointChannel;
  uint64_t scalePhyAddr;
  uint64_t zeroPointPhyAddr;
} hbDSPDequantizeParam;

反量化算子参数。

  • 成员

    成员名称

    描述

    scaleChannel

    scale通道数。

    zeroPointChannel

    zeroPoint通道数。

    scalePhyAddr

    scale物理地址,其中的数据必须是float32_t类型。

    zeroPointPhyAddr

    zeroPoint物理地址,其中的数据类型必须与输入数据类型一致。

注解

  1. scaleChannel取值为1或者与输入通道数一致;

  2. zeroPointChannel取值为 0、1或者scaleChannel,且zeroPointChannel <= scaleChannel。

10.3.1.6.2. NN API接口

10.3.1.6.2.1. hbDSPQuantize

int32_t hbDSPQuantize(hbDSPTask_t *task,
                      hbDSPTensor *dstTs,
                      hbDSPTensor *srcTs,
                      hbDSPQuantizeParam *quantizeParam,
                      hbDSPRpcCtrlParam *ctrlParam);

调用Quantize API。

  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstTs 输出张量。

    • [in] srcTs 输入张量。

    • [in] quantizeParam 算子参数。

    • [in] rpcCtrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.6.2.2. hbDSPDequantize

int32_t hbDSPDequantize(hbDSPTask_t *task,
                        hbDSPTensor *dstTs,
                        hbDSPTensor *srcTs,
                        hbDSPDequantizeParam *dequantizeParam,
                        hbDSPRpcCtrlParam *ctrlParam);
  • 参数

    • [out] task 任务句柄,用 hbDSPWaitTaskDone 等待指定任务结束。

    • [in/out] dstTs 输出张量。

    • [in] srcTs 输入张量。

    • [in] dequantizeParam 算子参数。

    • [in] rpcCtrlParam 任务控制参数,可以为任务指定运行核和任务优先级。

  • 返回值

    • 返回 0 则表示API成功执行,否则执行失败。

10.3.1.6.3. NN PLUGIN

NN PLUGIN作为libdnn的plugin被调用,在使用libdnn进行模型推理时,派发到ARM上的quantize或dequantize算子可使用如下环境变量控制ARM是否将计算卸载到DSP上执行。

export HB_DNN_PLUGIN_PATH=${ARM_PLUGIN} // libhb_dsp_nn_plugin.so所在路径
export HB_DNN_ENABLE_DSP=1
// 当前plugin策略选择是否卸载到DSP执行
// quantize输入数据类型为float,输出数据类型为int8_t,输入数据尺寸需要大于等于1x2^18
// dequantize输入数据类型为int8_t/int32_t,输出数据类型为float,输入数据尺寸需要大于等于1x2^20
export HB_DNN_DISABLE_ACC_AUTO_DEPLOY=1 // 此开关控制是否所有尺寸卸载到DSP执行