跳到主要内容

VDEC性能指标数据

JPEGD性能指标数据

性能指标说明

JPEGD性能指标是基于硬件解码的性能,JPEGD硬件解码不支持3个SOS的图片解码,对于硬件不支持的格式,会使用软件解码,软件解码性能参考为1080P 15fps。JPEGD解码的输出图片如果涉及旋转,则性能指标低于软件解码的参考值,例如对于1080P的图片,性能指标低于15fps。

1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):

场景举例总帧率
1080p*n路(1≤n≤2)n*256fps
1080p*n路(n>2)512fps
4k*n路(1≤n≤2)n*64fps
4k*n路(n>2)128fps

父主题: VDEC视频解码/JPEGD图像解码接口

VDEC功能及约束说明

功能说明

VDEC(Video Decoder)实现视频的解码。

分辨率约束

  • 输入码流分辨率:

    版本分辨率范围
    Atlas 200/500 A2推理产品对于H264输入码流,最大分辨率8192*8192,最小分辨率128*128。 对于H265输入码流,最大分辨率5400*8192,最小分辨率128*128。
  • 输出图片分辨率:

    版本分辨率范围
    Atlas 200/500 A2推理产品输出图片最大分辨率8192*8192;当输入码流宽度小于或等于4096时,输出图片最小分辨率为10*6,当输入码流宽度大于4096时,输出图片最小分辨率为128*128。

内存申请/释放接口说明

输入内存的大小就是指实际的输入码流所占用的大小,输出内存的大小参见表1中的计算公式。

版本内存申请接口
Atlas 200/500 A2推理产品VDEC视频解码时,支持以下两种内存申请接口:
- 调用acl.rt.malloc[acl.rt.free](./aclpythondevg_01_0116.md)接口申请\释放Device上的输入、输出内存,这部分内存的生命周期由用户自行管理。
- 调用acl.himpi.dvpp_malloc[acl.himpi.dvpp_free](./aclpythondevg_01_0405.md)接口申请\释放Device上的输入、输出内存,这部分内存的生命周期由用户自行管理。
注意:调用acl.himpi.dvpp_malloc接口申请的内存为媒体数据处理的专用内存,但专用内存的地址空间有限,若关注内存规划或内存资源有限时,建议调用acl.rt.malloc接口申请内存。

码流/图片格式、宽高对齐、内存约束

实现VDEC视频解码功能时,输入或输出内存的生命周期由用户自行管理:

  • 输入码流格式。

    • H264 bp/mp/hp level5.1 YUV420编码的码流,当前只支持annex-B的裸码流。
    • H265 8/10bit level5.1 YUV420编码的码流,当前只支持annex-B的裸码流。
  • 输出图片要求:

    表1 码流/图片格式、宽高对齐、内存大小约束

    输出图片格式

    输出图片宽、高对齐要求

    输出图片宽stride、高stride、内存大小要求

    Atlas 200/500 A2推理产品

    YUV420SP NV12 8bit

    宽2对齐

    高2对齐

    宽stride无对齐要求,与宽相同即可,最小10,最大24576。

    高stride无对齐要求,与高相同即可,最小6,最大24576。

    内存大小(单位Byte)≥ 宽stride * 高stride * 3/2

    YUV420SP NV21 8bit

    宽2对齐

    高2对齐

    RGB888

    无对齐要求

    宽stride为宽乘以3的值,最小30,最大24576。

    高stride无对齐要求,最小6,最大24576。

    内存大小(单位Byte)≥ 宽stride * 高stride

    BGR888

    无对齐要求

    :::note 说明 输出图片格式的定义请参见hi_pixel_format,宽stride、高stride等概念请参见基本概念。 :::

其它约束

  • VDEC只支持对按帧输入码流进行解码。
  • 若码流中有坏帧、缺帧等情况,解码器VDEC解码时会将该帧标记为解码失败,并上报异常。
  • 通过隔行扫描方式编码出来的码流,VDEC仅支持解码H264 8bit编码的码流。
  • 同时配置按帧发送码流与按解码序输出,可以达到快速解码和快速输出的目的,但这种场景不支持解码含有B帧的码流。

父主题: VDEC视频解码/JPEGD图像解码接口

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 )

    • 输入码流格式H264
    • 输入码流分辨率1080P
    • 输入码流缓存大小为4MB
    • 解码图像帧存大小为3MB
    • 视频解码图像Tmv缓存大小为0.5MB
    • 解码后缓存图像帧数2个

    52.5MB(参考帧数量为8)

    31.5MB(参考帧数量为2)

    • 输入码流格式H265
    • 输入码流分辨率1080P
    • 输入码流缓存大小为4MB
    • 解码图像帧存大小为3MB
    • 视频解码图像Tmv缓存大小为1MB
    • 解码后缓存图像帧数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图像解码接口

在线提单