Skip to main content

hi_mpi_venc_destroy_chn

VENC性能指标说明

性能指标说明

720p指分辨率为1280*720的图片;1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。

单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):

表1 Atlas 200/500 A2推理产品性能规格说明

场景举例总帧率
720p*n路(1≤n≤3)n*400fps
720p*n路(n>3)1200fps
1080p*n路(1≤n≤3)n*200fps
1080p*n路(n>3)600fps
4k*n路(1≤n≤3)n*50fps
4k*n路(n>3)150fps

注:其它分辨率可以等量估算。

父主题: VENC视频编码功能/JPEGE图片编码功能

hi_mpi_venc_create_chn

函数功能

创建编码通道。

约束说明

  • 单个Device上的通道号不能超出最大的通道号范围。

  • 编码通道属性由三部分组成,编码器属性、码率控制器属性和帧结构类型属性,帧结构类型属性简称GOP(Group of Pictures )类型属性。

  • 编码器属性必须设置编码码流buffer深度、获取码流方式、编码profile等,表1详细描述了各种协议的各项属性的特性。

  • 推荐的编码宽高为:3840*2160(4k)、1920*1080(1080P)、1280*720(720P)。

  • H.264/H.265编码帧存由YHeaderSize、CHeaderSize、YSize、CSize、PmeSize、PmeInfoSize和TmvSize共同构成,编码器默认根据最大宽高计算帧存进行内存分配,在设置通道宽高时需保证根据通道宽高计算的每一部分帧存大小都不能大于最大宽高计算的帧存大小。

  • 码率控制器属性中的输入/输出帧率(src_frame_rate/dst_frame_rate)是用于配合编码过程中的码率(bit_rate)分配,不是最终的播放器显示帧率,若想要设置显示帧率请参考hi_mpi_venc_set_h264_vuihi_mpi_venc_set_h265_vui接口。

    建议用户将码控帧率与显示帧率设置一致,否则播放时的码率可能与用户设置的编码码率不同,播放时的码率会随着所设置的显示帧率而变化。

函数原型

hi_s32 hi_mpi_venc_create_chn(hi_venc_chn chn, const hi_venc_chn_attr *attr)

参数说明

参数名输入/输出说明
chn输入编码通道号。 Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 (说明:对于 Atlas 200/500 A2推理产品 , 昇腾虚拟化实例(Ascend Virtual Instance)场景下,VENC通道 = ( 被分配的VENC硬件单元 / VENC硬件单元 ) * 128,如果通道总数不为整数,则向下取整。JPEGE的通道数不随算力影响,但JPEGE+VENC的总通道数最大128。)
attr输入编码通道属性的指针。

返回值说明

参考资源

接口调用流程及示例,参见JPEGE图片编码VENC视频编码

参考信息

表1 编码器属性的约束

编码协议

编码方式

码流 buffer 深度

获取码流模式

编码 profile

H.264

Frame

  • 当 mini_buf_mode=0时,Buffer≥ max_pic_width*max_pic_height*3/4;
  • 当 mini_buf_mode=1时,Buffer≥32*1024 Byte;

Frame/Slice

Baseline

Mainprofile

Highprofile

JPEG

Frame

  • mini_buf_mode=0 时,如果原图格式为YUV420,Buffer最小值为原图宽16对齐*原图高16对齐*3/2 ;如果原图格式为YUV422 Packed,Buffer最小值为原图宽16对齐*原图高16对齐*2
  • mini_buf_mode=1 时,Buffer≥32*1024 Byte;

Frame/Ecs

Baseline

H.265

Frame

  • mini_buf_mode=0时,Buffer≥ max_pic_width*max_pic_height*3/4;
  • mini_buf_mode=1时,Buffer≥32*1024 Byte

Frame/Slice

Main profile

Main 10 profile(暂不支持)

  • mini_buf_mode=0时,Buffer≥ max_pic_width*max_pic_height*(3/4)*(5/4);
  • mini_buf_mode=1时,Buffer≥32*1024 Byte

Frame/Slice

Main 10 profile(暂不支持)

父主题: VENC视频编码功能/JPEGE图片编码功能

hi_mpi_venc_destroy_chn

函数功能

用户退出编码流程时,需要关闭之前打开的编码通道,以释放相关资源。

约束说明

  • 销毁并不存在的通道,返回失败。
  • 销毁前必须停止接收图像,否则返回失败。

函数原型

