功能及约束说明
Atlas 200/300/500 推理产品上,不支持本章中的PNGD功能。
Atlas 训练系列产品上,不支持本章中的PNGD功能。
功能说明
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
- 先调用hi_mpi_png_get_image_info接口根据传入的PNG源图片,获取按源图解码时的输出图片的宽、高、宽stride、高stride、解码输出内存大小、图片格式等信息后,再调用PNGD解码接口,使用通过hi_mpi_png_get_image_info接口获取的图片格式来设置输出图片格式。
内存申请/释放接口说明
输入内存的大小就是指实际的输入图片所占用的大小,输出内存的大小参见表1中的计算公式。
版本 |
内存申请/释放接口 |
---|---|
Atlas 推理系列产品 |
PNG图片解码时,调用hi_mpi_dvpp_malloc\hi_mpi_dvpp_free接口申请\释放Device上的输入、输出内存,这部分内存的生命周期由用户自行管理。 |
Atlas A2训练系列产品/Atlas 800I A2推理产品 Atlas 200/500 A2推理产品 |
PNG图片解码时,支持以下两种内存申请接口:
注意:调用hi_mpi_dvpp_malloc接口申请的内存为媒体数据处理的专用内存,但专用内存的地址空间有限,若关注内存规划或内存资源有限时,建议调用aclrtMalloc接口申请内存。 |
图片格式、宽高对齐、内存约束
若不确定输出格式、将输出图片格式设置为HI_PIXEL_FORMAT_UNKNOWN时:
- 宽stride:
如果输入图片是RGB或GRAY格式,则宽stride为输出图片的宽先向上128对齐后再乘以3的值;如果输入图片是RGBA或AGRAY格式,则宽stride为输出图片的宽先向上128对齐后再乘以4的值。
- 高stride:为输出图片的高向上16对齐后的值。
输入图片格式 |
输出图片格式 |
输出图片宽、高对齐要求 |
输出图片宽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 |
- 输出图片格式的定义请参见hi_pixel_format,宽stride、高stride等概念请参见基本概念。
- 如果用户将宽stride、高stride设置为0,传入对应的接口,PNGD内部在处理时,会默认根据输出图片格式将宽stride向上128对齐、高stride向上16对齐。
其它约束
PNGD只支持对完整PNG图片进行解码,不支持将一张PNG图片分割成多个数据包后,由PNGD解码。