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在创建任务前,需要准备hbVPRemapParam得到hbVPMapWrap,用于执行remap任务。

注解
  • gdc底层仅支持双线性插值,不需要配置borderType、padValue参数;
  • 由于gdc实现原理与dsp不同,同一map传入gdc和dsp输出的图像精度会不同;
  • gdc对于map有如下要求:
    • map坐标必须是正数;
    • 尽量保持同一行里面的采样点是平滑过渡的,如果某两点之间过渡急剧变化,样条线的精度将不足以处理它;
    • 不能4个采样点组成三角形;
    • 如果采样精度不足,可能导致锯齿,扭曲等情况,此时推荐使用亚像素坐标;
  • gdc支持10bit、12bit图像处理,需注意10bit、12bit仅为y通道的像素宽度,uv通道仍为8bit。同时10bit、12bit的y数据需要以MSB的方式进行16bit存储,即一个像素占用两个字节空间。
  • 成员

    成员名称描述
    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范围[96,3840],srcHeight和mapHeight范围[96,2160],且满足:mapWidth<=srcWidth,mapHeight<=srcHeight。 由于GDC对数据有对齐限制,mapWidth需要进行16对齐,这意味着当srcWidth不满足16对齐时,mapWidth将小于srcWidth。输入输出的stride按照width方向16对齐,处理8bit图像时,输入输出的stride范围[96,3840], 处理10bit和12bit图像时,输入输出的stride范围[192,7680],申请内存请以height和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部署资源时,backend需要根据开发板硬件配置情况设置。例如,在单核DSP开发板上,backend可以为:HB_UCP_DSP_CORE_ANY、HB_UCP_DSP_CORE_0。
  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,nv12_y10c8_msb和nv12_y12c8_msb。使用gdc处理10bit、12bit图像时,需要将图像的format设置为HB_VP_IMAGE_FORMAT_NV12_Y10C8_MSB或HB_VP_IMAGE_FORMAT_NV12_Y12C8_MSB,type设置为HB_VP_IMAGE_TYPE_U16C1进行处理。
    • [in] mapWrap map参数。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。