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输入图像的宽度。取值范围[32, 8192]。
    height输入图像的高度。取值范围[32, 8192]。
    qualityFactor编码质量,数值越小图片质量越差。取值范围[1, 100],推荐值50。
    outBufCountJPU内部输出缓冲区个数。取值范围[1, 1000],推荐值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 对齐,编码器内部以 16x16 为单位进行编码处理。
    • imageFormatHB_VP_IMAGE_FORMAT_YUV444 或者 HB_VP_IMAGE_FORMAT_YUV444_P 格式时,要求 width 满足 8 对齐, height 满足 8 对齐,编码器内部以 8x8 为单位进行编码处理。
    • 由于硬件限制,对于未对齐的数据,编码器会在最后部分进行随机填充。这些填充数据不会影响有效内容或编码后的分辨率,但可能导致 md5 校验结果存在差异,需要特别注意。
    • JPU最高支持创建 64 路编码或解码的上下文。
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 输入YUV图像。
    • [in] context 编码器的上下文。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • 仅支持异步方式创建任务。
    • 为了避免系统资源浪费并提高JPU编码性能,建议复用输入地址。
int32_t hbVPGetJPEGEncOutputBuffer(hbVPArray *outBuf,
                                   hbUCPTaskHandle_t taskHandle);

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

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