acl.himpi.vdec_create_chn

c函数原型

hi_s32 hi_mpi_vdec_create_chn(hi_vdec_chn chn, const hi_vdec_chn_attr *attr);

Python函数

ret = acl.himpi.vdec_create_chn(chn, attr)

函数功能

根据设置的通道属性创建解码通道。

Atlas 200/300/500 推理产品,当前版本不支持该接口。

Atlas 训练系列产品,当前版本不支持该接口。

输入说明

chn:int,解码通道号 。
  • Atlas 推理系列产品,该参数的取值范围:[0, 256),JPEGD功能和VDEC功能共用通道,且通道总数最多256。
  • Atlas A2训练系列产品/Atlas 800I A2推理产品,该参数的取值范围:[0, 256),JPEGD功能和VDEC功能共用通道,且通道总数最多256,其中,JPEGD解码通道总数最多256,VDEC解码通道总数最多32。
  • Atlas 200I/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。
说明:

对于Atlas 推理系列产品,昇腾虚拟化实例(Ascend Virtual Instance)场景下,VDEC通道和JPEGD通道总数 = ( 被分配的VDEC硬件单元+JPEGD硬件单元数量之和 / VDEC硬件单元+JPEGD硬件单元总数之和 ) * 256,如果通道总数不为整数,则向下取整。

对于Atlas A2训练系列产品/Atlas 800I A2推理产品,昇腾虚拟化实例(Ascend Virtual Instance)场景下,VDEC通道 = ( 被分配的VDEC硬件单元 / VDEC硬件单元 ) * 32,如果通道总数不为整数,则向下取整。JPEGD的通道数不受算力影响,但JPEGD+VDEC的总通道数最大256。

对于Atlas 200I/500 A2推理产品,昇腾虚拟化实例(Ascend Virtual Instance)场景下,VDEC通道 = ( 被分配的VDEC硬件单元 / VDEC硬件单元 ) * 128,如果通道总数不为整数,则向下取整。JPEGD的通道数不随算力影响,但JPEGD+VDEC的总通道数最大128。

昇腾虚拟化实例(Ascend Virtual Instance)的详细描述,以及各场景下的算力资源规格请参见《昇腾虚拟化实例(AVI)用户指南》

attr:dict,解码通道属性字典,具体请参见hi_vdec_chn_attr
  • 如果参数“attr”为空,会返回“HI_ERR_VDEC_NULL_PTR”的错误码。
  • 当通道属性“attr”中的值超过解码能力集时,会返回“HI_ERR_VDEC_ILLEGAL_PARAM”的错误码。

返回值说明

ret:int,错误码。

约束说明

  • 单个Device上的通道号不能超出最大的通道号范围。
  • 在创建解码通道之前必须保证通道未创建(或者已经销毁),否则会直接返回错误。
  • 系统内存不足时会返回“HI_ERR_VDEC_NO_MEM”的错误码,可考虑扩展操作系统内存。
  • 如果需要解码的H.264码流有B帧,或者需要解码的H.265码流支持时域运动矢量预测(sps_temporal_mvp_enabled_flag = 1),则创建通道时需要设置此通道支持时域运动矢量预测(temporal_mvp_en 设置为 1),还需要为其分配输出每一帧Tmv(Temporal Motion Vector)信息的VB(Vedio Buffer)块,该VB块的大小比图像VB块小很多,所需个数为RefFrameNum + 1,具体大小通过调用函数acl.himpi.vdec_get_tmv_buf_size获取,否则会导致解码出现花屏等错误。
  • H.264、H.265解码每个解码通道所需VB个数至少为参考帧+显示帧+1,JPEG解码每个解码通道所需VB个数至少为显示帧+1。不同协议解码所需的图像VB块大小不同,具体大小通过调用函数acl.himpi.vdec_get_pic_buf_size获取。
  • 如果 H.264解码不需要解码B帧,或者 H.265解码不需要解码支持时域运动矢量预测(sps_temporal_mvp_enabled_flag = 1)的码流,则创建通道时可设置此通道不支持时域运动矢量预测(“temporal_mvp_en”设置为“0”),此种情况不输出Tmv信息,可以不用创建Tmv VB池,节省内存。
  • 用户需要根据解码码流配置解码所需的帧存VB大小“frame_buf_size”和个数“frame_buf_cnt”,以及存放Tmv信息的VB大小 “tmv_buf_size”,解码器内部按此配置创建相应的私有VB池。
  • 只要帧存Buffer和Tmvbuffer足够大,解码通道能解码在最大最小分辨率范围内的任意分辨率码流。通道宽高当前只与码流Buffer、SCDbuffer(start code detector buffer)大小有关。

参考资源

接口调用流程,参见JPEGD图片解码VDEC视频解码