Skip to main content

acl.himpi.venc_get_chn_attr

acl.himpi.venc_set_roi_attr

c函数原型hi_s32 hi_mpi_venc_set_roi_attr(hi_venc_chn chn, const hi_venc_roi_attr *roi_attr)
Python函数ret = acl.himpi.venc_set_roi_attr(chn, roi_attr**)**
函数功能设置H.264/H.265通道的ROI属性,用户可以通过配置ROI区域,对该区域的图像Qp进行限制,从而实现图像中该区域的Qp与其他图像区域的差异化。关于ROI编码功能的详细说明请参见ROI编码功能说明
输入说明chn:int,编码通道号。
- Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。
roi_attr:dict,ROI区域参数字典。参见hi_venc_roi_attr
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码
约束说明- 本接口用于设置H.264/H.265通道的ROI属性。
- 本接口在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一个帧时生效。
- 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
- 建议用户在调用此接口之前先调用acl.himpi.venc_get_roi_attr接口,获取当前通道的ROI配置,然后再进行设置。
- 设置该接口后,如果当前帧判断编码为pskip帧,以pskip帧效果优先。
- 设置该接口后,可能会出现感兴趣区域QP值不全为设置值的现象;这是因为在编码过程中,有些编码块的残差会为0,没有数据需要被量化,QP值不生效所致,属于正常现象,不影响编码效果。

ROI编码功能说明

ROI(Region Of Interest)编码:对感兴趣区域编码。

用户可以通过配置ROI区域,对该区域的图像Qp进行限制,从而实现图像中该区域的Qp与其它图像区域的差异化。系统现仅支持对H.264/H.265通道进行ROI设置。系统提供了8个感兴趣区域,可供用户同时使用。

8个区域可以互相叠加,且叠加时的优先级按照0~7的索引号依次提高,这里,叠加优先级是指发生叠加时,图像区域的最终Qp值的判定,最终的区域Qp值按照优先级最高的区域设定。ROI区域可配置绝对Qp和相对Qp两种模式。

  • 绝对Qp:ROI区域的Qp为用户设定的Qp 值。
  • 相对Qp:ROI区域的Qp为码率控制产生的Qp与用户设定的Qp偏移值的和。

以下图为例,假如图像Qp为25,即图像中所有宏块Qp值为25。Roi区域0设置为绝对Qp模式,Qp值为10,索引为0;Roi区域1设置为相对Qp模式,Qp为-10,索引为1。区域0的index小于区域1的index,所以在发生互相重叠的图像区域按高优先级的区域(区域1)Qp设置。区域0除了发生重叠的部分的Qp值等于10。区域1 的Qp值为25-10=15。

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

acl.himpi.venc_set_chn_attr

c函数原型hi_s32 hi_mpi_venc_set_chn_attr(hi_venc_chn chn, const hi_venc_chn_attr *chn_attr);
Python函数ret = acl.himpi.venc_set_chn_attr(chn, chn_attr)
函数功能设置编码通道的属性。
输入说明- chn:int,编码通道号。
- Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。
- chn_attr:dict,编码通道属性,具体请参见hi_venc_chn_attr
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码
约束说明- 仅H.265/H.264编码通道支持。
- 建议用户在调用此接口之前先调用acl.himpi.venc_get_chn_attr接口,获取当前通道属性,然后再进行设置。
- 编码通道属性包括了编码器属性、帧结构GOP属性和码率控制器RC属性三部分。编码通道属性分为动态属性和静态属性两种。其中,静态属性的属性值在通道创建时配置,在通道创建之后不能被修改;动态属性的属性值在通道创建时配置,有部分参数不支持修改,支持修改的参数在通道销毁之前可以被修改。如果设置静态属性或者不支持修改的参数,则返回失败。静态属性、属性是否支持修改、属性取值范围具体请参见hi_venc_chn_attr
- 设置编码通道属性,未修改“gop_mode”时,则通道属性立即生效;修改“gop_mode”时,则通道属性延时生效,最大延时生效时间如下所示**(当前不支持HI_VENC_GOP_MODE_LOW_DELAY_B模式)
- HI_VENC_GOP_MODE_LOW_DELAY_B模式,在修改为非HI_VENC_GOP_MODE_LOW_DELAY_B模式后,对应最大延时变化(以编码帧的个数为单位)为
1 + b_frame_num**。
- 非HI_VENC_GOP_MODE_LOW_DELAY_B模式,在修改为其他模式后,,对应最大延时变化(以编码帧的个数为单位)为1
- 修改gop_mode时,通道的P帧刷Islice、跳帧参考的属性( H.264/H.265 )、pic_order_cnt_type( H.264 )会恢复默认值,如需继续使用需要重新配置。
- 如果修改GOP、RC属性中的一种,RC模块会重新初始化,所有RC高级参数都恢复到默认值。如果客户程序中有对RC高级参数的调整,需要重新设置。 RC高级参数请参考acl.himpi.venc_set_rc_param等。
- 如果同时修改gop_mode和rc_mode时,由于存在延迟生效(延时参见上表),为了防止调用acl.himpi.venc_get_rc_param获取的RC参数值不准确,建议等待延迟参数生效后再执行相应操作。

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

acl.himpi.venc_get_chn_attr

c函数原型hi_s32 hi_mpi_venc_get_chn_attr(hi_venc_chn chn, hi_venc_chn_attr *chn_attr);
Python函数chn_attr, ret = acl.himpi.venc_get_chn_attr(chn)
函数功能获取编码通道当前的属性。
输入说明chn:int,编码通道号。
- Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码
chn_attr:dict,编码通道属性,具体请参见hi_venc_chn_attr
约束说明- 本接口在编码通道创建之后、编码通道销毁之前调用。
- 仅H.265/H.264编码通道支持。

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

