acl.himpi.vdec_destroy_chn
VDEC性能指标数据
性能指标说明
720p指分辨率为1280*720的图片;1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。
单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):
表1 Atlas 200/500 A2推理产品性能规格数据
| 场景举例 | 总帧率 |
|---|---|
| 720p*n路(1≤n≤4) | n*600fps |
| 720p*n路(n>4) | 2400fps |
| 1080p*n路(1≤n≤4) | n*300fps |
| 1080p*n路(n>4) | 1200fps |
| 4k*n路(1≤n≤4) | n*75fps |
| 4k*n路(n>4) | 300fps |
下表以1080P分辨率的输入码流为例,说明每路VDEC解码的最大内存消耗的计算公式,在计算公式中:
-
输入码流缓存大小:大于或等于解码通道大小(宽*高)的 3/4倍。
-
解码图像帧存大小:可调用acl.himpi.vdec_get_pic_buf_size接口获取解码图像帧存大小,该参数值跟输入码流分辨率相关。
-
视频解码图像Tmv缓存大小:可调用acl.himpi.vdec_get_tmv_buf_size接口获取视频解码图像Tmv缓存大小,该参数值跟输入码流分辨率相关。
-
输入码流缓存大小*、解码图像帧存大小、*视频解码图像Tmv缓存大小、参考帧数量均由用户调用acl.himpi.vdec_create_chn接口创建通道时设置。
-
解码后缓存图像帧数由用户在调用acl.himpi.vdec_set_chn_param接口时设置。
每路VDEC解码的内存消耗计算公式
场景举例
内存消耗(单位为MB)
6MB + 输入码流缓存大小 * 2 + (解码图像帧存大小 + 视频解码图像Tmv缓存大小) * (参考帧数量 + 解码后缓存图像帧数 +1 )
52.5MB(参考帧数量为8)
31.5MB(参考帧数量为2)
58MB(参考帧数量为8)
34MB(参考帧数量为2)
父主题: VDEC视频解码/JPEGD图像解码接口
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) |
| 函数功能 | 根据设置的通道属性创建解码通道。 |
| 输入说明 | - chn(hi_vdec_chn):解码通道号 。 - Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。(说明:对于 Atlas 200/500 A2推理产品 , 昇腾虚拟化实例(Ascend Virtual Instance)场景下,VDEC通道 = ( 被分配的VDEC硬件单元 / VDEC硬件单元 ) * 128,如果通道总数不为整数,则向下取整。JPEGD的通道数不随算力影响,但JPEGD+VDEC的总通道数最大128。) - attr(hi_vdec_chn_attr):解码通道属性字典。 - 如果参数attr为空,会返回HI_ERR_VDEC_NULL_PTR的错误码。 - 当通道属性attr中的值超过解码能力集时,会返回HI_ERR_VDEC_ILLEGAL_PARAM的错误码。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见公共返回码。 |
| 约束说明 | - 单个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获取,否则会导致解码出现花屏等错误。 - H264、H265解码每个解码通道所需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视频解码。 |
父主题: VDEC视频解码/JPEGD图像解码接口
acl.himpi.vdec_destroy_chn
| c函数原型 | hi_s32 hi_mpi_vdec_destroy_chn(hi_vdec_chn chn); |
|---|---|
| Python函数 | ret = acl.himpi.vdec_destroy_chn(chn) |
| 函数功能 | 销毁解码通道,以释放相关资源。 |
| 输入说明 | chn:int,解码通道号。 - Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VDEC视频/JPEGD图像解码返回码. |
| 约束说明 | - 销毁前必须保证通道已创建,否则会返回通道未创建的错误。 - 销毁前必须停止接收码流(或者尚未开始接收码流),否则返回错误码“HI_ERR_VDEC_NOT_PERM”。 |
| 参考资源 | 接口调用流程,参见JPEGD图片解码、VDEC视频解码。 |
父主题: VDEC视频解码/JPEGD图像解码接口
acl.himpi.vdec_get_chn_attr
| c函数原型 | hi_s32 hi_mpi_vdec_get_chn_attr(hi_vdec_chn chn, hi_vdec_chn_attr *attr); |
|---|---|
| Python函数 | attr, ret= acl.himpi.vdec_get_chn_attr(chn) |
| 函数功能 | 获取视频解码通道属性。 |
| 输入说明 | chn:解码通道号。 - Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VDEC视频/JPEGD图像解码返回码。 attr:解码通道属性字典。 |
| 约束说明 | 获取属性前必须保证通道已创建,否则会返回通道未创建的错误码“HI_ERR_VDEC_UNEXIST”。 |
| 参考资源 | 无 |
父主题: VDEC视频解码/JPEGD图像解码接口
acl.himpi.vdec_set_chn_attr
| c函数原型 | hi_s32 hi_mpi_vdec_set_chn_attr(hi_vdec_chn chn, const hi_vdec_chn_attr *attr); |
|---|---|
| Python函数 | ret = acl.himpi.vdec_set_chn_attr(chn, attr) |
| 函数功能 | 设置解码通道属性。不支持该接口。 |
| 输入说明 | - chn:解码通道号。 - Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 - attr:解码通道属性字典。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VDEC视频/JPEGD图像解码返回码。 |
| 约束说明 | - 获取属性前必须保证通道已创建,否则会返回通道未创建的错误码“HI_ERR_VDEC_UNEXIST”。 - 可以改变的属性有 type、mode、ref_frame_num,其它属性不能改变。其中,type只支持HI_PT_H264、HI_PT_H265。 - 解码器内部会在改变属性时会自动复位解码通道。 |
| 参考资源 | 无 |
父主题: VDEC视频解码/JPEGD图像解码接口
acl.himpi.vdec_start_recv_stream
| c函数原型 | hi_s32 hi_mpi_vdec_start_recv_stream(hi_vdec_chn chn); |
|---|---|
| Python函数 | ret = acl.himpi.vdec_start_recv_stream(chn) |
| 函数功能 | 创建通道之后,启动解码之前,解码器开始接收用户发送的码流。 |
| 输入说明 | chn:解码通道号。 - Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VDEC视频/JPEGD图像解码返回码。 |
| 约束说明 | - 启动接收码流前必须保证通道已创建,否则会返回通道未创建的错误码“HI_ERR_VDEC_UNEXIST”。 - 启动接收码流之后,才能调用acl.himpi.vdec_send_stream发送码流。 - 重复调用启动接收码流接口时,返回成功。 |
父主题: VDEC视频解码/JPEGD图像解码接口
在线提单