JPEGD(JPEG Decoder)实现.jpg、.jpeg、.JPG、.JPEG图片文件的解码。
如果输入图片的码流中包含Orientation信息(代表捕获图像时摄像机相对于场景的方向),则JPEGD在解码时会解析Orientation信息,将图片进行90度、180度、270度或镜像旋转。旋转后输出图片的宽stride、高stride、输出内存仍需满足图片格式、宽高对齐、内存约束中的要求。
如果输入图片的码流异常,导致JPEGD解码时无法读取Orientation信息,则不能实现图片旋转的功能。
Atlas A2训练系列产品上,JPEGD 422格式旋转那图片,若原图高为奇数,并且旋转方式为宽高对换,则旋转后宽存在黑边,建议用户将宽向下对齐到偶数使用(即去除黑边),比如原图为200*101,若旋转后为101*200,则建议用户实际使用区域为100*200。
Atlas A2训练系列产品上,JPEGD 440格式旋转那图片,若原图宽为奇数,并且旋转方式为宽高对换,则旋转后高存在黑边,建议用户将高向下对齐到偶数使用(即去除黑边),比如原图为201*101,若旋转后为100*201,则建议用户实际使用区域为100*200。
Atlas 200/300/500 推理产品上,多路并发解码JPEG图片场景下,如果解码的JPEG图片中,包含带旋转信息的大分辨率图片,例如3840*2160分辨率及以上的图片,则可能导致图片解码时间过长,从而导致用户进程超时退出。详细描述请参见JPEGD图像解码进程超时退出。
源图片格式解码是指解码前后图片的编码格式保持一致,例如解码前输入图片为jpeg(440),解码后输出图片为YUV440SP V在前U在后或YUV440SP U在前V在后。
使用源图片格式解码,有以下方式:
JPEGD解码后的输出图片,如果要直接作为模型推理的输入,建议将输出图片格式配置为PIXEL_FORMAT_UNKNOWN,这时JPEGD使用源图片格式解码(但这里要确保解码后的图片格式模型是支持的),保证模型推理的精度。
JPEGD解码后的输出图片,如果直接作为VPC的输入,该场景下若使用源图片格式解码时,则需要关注解码后的输出图片格式VPC是否支持(VPC输入图片的格式请参见约束说明),如果VPC不支持,则用户需按VPC支持的情况指定JPEGD的输出图片格式。
实现JPEGD图片解码功能时,需调用acldvppMalloc接口申请Device上的输入、输出内存,调用acldvppFree接口释放输入、输出内存,这部分内存的生命周期由用户自行管理。
实现JPEGD图片解码功能时,仅支持Huffman编码,压缩前的原图像色彩空间为YUV,像素的各分量比例为4:4:4或4:2:2或4:2:0或4:0:0或4:4:0,不支持算术编码、不支持渐进JPEG格式、不支持JPEG2000格式。
输出图片格式的定义请参见acldvppPixelFormat,宽stride、高stride等概念请参见基本概念。
输入图片格式(YUV分量比例) |
输出图片格式 |
输出图片宽、高对齐要求 |
输出图片宽stride、高stride、内存大小要求 |
---|---|---|---|
jpeg(444) |
YVU444SP 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3 |
YUV444SP 8bit |
|||
YUV420SP NV12 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
|
YUV420SP NV21 8bit |
|||
jpeg(422) |
YVU422SP 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 2 |
YUV422SP 8bit |
|||
YUV420SP NV12 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
|
YUV420SP NV21 8bit |
|||
jpeg(420) |
YUV420SP NV12 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
YUV420SP NV21 8bit |
|||
jpeg(400) |
YUV420SP NV12 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
YUV420SP NV21 8bit |
|||
jpeg(440) |
YVU440SP 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 2 |
YUV440SP 8bit |
|||
YUV420SP NV12 8bit |
无对齐要求 |
宽stride为宽128对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
|
YUV420SP NV21 8bit |
输入图片格式(YUV分量比例) |
输出图片格式 |
输出图片宽、高对齐要求 |
输出图片宽stride、高stride、内存大小要求 |
---|---|---|---|
jpeg(444) |
YVU444SP 8bit |
无对齐要求 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3 |
YUV444SP 8bit |
|||
YUV420SP NV12 8bit |
宽2对齐 高2对齐 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
|
YUV420SP NV21 8bit |
|||
jpeg(422) |
YVU422SP 8bit |
宽2对齐 高2对齐 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 2 |
YUV422SP 8bit |
|||
YUV420SP NV12 8bit |
宽2对齐 高2对齐 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
|
YUV420SP NV21 8bit |
|||
jpeg(420) |
YUV420SP NV12 8bit |
宽2对齐 高2对齐 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
YUV420SP NV21 8bit |
|||
jpeg(400) |
YUV420SP NV12 8bit |
宽2对齐 高2对齐 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 3/2 |
YUV420SP NV21 8bit |
|||
YUV400 8bit |
无对齐要求 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride |
|
jpeg(440) |
YVU440SP 8bit |
宽2对齐 高2对齐 |
宽stride为宽64对齐后的值。 高stride为高16对齐后的值。 内存大小(单位Byte)≥ 宽stride * 高stride * 2 |
YUV440SP 8bit |
|||
YUV420SP NV12 8bit |
宽2对齐 高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功能时(例如缩放时),需调用acldvppSetPicDescWidth和acldvppSetPicDescHeight接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。
在Atlas 训练系列产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽stride*高stride有128*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acldvppSetPicDescWidth和acldvppSetPicDescHeight接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。
在Atlas 推理系列产品和Atlas A2训练系列产品上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽stride*高stride有64*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acldvppSetPicDescWidth和acldvppSetPicDescHeight接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。