hbVPJPEGEncode

typedef void *hbVPJPEGContext;

hbVPJPEGEncode 算子和 hbVPJPEGDecode 算子的上下文描述句柄,句柄包含了JPU上运行所必要的描述信息,可重复使用。

typedef struct { uint8_t extendedSequential; uint8_t imageFormat; int32_t width; int32_t height; uint32_t qualityFactor; uint32_t outBufCount; } hbVPJPEGEncParam;

用于JPEG编码的参数。

  • 成员

    成员名称描述
    extendedSequential仅支持8bit编码,默认值0。
    imageFormat输入图像的格式。 当前支持 HB_VP_IMAGE_FORMAT_NV12HB_VP_IMAGE_FORMAT_YUV420HB_VP_IMAGE_FORMAT_YUV444HB_VP_IMAGE_FORMAT_YUV444_P 格式。
    width输入图像的宽度。取值范围[16, 32768]。
    height输入图像的高度。取值范围[16, 32768]。
    qualityFactor编码质量,数值越小图片质量越差。取值范围[0, 100],默认50。
    outBufCountJPU内部输出缓冲区个数。取值范围[1, 65536],默认5。
int32_t hbVPCreateJPEGEncContext(hbVPJPEGContext *context, hbVPJPEGEncParam *param);

创建编码器上下文API,创建前需要提前将context初始化为nullptr。

  • 参数
    • [out] context 编码器上下文指针。
    • [in] param 编码参数指针。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • imageFormatHB_VP_IMAGE_FORMAT_NV12 或者 HB_VP_IMAGE_FORMAT_YUV420 格式时,要求 width 满足 16 对齐, height 满足 8 对齐。
    • imageFormatHB_VP_IMAGE_FORMAT_YUV444 或者 HB_VP_IMAGE_FORMAT_YUV444_P 格式时,要求 width 满足 8 对齐, height 满足 8 对齐。
    • 由于硬件限制,编码器内部以 16x16 为单元做编码处理。当待编码数据为非 16x16 对齐时,编码后的数据最后一部分随机填充的部分会存在差异,但是不会影响有效数据,编码后的数据分辨率也不会发生变化。因此做md5比较时需要注意这点。
    • JPU最高支持创建 64 路编码或解码的上下文。
    • 仅支持8bit数据编码。
int32_t hbVPReleaseJPEGEncContext(hbVPJPEGContext context);

释放编码器上下文API。

  • 参数
    • [in] context 编码器上下文指针。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
int32_t hbVPJPEGEncode(hbUCPTaskHandle_t *taskHandle, hbVPImage const *srcImg, hbVPJPEGContext context);

调用JPEG编码API。

  • 参数
    • [out] taskHandle 任务句柄,负责算子与UCP架构的交互。
    • [in] srcImg 存放编码图像的内存地址指针。
    • [in] context 编码器的上下文指针。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • 仅支持异步方式创建任务。
int32_t hbVPGetJPEGEncOutputBuffer(hbUCPTaskHandle_t taskHandle, hbVPArray *dstBuf);

调用JPEG编码输出缓冲区API。

  • 参数
    • [in] taskHandle 任务句柄,负责算子与UCP架构的交互。
    • [out] dstBuf 存放编码后JPEG数据的内存地址指针。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • JPEG缓冲区 dstBuf 由JPU内部申请。
    • 当任务成功完成后,输出缓冲区中的数据有效;在任务释放阶段,输出缓冲区将被释放。