跳到主要内容

VENC性能指标说明

JPEGE功能及约束说明

功能说明

JPEGE(JPEG Encoder)将YUV格式图片编码成JPEG压缩格式的图片文件,例如*.jpg。

图片分辨率约束

  • 输入图片分辨率:

    版本分辨率范围
    Atlas 200/500 A2推理产品最大分辨率:16384*16384,最小分辨率:32*32。
  • 输出图片分辨率

    JPEGE只对图片编码,不会改变图片分辨率,因此输出与输入的图片分辨率保持一致。

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

实现JPEGE图片编码功能时:

  • 输入内存

    需调用acl.himpi.dvpp_malloc接口申请Device上的输入、输出内存,调用acl.himpi.dvpp_free接口释放输入、输出内存,这部分内存的生命周期由用户自行管理。内存大小请参见下表中的计算公式。

  • 输出内存

    支持DVPP内部管理输出内存,或用户自行管理输出内存两种方式:

    • 不需要用户管理、由DVPP内部管理输出内存时,调用acl.himpi.venc_send_frame接口发送原始图像进行图像编码。

      在调用acl.himpi.venc_create_chn接口创建通道时,必须正确设置hi_venc_chn_attr.venc_attr.buf_size参数值(参数描述请参见hi_venc_attr)。

      该方式下,相比由用户管理内存,输出结果数据的JPEG头中不存在COM注释字段,数据长度会短一点,但需要用户从DVPP返回的内存中拷贝输出结果数据到指定内存。

    • 由用户自行管理输出内存、管理内存的生命周期,调用acl.himpi.venc_send_jpege_frame接口发送原始图像进行图像编码。

      在调用acl.himpi.venc_create_chn接口创建通道时,需将hi_venc_chn_attr.venc_attr.buf_size参数值设置为0(参数描述请参见hi_venc_attr),然后调用acl.himpi.venc_get_jpege_predicted_size接口预估输出内存大小,调用acl.himpi.dvpp_malloc/acl.himpi.dvpp_free接口申请/释放输出内存。

      **该方式下,**直接在调用acl.himpi.venc_send_jpege_frame接口时,设置输出内存地址,输出结果数据直接存放到用户设置的内存中,相比由系统管理内存的方式,用户可减少一次“从DVPP返回的内存中拷贝输出结果数据到指定内存”的操作,但输出结果数据的JPEG头中可能会存在COM注释字段(字段长度范围4~19Byte),数据长度会长一点。

输入图片格式的定义请参见hi_pixel_format,宽stride、高stride等概念请参见基本概念

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

输入图片格式

输入图片宽、高对齐要求

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

输出图片格式

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽stride为宽16对齐后的值,兼容对齐到16的倍数如128(按128对齐时,性能更优)。

高stride无需设置。

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

JPEG压缩格式的图片文件,例如*.jpg。

只支持huffman编码,不支持算术编码,不支持渐进编码。

YUV420SP NV21 8bit

YUV422Packed YUYV 8bit

宽2对齐

高无对齐要求

宽stride为宽的两倍再16对齐后的值。

高stride无需设置。

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

YUV422Packed UYVY 8bit

YUV422Packed YVYU 8bit

YUV422Packed VYUY 8bit

父主题: VENC视频/JPEGE图像编码接口

JPEGE性能指标说明

性能指标说明

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

表1 Atlas 200/500 A2推理产品性能规格数据

场景举例(输入图片格式:YUV420 8bit)总帧率
1080p*n路256fps
4k*n路64fps

父主题: VENC视频/JPEGE图像编码接口

VENC功能及约束说明

功能说明

VENC(Video Encoder)将YUV420SP NV12/NV21-8bit图片数据编码成H264/H265格式的视频码流。

分辨率约束

  • 输入图片分辨率:

    版本分辨率范围
    Atlas 200/500 A2推理产品最大分辨率8192*8192,最小分辨率114*114
  • 输出码流分辨率

    VENC只对图片编码,不会改变图片分辨率,因此输出与输入的图片分辨率保持一致。

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

实现VENC视频编码功能时:

  • 输入内存

    需调用acl.himpi.dvpp_malloc接口申请Device上的输入内存,调用acl.himpi.dvpp_free接口释放输入内存,这部分内存的生命周期由用户自行管理。内存大小参见下表中的计算公式。

  • 输出内存

    不需要用户管理输出内存,由系统管理内存。

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

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

输入图片格式

输入图片宽、高对齐要求

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

输出码流格式

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽stride为宽16对齐后的值。

高stride无需设置。

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

  • H264 BP/MP/HP
  • H265 MP(仅支持Slice码流)

YUV420SP NV21 8bit

父主题: VENC视频/JPEGE图像编码接口

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图像编码接口

acl.himpi.venc_create_chn

c函数原型hi_s32 hi_mpi_venc_create_chn(hi_venc_chn chn, const hi_venc_chn_attr *attr);
Python函数ret = acl.himpi.venc_create_chn(chn, 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:编码通道属性字典,具体请参见hi_venc_chn_attr
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码
约束说明- 单个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)分配,不是最终的播放器显示帧率,若想要设置显示帧率请参考acl.himpi.venc_set_h264_vuiacl.himpi.venc_set_h265_vui接口。 建议用户将码控帧率与显示帧率设置一致,否则播放时的码率可能与用户设置的编码码率不同,播放时的码率会随着所设置的显示帧率而变化。
参考资源接口调用流程,参见JPEGE图片编码VENC视频编码

参考信息

表1 编码器属性的约束

编码协议

编码方式

码流 buffer 深度

获取码流模式

编码 profile

H.264

Frame

  • 当 mini_buf_mode=0时,Buffer≥ max_pic_width x max_pic_height x 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 x 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图像编码接口

acl.himpi.venc_destroy_chn

c函数原型hi_s32 hi_mpi_venc_destroy_chn(hi_venc_chn chn);
Python函数ret = acl.himpi.venc_destroy_chn(chn)
函数功能用户退出编码流程时,需要关闭之前打开的编码通道,以释放相关资源。
输入说明chn:编码通道号。
- Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码
约束说明- 销毁并不存在的通道,返回失败。
- 销毁前必须停止接收图像,否则返回失败。
参考资源接口调用流程,参见JPEGE图片编码VENC视频编码

父主题: VENC视频/JPEGE图像编码接口

acl.himpi.venc_start_chn

c函数原型hi_s32 hi_mpi_venc_start_chn (hi_venc_chn chn, const hi_venc_start_param *recv_param);
Python函数ret = acl.himpi.venc_start_chn(chn, recv_param)
函数功能开启编码通道接收输入图片,允许指定接收帧数,超出指定的帧数后自动停止接收图像。
输入说明- chn:编码通道号。
- Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。
- recv_param:接收图像参数字典,用于指定需要接收的图像帧数。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码
约束说明- 如果通道未创建,则返回错误码HI_ERR_VENC_UNEXIST。
- 需要接收的图像帧数设置为-1时表示不指定帧数。
- 如果通道已经开始接收图像,没有停止接收图像前再一次调用此接口指定接收帧数,返回操作不允许。
- 如果通道已经开始接收图像,没有停止接收图像前允许再一次调用此接口不指定接收帧数。
- 只有开启接收之后编码器才开始接收图像编码。
参考资源接口调用流程,参见JPEGE图片编码VENC视频编码

父主题: VENC视频/JPEGE图像编码接口

在线提单