hbVPRemap

typedef struct hbVPRemapParam { uint64_t mapPhyAddr; void *mapVirAddr; int32_t srcWidth; int32_t srcHeight; int32_t mapWidth; int32_t mapHeight; int8_t interpoType; int8_t borderType; uint8_t padValue; uint8_t dataType; } hbVPRemapParam;

视觉算子hbVPRemap在对任务创建之前,需要准备hbVPWarpParam得到hbVPMapWrap,用于执行remap任务。

注解
  • gdc底层默认使用的是双线性插值,不需要配置interpoType、borderType、padValue参数;
  • 由于gdc实现原理与dsp不同,同一map传入gdc和dsp输出的图像精度会不同;
  • gdc对于map有如下要求:
    • map坐标必须是正数;
    • 尽量保持同一行里面的采样点是平滑过渡的,如果某两点之间过渡急剧变化,样条线的精度将不足以处理它;
    • 不能4个采样点组成三角形;
    • 如果采样精度不足,可能导致锯齿,扭曲等情况,此时推荐使用亚像素坐标;
  • 成员

    成员名称描述
    mapPhyAddrmap数据物理地址,数据类型为double。
    mapVirAddrmap数据虚拟地址。
    srcWidth输入宽度。
    srcHeight输入高度。
    mapWidthmap宽度(即目标宽度)。
    mapHeightmap高度(即目标高度)。
    interpoTypeRemap中的插值类型,支持 hbVPInterpolationType 中的NEAREST和LINEAR类型。
    borderType保留参数。
    padValue保留参数。
    dataTypemap中的数据类型,支持 hbVPImageType 中的 HB_VP_IMAGE_TYPE_F64C2 类型。
注解

注意,map中数据排布(即phyAddr物理地址下的内存数据)为 x_0, y_0, x_1, y_1, ... ,内存长度应为 2 * mapWidth * mapHeight * sizeof(dataType),详细使用情况请参考示例。

  1. 当任务部署在GDC上时,srcWidth和mapWidth范围[100,3840],srcHeight和mapHeight范围[100,2160],且满足:mapWidth<=srcWidth,mapHeight<=srcHeight。 由于GDC对数据有对齐限制,要求输入的stride按照width方向16对齐,即输入输出的stride范围[112,3840], 申请内存请以heigh和stride大小为准。
  2. 当任务部署在DSP上时,srcWidth和mapWidth范围[32,4096],srcHeight和mapHeight范围[16, 2160]。
typedef void *hbVPMapWrap_t;

hbVPRemap 算子的参数描述句柄,句柄包含了不同Backend上运行所必要的描述信息,可重复使用。

int32_t hbVPCreateMapWrap(hbVPMapWrap_t *mapWrap, hbVPRemapParam const *param, uint64_t backend);

创建Remap的mapWrap参数。

  • 参数
    • [out] mapWrap 创建出的参数,在接口中被使用,该参数必须指向nullptr。
    • [in] param remap参数,用来创建统一的mapWrap参数。
    • [in] backend 选择后端硬件,不同的硬件后端需要为map准备不同的硬件资源
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
注解
  1. hbVPCreateMapWrap用于创建remap的map资源,由于不同backend所需要准备的硬件资源不同,因此此处需要指定backend用以确定该map适用于哪个资源。
  2. 接口支持硬件资源为GDC,DSP。由于DSP有多核,指定DSP部署资源时backend可以为:HB_UCP_DSP_CORE_ANY、HB_UCP_DSP_CORE_0、HB_UCP_DSP_CORE_1,不区分core id,具体backend视开发环境选取。
  3. 支持同时指定dsp和gdc两种backend,分别创建两种硬件map资源,如:backend=HB_UCP_GDC_CORE_0|HB_UCP_DSP_CORE_ANY(指定创建GDC和DSP两种backend的硬件资源,且参数需要同时满足GDC与DSP尺寸约束, HB_UCP_CORE_ANY不能与其它backend进行或运算)。
int32_t hbVPReleaseMapWrap(hbVPMapWrap_t mapWrap);

释放Remap的mapWrap参数。

  • 参数
    • [in] mapWrap 需要释放的mapWrap参数。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
int32_t hbVPRemap(hbUCPTaskHandle_t *taskHandle, hbVPImage *dstImg, hbVPImage const *srcImg, hbVPMapWrap_t mapWrap);

调用Remap API。

  • 参数
    • [out] taskHandle 任务句柄,负责算子与UCP架构的交互。
    • [out] dstImg 输出图像,type和format与输入图像一致,大小和map的大小一致。
    • [in] srcImg 输入图像,type支持U8C1,format dsp硬件支持Y和nv12,gdc支持nv12。
    • [in] mapWrap map参数的指针。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。