hi_s32 hi_mpi_venc_destroy_chn(hi_venc_chn chn)

参数说明

参数名输入/输出说明
chn输入编码通道号。 Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。

返回值说明

参考资源

接口调用流程及示例,参见JPEGE图片编码VENC视频编码

父主题: VENC视频编码功能/JPEGE图片编码功能

hi_mpi_venc_start_chn

函数功能

开启编码通道接收输入图片,允许指定接收帧数,超出指定的帧数后自动停止接收图像。

约束说明

  • 如果通道未创建,则返回错误码HI_ERR_VENC_UNEXIST。
  • 需要接收的图像帧数设置为-1时表示不指定帧数。
  • 如果通道已经开始接收图像,没有停止接收图像前再一次调用此接口指定接收帧数,返回操作不允许。
  • 如果通道已经开始接收图像,没有停止接收图像前允许再一次调用此接口不指定接收帧数。
  • 只有开启接收之后编码器才开始接收图像编码。

函数原型

hi_s32 hi_mpi_venc_start_chn(hi_venc_chn chn, const hi_venc_start_param *recv_param)

参数说明

参数名输入/输出说明
chn输入编码通道号。 Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。
recv_param输入接收图像参数的指针,用于指定需要接收的图像帧数。

返回值说明

参考资源

接口调用流程及示例,参见JPEGE图片编码VENC视频编码

父主题: VENC视频编码功能/JPEGE图片编码功能

hi_mpi_venc_stop_chn

函数功能

停止编码通道接收输入图片。

约束说明

  • 如果通道未创建,则返回失败。
  • 此接口并不判断当前是否停止接收,即允许重复停止接收不返回错误。
  • 此接口用于编码通道停止接收图像来编码,在编码通道销毁或复位前必须停止接收图像。
  • 调用此接口仅停止接收原始数据编码,码流buffer并不会被清除。

函数原型

hi_s32 hi_mpi_venc_stop_chn(hi_venc_chn chn)

参数说明

参数名输入/输出说明
chn输入编码通道号。 Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。

返回值说明

参考资源

接口调用流程及示例,参见JPEGE图片编码VENC视频编码

父主题: VENC视频编码功能/JPEGE图片编码功能

hi_mpi_venc_query_status

函数功能

查询编码通道状态。

约束说明

  • 如果通道未创建,则返回失败。
  • 此接口用于查询此函数调用时刻的编码器状态,status包含以下信息:
    • 在编码通道状态结构体中,left_pics表示待编码的帧个数。在复位通道前,可以通过查询是否还有图像待编码来决定复位时机,防止复位时将可能需要编码的帧清理出去。

    • 在编码通道状态结构体中,left_stream_bytes表示码流buffer中用户暂未取走的byte数目。

      在复位通道前,可以通过查询是否还有码流没有被处理来决定复位时机,防止复位时将可能需要的码流清理出去。

    • 在编码通道状态结构体中,left_stream_frames表示码流buffer中用户暂未取走的帧数目。

      在复位通道前,可以通过查询是否还有图像的码流没有被取走来决定复位时机,防止复位时将可能需要的码流清理出去。

    • 在编码通道状态结构体中,cur_packs表示当前帧的码流包个数。在调用hi_mpi_venc_get_stream之前应确保cur_packs大于0。

      在按包获取时当前帧可能不是一个完整帧(被取走一部分),按帧获取时表示当前一个完整帧的包个数(如果没有一帧数据则为 0)。用户在需要按帧获取码流时,需要查询一个完整帧的包个数,在这种情况下,通常可以在select成功后执行query操作,此时,cur_packs是当前完整帧中包的个数。

    • 在编码通道状态结构体中,left_recv_pics表示调用hi_mpi_venc_start_chn接口后剩余等待接收的帧数目。

    • 在编码通道状态结构体中,left_enc_pics表示调用hi_mpi_venc_start_chn接口后剩余等待编码的帧数目。

    • 如果调用hi_mpi_venc_start_chn但没有指定接收帧数,left_recv_pics和left_enc_pics数目始终为0。

函数原型

hi_s32 hi_mpi_venc_query_status(hi_venc_chn chn, hi_venc_chn_status *status)

参数说明

参数名输入/输出说明
chn输入编码通道号。 Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。
status输出编码通道状态的指针。

返回值说明

参考资源

接口调用流程及示例,参见JPEGE图片编码VENC视频编码

父主题: VENC视频编码功能/JPEGE图片编码功能

在线提单