acl.himpi.venc_set_roi_attr
acl.himpi.venc_get_ref_param
| c函数原型 | hi_s32 hi_mpi_venc_get_ref_param(hi_venc_chn chn, const hi_venc_ref_param *ref_param) |
|---|---|
| Python函数 | ref_param, ret = acl.himpi.venc_get_ref_param(chn) |
| 函数功能 | 获取H.264/H.265编码通道高级跳帧参考参数。关于高级跳帧模式的详细说明请参见高级跳帧模式说明。 |
| 输入说明 | chn:int,编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 |
| 返回值说明 | - ref_param:dict,H.264/H.265编码通道高级跳帧参考参数字典。参见hi_venc_ref_param。 - ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码。 |
| 约束说明 | 本接口在编码通道创建之后、编码通道销毁之前调用。 |
父主题: VENC视频/JPEGE图像编码接口
acl.himpi.venc_set_ref_param
| c函数原型 | hi_s32 hi_mpi_venc_set_ref_param(hi_venc_chn chn, const hi_venc_ref_param *ref_param) |
|---|---|
| Python函数 | ret = acl.himpi.venc_set_ref_param(chn, ref_param**)** |
| 函数功能 | 设置H.264/H.265编码通道高级跳帧参考参数,用于改变帧间参考关系。关于高级跳帧模式的详细说明请参见高级跳帧模式说明。 |
| 输入说明 | - chn:int,编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 - ref_param:dict,H.264/H.265编码通道高级跳帧参考参数字典。参见hi_venc_ref_param。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码。 |
| 约束说明 | - 创建H.264/H.265协议编码通道时,默认跳帧参考模式是1倍跳帧参考模式。如果用户需要修改编码通道的跳帧参考,建议在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。 - 本接口在编码过程中被调用时,等到下一个I帧时生效。 - 如果用户设置1倍跳帧参考模式,对应的配置为:pred_en=HI_TRUE, enhance=0 ,base =1;如果设置2倍跳帧参考模式,对应的配置为: pred_en= HI_TRUE,enhance=1, base = 1;如果设置 4 倍跳帧参考模式,对应的配置为: pred_en =HI_TRUE, enhance = 1, base = 2。 - 如果用户设置通道的Gop Mode为HI_VENC_GOP_MODE_DUAL_P时,sp_interval只支持设置为sp_interval = (enhance+1 )*base,其中,当 sp_interval 不为0时, pred _en只支持设置为 HI_TRUE。 - 如果用户设置通道的Gop Mode为HI_VENC_GOP_MODE_SMART_P时,pred_en只支持设置为HI_TRUE 。 - 如果用户设置通道的Gop Mode为HI_VENC_GOP_MODE_BIPREDB时,enhance必须等于b_frame_num 。 |
高级跳帧模式说明
高级跳帧参考模式涉及3 个参数:base、enhance 和pred_en,其含义请参考hi_venc_ref_param。高级跳帧参考模式示意图如下图所示。
-
注意:dual_p 模式且sp_interval不等于0下配置高级跳帧参考需要满足如下条件:base *(enhance+1)= sp_interval,例如:4 倍高级跳帧参考(base=2,enhance=1),那么dual_p 的sp_interval =2*(1+1)=4。
-
normal_p高级跳帧参考示意图

-
smart_p高级跳帧参考示意图

-
adv_smart_p高级跳帧参考示意图

-
dual_p (sp_interval!=0)高级跳帧参考示意图

-
dual_p (sp_interval=0)高级跳帧参考示意图

父主题: VENC视频/JPEGE图像编码接口
acl.himpi.venc_get_roi_attr
| c函数原型 | hi_s32 hi_mpi_venc_get_roi_attr(hi_venc_chn chn, hi_u32 idx, hi_venc_roi_attr *roi_attr) |
|---|---|
| Python函数 | roi_attr**, ret = acl.himpi.venc_get_roi_attr(chn, idx)** |
| 函数功能 | 获取H.264/H.265通道的ROI配置属性。关于ROI编码功能的详细说明请参见ROI编码功能说明。 |
| 输入说明 | - chn:int,编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 - idx:int,H.264/H.265协议编码通道ROI区域索引。 |
| 返回值说明 | - roi_attr:dict,ROI区域参数字典。参见hi_venc_roi_attr。 - ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码。 |
| 约束说明 | - 本接口用于获取H.264/H.265协议编码通道的指定索引号的ROI配置。 - 本接口在编码通道创建之后,编码通道销毁之前调用。 - 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。 |
父主题: VENC视频/JPEGE图像编码接口
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_UNKNOWN RGB888 RGBA/AGRAY 将输出图片格式设置为HI_PIXEL_FORMAT_UNKNOWN RGBA8888 -
先调用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图像处理接口
在线提单