Skip to main content

hi_mpi_pngd_destroy_chn

功能及约束说明

功能说明

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
  • 先调用hi_mpi_png_get_image_info接口根据传入的PNG源图片,获取按源图解码时的输出图片的宽、高、宽stride、高stride、解码输出内存大小、图片格式等信息后,再调用PNGD解码接口,使用通过hi_mpi_png_get_image_info接口获取的图片格式来设置输出图片格式。

图片分辨率约束

  • 输入图片分辨率:

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

  • 输出图片分辨率

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

内存申请/释放接口说明

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

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

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

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

  • 宽stride:

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

  • 高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

:::note 说明

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

其它约束

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图片解码功能

hi_mpi_pngd_create_chn

函数功能

根据设置的通道属性创建解码通道

约束说明

  • 单个Device上的通道号不能超出最大的通道号范围。
  • 如果参数attr为空,会返回错误码HI_ERR_PNGD_NULL_PTR。
  • 在创建PNG解码通道之前必须保证通道未创建(或者已经销毁),否则会直接返回错误。
  • 系统内存不足时会返回HI_ERR_PNGD_NO_MEM的错误码,可考虑扩展OS内存。
  • 当通道属性attr中的值超过解码能力集时,会返回HI_ERR_PNGD_ILLEGAL_PARAM的错误码。

函数原型

hi_s32 hi_mpi_pngd_create_chn(hi_pngd_chn chn, const hi_pngd_chn_attr *attr)

参数说明

参数名输入/输出说明
chn输入解码通道号。 该参数的取值范围:[0, 128),通道总数最多128。
attr输入解码通道属性指针。

返回值说明

父主题: PNGD图片解码功能

hi_mpi_pngd_destroy_chn

函数功能

用户退出流程时,需要关闭之前创建的解码通道,以释放相关资源。

约束说明

销毁前必须保证通道已创建,否则会返回通道未创建的错误。

函数原型

hi_s32 hi_mpi_pngd_destroy_chn(hi_pngd_chn chn)

参数说明

参数名输入/输出说明
chn输入解码通道号。 该参数的取值范围:[0, 128),通道总数最多128。

返回值说明

父主题: PNGD图片解码功能

hi_mpi_pngd_send_stream

函数功能

解码前,向解码通道发送码流数据及存放解码结果的buffer。

约束说明

  • 发送数据前必须保证通道已经被创建,否则直接返回通道未创建的错误码HI_ERR_PNGD_UNEXIST。如果在发送码流过程中销毁通道,就会立刻返回错误码HI_ERR_PNGD_UNEXIST。
  • 发送码流时需要送入整张png图片。否则,解码会出现错误。
  • 以非阻塞方式发送码流,如果码流缓冲区已满,会立刻返回错误码HI_ERR_PNGD_BUF_FULL。
  • 以超时方式发送码流,到达设定的超时时间还不能成功发送码流会返回错误码HI_ERR_PNGD_BUF_FULL。
  • 图像解码时,对输入、输出图片的要求请参见功能及约束说明
  • 解码时,输入输出内存必须使用hi_mpi_dvpp_malloc接口和hi_mpi_dvpp_free接口进行申请和释放,输入输出内存均需要在调用hi_mpi_pngd_get_image_data接口获取结果之后才能进行释放。

函数原型

hi_s32 hi_mpi_pngd_send_stream(hi_pngd_chn chn, const hi_img_stream *stream, hi_pic_info *png_pic_info, hi_s32 milli_sec)

参数说明

参数名输入/输出说明
chn输入解码通道号。 该参数的取值范围:[0, 128),通道总数最多128。
stream输入输入码流信息的指针。 该结构体内的addr参数配置的地址为Device上的内存地址。
png_pic_info输入输出图片信息的指针。
milli_sec输入超时时间,单位是毫秒。
- -1:阻塞方式
- 0:非阻塞方式
- >0:超时方式,配置具体的超时时间。超时时间受操作系统影响,一般偏差在操作系统的一个时间片内,例如,操作系统的一个时间片为4ms,用户设置的milli_sec参数值为1,则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下,超时时间仍可能存在波动。

返回值说明

父主题: PNGD图片解码功能

hi_mpi_pngd_get_image_data

函数功能

解码后,获取解码通道的解码图像及输入Stream。

约束说明

  • 此接口通过改变milli_sec值支持阻塞方式、非阻塞方式、超时方式获取解码图像。
  • 获取解码图像时必须保证通道已经被创建,否则直接返回通道未创建的错误码HI_ERR_PNGD_UNEXIST。如果在获取图像的过程中销毁通道,就会立刻返回错误码 HI_ERR_PNGD_UNEXIST。
  • 以非阻塞方式获取解码图像,如果缓冲区内无图像,会立刻返回错误码HI_ERR_PNGD_BUF_EMPTY。
  • 以超时方式获取解码图像,到达设定的超时时间还不能获取到图像则会返回错误码 HI_ERR_PNGD_BUF_EMPTY。
  • 向PNGD获取解码结果,输入buffer和输出buffer一起获取。
  • PNGD图片解码时,关于输入、输出图片的要求请参见功能及约束说明

函数原型

hi_s32 hi_mpi_pngd_get_image_data(hi_pngd_chn chn, hi_pic_info *png_pic_info, hi_img_stream *stream, hi_s32 milli_sec)

参数说明

参数名输入/输出说明
chn输入解码通道号。 该参数的取值范围:[0, 128),通道总数最多128。
png_pic_info输出已解码的图像信息的指针。解码后的数据存放在Device内存中。
stream输出已解码的输入码流信息的指针。
milli_sec输入超时时间,单位是毫秒。
- -1:阻塞方式
- 0:非阻塞方式
- >0:超时方式,配置具体的超时时间。超时时间受操作系统影响,一般偏差在操作系统的一个时间片内,例如,操作系统的一个时间片为4ms,用户设置的milli_sec参数值为1,则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下,超时时间仍可能存在波动。

返回值说明

  • 0:获取数据成功
  • 非0:失败,参见PNGD图像解码返回码。HI_ERR_PNGD_BUF_EMPTY表示无数据,其他错误码表示解码异常

父主题: PNGD图片解码功能

hi_mpi_png_get_image_info

函数功能

根据输入码流,获取png源图片的宽、高、源格式及源格式解码时输出图片的宽stride、高stride、以及所需的内存大小等信息。

约束说明

提供给用户来计算解码后输出图片占用的内存大小。当前仅支持解析png图片。通过本接口获取的widthStride向上128对齐、heightStride向上16对齐。

函数原型

hi_s32 hi_mpi_png_get_image_info(const hi_img_stream *png_stream, hi_img_info *img_info)

参数说明

参数名输入/输出说明
png_stream输入输入码流信息的指针。
img_info输出图片信息的指针。

返回值说明

父主题: PNGD图片解码功能

在线提单