hbVPStitch

typedef struct hbVPPoint { uint32_t x; uint32_t y; } hbVPPoint;

描述点位置的数据结构。hbVPStitch在对任务进行创建之前,需要准备hbVPPoint描述src源图在目标图上的位置,用于执行stitch任务。

  • 成员

    成员名称描述
    x左上角的坐标x。
    y左上角的坐标y。
int32_t hbVPCreateAlphaBlendLut(hbVPAlphaBlendLut *alphaBlendLut, uint8_t **alphaDatas, hbVPRoi const *alphaBlendRegions, int32_t alphaBlendRegionNum);

调用创建Stitch的alpha-blend lut表API。

  • 参数
    • [out] alphaBlendLut 指向lut表信息的句柄,具有stitch的alpha-blend lut表信息,该参数必须指向nullptr。
    • [in] alphaDatas lut表的内存,由用户传入。
    • [in] alphaBlendRegions 在dst图层需要alpha-blend的区域坐标。单个roi的宽度最大支持2000,高度最大支持2000。
    • [in] alphaBlendRegionNum 在dst图层需要alpha-blend的区域个数。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
注解
  1. alpha-blend lut表是对每一个像素进行操作的系数,通过配置lut表,可以实现两张图的任意融合效果;
  2. alpha-blend lut表中的alpha值,会根据src给入顺序,赋值给指定的src图。如下图:src顺序为:src0、src1;那么blend-reg区域的alpha值属于src0,(255-alpha)属于src1;
int32_t hbVPReleaseAlphaBlendLut(hbVPAlphaBlendLut alphaBlendLut);

调用释放Stitch的alpha-blend lut表API。

  • 参数
    • [in] alphaBlendLut 指向lut表信息的句柄。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
int32_t hbVPStitch(hbUCPTaskHandle_t *taskHandle, hbVPImage *dstImg, hbVPImage const *srcImgs, hbVPPoint const *dstPoses, int32_t srcImgCount, hbVPAlphaBlendLut alphaBlendLut);
注解
  1. 算子中,源图在目标图上的位置仅需提供x、y坐标即可,w和h的值会从src中获取。
  2. 调用一次hbVPStitch接口,实现不了重叠区域三张图融合的结果(比如想重叠区域实现src0 20%,src1 30%,src2 50%拼接效果),需多次执行hbVPStitch接口实现。
  3. Stitch接口,调用一次最多支持输入四张src图,内部会首先将src图拼接到指定区域。
  4. 如果拼接图像为nv12格式,dstPoses参数所指定的x和y坐标,以及拼接图像的宽高均需为偶数。
  • 参数
    • [out] taskHandle 任务句柄,负责算子与UCP架构的交互。
    • [out] dstImg 输出图像。
    • [in] srcImgs 输入图像数组。
    • [in] dstPoses 输入图像在输出图像上的起点坐标数组,点的个数与顺序需要和输入图片一致。
    • [in] srcImgCount 输入图像的个数。
    • [in] alphaBlendLut 用于拼接的lut表信息。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • dstImg:type支持U8C1,format支持Y和nv12。dst图片的宽度最大支持4096,最小支持16;高度最大支持2160,最小支持2。宽度需要16字节对齐。
    • srcImgs:type支持U8C1,format支持Y和nv12,且type和format需要与输出图像一致,最多支持四张输入图。src图片的宽度最大支持2000,最小支持16;高度最大支持2000,最小支持2。宽度需要16字节对齐。
  • 使用说明

使用小于等于两张src图做拼接时:

1.pipline流程(src0—copy;src1-copy)

1). 首先会将src0贴到dst图层上。

2). 然后将src1贴到dst图层上。

3). 由于重叠区域不需要blend,重叠区域按照pipline顺序,由src1的区域进行覆盖。

image

2.pipline流程(src0—copy;src1-copy ;src0-src1-blend)

1). 首先会将src0贴到dst图层上。

2). 然后将src1贴到dst图层上。

3). 由于有重叠区域,且重叠区域需要进行blend操作,将重叠区域覆盖为src0和src1指定区域blend的结果。

image

使用大于两种src图做拼接时:

1.pipline流程(src0—copy;src1-copy;src2-copy;src0-src1-blend)

1). 首先会将src0贴到dst图层上。

2). 接着将src1贴到dst图层上。

3). 然后将src2贴到dst图层上。

4). 最后由于有重叠区域,且重叠区域需要进行blend操作,将重叠区域覆盖为src0和src1指定区域blend的结果。

image

2.pipline流程(src0—copy;src1-copy;src2-copy;src0-src1-blend;src0-src2-blend)

注解

调用一次接口不支持,由于stitch是按pipline流程顺序刷新机制,做不到一次pipline完成三图融合结果展示(比如想重叠区域实现src0 20%,src1 30%,src2 50%拼接效果)内部有判断机制,会对上述场景进行拦截报错

正确做法(分为两个pipline执行):

pipline0流程(src0—copy;src1-copy ;src0-src1-blend)

1). 首先会将src0贴到dst图层上。

2). 接着将src1贴到dst图层上。

3). 最后由于有重叠区域,且重叠区域需要进行blend操作,将重叠区域覆盖为src0和src1指定区域blend的结果。

image

pipline1流程(src3-copy;src2-copy;src3-src2-blend)

1). 首先会将src3贴到dst图层上。

2). 接着会将src2贴到dst图层上。

3). src3与src2有重叠区域,且重叠区域需要进行blend操作,将重叠区域覆盖为src3和src2指定区域blend的结果。

image