hbVPVideoDecode

typedef struct {
  uint8_t pixelFormat;
  uint32_t inBufSize;
  uint32_t outBufCount;
  uint64_t backend;
  hbVPVideoType videoType;
} hbVPVideoDecParam;

Video解码的参数。

  • 成员

    成员名称描述
    pixelFormat输入图像的像素格式。当前支持 HB_VP_IMAGE_FORMAT_NV12HB_VP_IMAGE_FORMAT_YUV420HB_VP_IMAGE_FORMAT_NV12_Y10C8_MSB(仅J6B支持) 格式。
    inBufSizeVideo Processing Unit内部输入缓冲区大小,需要满足1024对齐。取值范围[1024, 8192 * 4096 * 3]。通常可按解码后的yuv大小进行设置,并对结果进行1024字节对齐。推荐值为10 * 1024 * 1024。
    outBufCountVideo Processing Unit内部输出缓冲区个数。取值范围[1,31],推荐值为5。
    backend指定Video解码任务运行的后端。仅支持设置为单个具体核的后端,不支持多后端或 ANY 类型后端。
    videoType编码协议的类型。当前支持 HB_VP_VIDEO_TYPE_H264HB_VP_VIDEO_TYPE_H265 格式。
int32_t hbVPGetDefaultVideoDecParam(hbVPVideoDecParam *param);

获取解码器默认的解码参数,其中 pixelFormat 参数为 HB_VP_IMAGE_FORMAT_YUV420inBufSize 参数为 10 * 1024 * 1024outBufCount 参数为5,backend 参数为 HB_UCP_VPU_CORE_0

  • 参数
    • [in] param 解码参数。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • 在调用接口前,需要将 videoType 指定为 HB_VP_VIDEO_TYPE_H264HB_VP_VIDEO_TYPE_H265
int32_t hbVPCreateVideoDecContext(hbVPVideoContext *context,
                                  hbVPVideoDecParam const *param);

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

  • 参数
    • [out] context 解码器上下文。
    • [in] param 解码参数。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • Video Processing Unit每个核最高支持创建32路解码的上下文,但受限于设置内存大小,实际支持创建的数量可能小于32。
    • 解码器首帧必须是包含VPS+SPS+PPS帧头信息的IDR帧,否则不能正常解码。
    • 解码器不支持包含后向参考帧的B帧码流解码。
    • 由于硬件限制,H264编码时采用 16x16 的对齐方式,解码后的数据也会按照编码时的对齐要求进行解码。具体来说,解码后的分辨率会对齐到 16x16 的倍数。
int32_t hbVPReleaseVideoDecContext(hbVPVideoContext context);

释放解码器上下文API。

  • 参数
    • [in] context 解码器上下文。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
int32_t hbVPVideoDecode(hbUCPTaskHandle_t *taskHandle, 
                        hbVPArray const *srcBuf,
                        hbVPVideoContext context);

调用Video Processing Unit解码API。

  • 参数
    • [out] taskHandle 任务句柄,负责算子与UCP架构的交互。
    • [in] srcBuf 输入码流文件。
    • [in] context 解码器的上下文。
  • 返回值
    • 返回 0 则表示API成功执行,否则执行失败。
  • 接口限制说明
    • Video解码时,支持的最小分辨率为256x128,最大分辨率为8192x4096。
    • 由于Video Processing Unit硬件限制,Video Processing Unit编码或解码时最大支持同时提交31个任务。
    • 仅支持使用异步方式创建任务。
    • 为了避免系统资源浪费并提高Video Processing Unit解码性能,建议复用输入地址。
int32_t hbVPGetVideoDecOutputBuffer(hbVPImage *outImg,
                                    hbUCPTaskHandle_t taskHandle);

获取解码数据buffer的API。

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