功能及约束说明

功能说明

PNGD(PNG Decoder)功能:实现PNG格式图片的硬件解码。

**PNGD在解码图片时,支持按源图片格式解码。**源图片格式解码是指解码前后图片的编码格式保持一致,例如解码前输入图片格式为RGB,解码后输出图片格式为RGB888。

如果不清楚PNG源图片格式、但想使用源格式解码时,有以下两种方式:

  • 在调用PNGD解码接口时,直接将输出图片格式配置为HI_PIXEL_FORMAT_UNKNOWN,输出格式默认按源图片格式输出。此种方式,由于不知道输出图片格式,因此需要用户申请尽量大的内存,防止内存不够,无法存放输出图片。

    输入图片格式操作实际输出图片格式
    RGB/GRAY将输出图片格式设置为HI_PIXEL_FORMAT_UNKNOWNRGB888
    RGBA/AGRAY将输出图片格式设置为HI_PIXEL_FORMAT_UNKNOWNRGBA8888
  • 先调用acl.himpi.png_get_image_info接口根据传入的PNG源图片,获取按源图解码时的输出图片的宽、高、宽stride、高stride、解码输出内存大小、图片格式等信息后,再调用PNGD解码接口,使用通过acl.himpi.png_get_image_info接口获取的图片格式来设置输出图片格式。

图片分辨率约束

  • 输入图片分辨率:

    最大分辨率4096*4096,最小分辨率32*32。

  • 输出图片分辨率

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

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

实现图片解码功能时,需调用acl.himpi.dvpp_malloc接口申请Device上的输入、输出内存,调用acl.himpi.dvpp_free接口释放输入、输出内存,这部分内存的生命周期由用户自行管理。

  • 输入内存的大小就是指实际的输入图片所占用的大小。

  • 输出内存的大小参见下表中的计算公式。

    若不确定输出格式、将输出图片格式设置为HI_PIXEL_FORMAT_UNKNOWN时:

    • 宽stride:

      如果输入图片是RGB或GRAY格式,则宽stride为输出图片的宽先向上128对齐后再乘以3的值;如果输入图片是RGBA或AGRAY格式,则宽stride为输出图片的宽先向上128对齐后再乘以4的值。

    • 高stride:为输出图片的高向上16对齐后的值。

    :::note 说明

    • 输出图片格式的定义请参见hi_pixel_format,宽stride、高stride等概念请参见基本概念
    • 如果用户将宽stride、高stride设置为0,传入对应的接口,PNGD内部在处理时,会默认根据输出图片格式将宽stride向上128对齐、高stride向上16对齐。 :::

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

输入图片格式

输出图片格式

输出图片宽、高对齐要求

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

RGB

RGB888

无对齐要求

宽stride为宽向上1对齐、或16对齐、或128对齐后再乘以3的值。

高stride的取值范围:[输出图片的高, 输出图片的高向上128对齐]。

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

GRAY

RGB888

RGBA

RGB888

宽stride为宽向上1对齐、或16对齐、或128对齐后再乘以3的值。

高stride的取值范围:[输出图片的高, 输出图片的高向上128对齐]。

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

RGBA8888 8bit

宽stride为宽向上1对齐、或16对齐、或128对齐后再乘以4的值。

高stride的取值范围:[输出图片的高, 输出图片的高向上128对齐]。

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

AGRAY

RGB888

宽stride为宽向上1对齐、或16对齐、或128对齐后再乘以3的值。

高stride的取值范围:[输出图片的高, 输出图片的高向上128对齐]。

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

RGBA8888 8bit

宽stride为宽向上1对齐、或16对齐、或128对齐后再乘以4的值。

高stride的取值范围:[输出图片的高, 输出图片的高向上128对齐]。

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

其它约束

PNGD只支持对完整PNG图片进行解码,不支持将一张PNG图片分割成多个数据包后,由PNGD解码。

父主题: PNGD图像处理接口

性能指标说明

性能指标说明

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

场景举例总帧率
1080p*n路(1≤n≤5)n*4fps
1080p*n路(n≥ 6)24fps
4k*n路(1≤n≤5)n*1fps
4k*n路(n≥ 6)6fps

父主题: PNGD图像处理接口

acl.himpi.pngd_create_chn

c函数原型hi_s32 hi_mpi_pngd_create_chn(hi_pngd_chn chn, const hi_pngd_chn_attr *attr)
Python函数ret = acl.himpi.pngd_create_chn**(chn, attr)**
函数功能根据设置的通道属性创建解码通道。
输入说明chn: 解码通道号。 该参数的取值范围为[0, 128),通道总数最多128。 attr(hi_pngd_chn_attr): 解码通道属性字典。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见PNGD图像解码返回码
约束说明- 单个Device上的通道号不能超出最大的通道号范围。
- 如果参数attr为空,会返回错误码HI_ERR_PNGD_NULL_PTR。
- 在创建PNG解码通道之前必须保证通道未创建(或者已经销毁),否则会直接返回错误。
- 系统内存不足时会返回HI_ERR_PNGD_NO_MEM的错误码,可考虑扩展操作系统内存。
- 当通道属性attr中的值超过解码能力集时,会返回HI_ERR_PNGD_ILLEGAL_PARAM的错误码。

父主题: PNGD图像处理接口

在线提单