功能及约束说明

功能说明

JPEGD(JPEG Decoder)实现.jpg、.jpeg、.JPG、.JPEG图片文件的解码。

图片分辨率约束

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

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

实现JPEGD图片解码功能时,仅支持Huffman编码,压缩前的原图像色彩空间为YUV,像素的各分量比例为4 : 4 : 4或4 : 2 : 2或4 : 2 : 0或4 : 0 : 0或4 : 4 : 0,不支持算术编码、不支持渐进JPEG格式、不支持JPEG2000格式。

输出图片格式的定义请参见acldvppPixelFormat,宽Stride、高Stride等概念请参见基本概念

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

输入图片格式(YUV分量比例)

输出图片格式

输出图片宽、高对齐要求

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

Atlas 200/300/500 推理产品

Atlas 训练系列产品

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

Atlas 推理系列产品

Atlas 200I/500 A2推理产品

Atlas A2训练系列产品/Atlas 800I A2推理产品

jpeg(444)

YVU444SP 8bit

无对齐要求

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3

YUV444SP 8bit

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

YUV420SP NV21 8bit

jpeg(422)

YVU422SP 8bit

宽2对齐

高2对齐

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 2

YUV422SP 8bit

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

YUV420SP NV21 8bit

jpeg(420)

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

YUV420SP NV21 8bit

jpeg(400)

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

YUV420SP NV21 8bit

YUV400 8bit

Atlas 200/300/500 推理产品Atlas 训练系列产品不支持该格式

无对齐要求

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride

jpeg(440)

YVU440SP 8bit

宽2对齐

高2对齐

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 2

YUV440SP 8bit

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽Stride为宽128对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

宽Stride为宽64对齐后的值。

高Stride为高16对齐后的值。

内存大小(单位Byte)≥ 宽Stride * 高Stride * 3/2

YUV420SP NV21 8bit

软、硬件约束

精度相关约束

Atlas 200/300/500 推理产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽Stride * 高Stride有128 * 16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acl.media.dvpp_set_pic_desc_width和acl.media.dvpp_set_pic_desc_height接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。

Atlas 训练系列产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽Stride * 高Stride有128 * 16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acl.media.dvpp_set_pic_desc_width和acl.media.dvpp_set_pic_desc_height接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。

Atlas 200I/500 A2推理产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽Stride * 高Stride有64 * 16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acl.media.dvpp_set_pic_desc_width和acl.media.dvpp_set_pic_desc_height接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。

Atlas 推理系列产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽Stride * 高Stride有64 * 16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acl.media.dvpp_set_pic_desc_width和acl.media.dvpp_set_pic_desc_height接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。

Atlas A2训练系列产品/Atlas 800I A2推理产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽Stride * 高Stride有64 * 16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acl.media.dvpp_set_pic_desc_width和acl.media.dvpp_set_pic_desc_height接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。