JPEGD功能及约束说明
昇腾310 AI处理器上,该功能为预留功能,暂不支持。
昇腾910 AI处理器上,该功能为预留功能,暂不支持。
功能说明
JPEGD(JPEG Decoder)实现.jpg、.jpeg、.JPG、.JPEG图片的解码。实现JPEGD功能的接口请参见VDEC功能/JPEGD功能。
如果输入图片的码流中包含Orientation信息(代表捕获图像时摄像机相对于场景的方向),则JPEGD在解码时会解析Orientation信息,将图片进行90度、180度、270度或镜像旋转。旋转后输出图片的宽stride、高stride、输出内存仍需满足约束说明中的要求。如果输入图片的码流异常,导致JPEGD解码时无法读取Orientation信息,则不能实现图片旋转的功能。

若图片内EOI(End Of Image,标记代码为0XFFD9)之后,还有用户自定义的数据,则JPEGD在对图片进行解码时,会直接清零EOI之后的8字节数据,若用户需要保留这些自定义的数据,则将图片数据读入内存之后,需要提前备份这部分数据,再传给JPEGD处理。
若需要查看图片内EOI之后是否存在自定义数据,可以使用二进制查看工具打开图片查看,例如下图中的FFD9标记符之后就存在自定义数据。
约束说明
- 关于输入:
- 输入图片分辨率:
- 输入图片格式:
- 只支持Huffman编码,码流的colorspace为YUV,JPEG源图片格式为444/422/420/400/440;
- 不支持算术编码;
- 不支持渐进JPEG格式;
- 不支持JPEG2000格式。
- 输入内存:
- 输入内存首地址要求128对齐。Device的内存,调用hi_mpi_dvpp_malloc接口/hi_mpi_dvpp_free接口申请或释放内存,这部分内存的生命周期由用户自行管理。
- 输入内存的大小就是指实际的输入图片所占用的大小。
- 关于输出:
- 输出图片格式:
- jpeg(444) -> YUV444SP V在前U在后 、YUV444SP U在前V在后、YUV420 SP V在前U在后、YUV420SP U在前V在后。
- jpeg(422) -> YUV422SP V在前U在后、YUV422SP U在前V在后、YUV420SP V在前U在后、YUV420SP U在前V在后。
- jpeg(420) -> YUV420SP V在前U在后、YUV420SP U在前V在后。
- jpeg(400) -> YUV420SP V在前U在后、YUV420SP U在前V在后,UV数据采用0x80填充。
- jpeg(440) -> YUV440SP V在前U在后 、YUV440SP U在前V在后、YUV420 SP V在前U在后、YUV420SP U在前V在后。
如果不清楚JPEG源图片格式、但想使用源格式解码时,有以下两种方式:
- 在调用JPEGD解码接口时,直接将输出图片格式配置为HI_PIXEL_FORMAT_UNKNOWN,输出格式默认按源图片格式输出、且是V在前U在后的Semi-Planar格式。例如,JPEG源图片格式为jpeg(440),输出图片格式配置为HI_PIXEL_FORMAT_UNKNOWN,JPEGD解码后,实际输出图片格式为YUV440SP V在前U在后。
此种方式,由于不知道输出图片格式,因此需要用户申请尽量大的内存或调用hi_mpi_dvpp_get_image_info接口获取解码输出内存大小,防止内存不够,无法存放输出图片。
- 先调用hi_mpi_dvpp_get_image_info接口根据传入的jpeg源图片,获取按源图解码时的输出图片的宽、高、宽stride、高stride、解码输出内存大小、图片格式等信息后,再调用JPEGD解码接口,使用通过hi_mpi_dvpp_get_image_info接口获取的图片格式来设置输出图片格式。
源图片格式解码是指解码前后的编码格式保持一致,例如解码前输入图片为jpeg(440),解码后输出图片为YUV440SP V在前U在后。
JPEGD解码后的输出图片,如果要直接作为模型推理的输入,为了保证模型推理的精度,建议将输出图片格式配置为HI_PIXEL_FORMAT_UNKNOWN,这时JPEGD使用源图片格式解码(但这里要确保解码后的图片格式模型是支持的)。
JPEGD解码后的输出图片,如果直接作为VPC的输入,该场景下若使用源图片格式解码时,则需要关注解码后的输出图片格式VPC是否支持(VPC输入图片的格式请参见功能及约束说明),如果VPC不支持,则用户需按VPC支持的情况指定JPEGD的输出图片格式。
- 输出内存:
- 输出内存首地址要求128字节对齐。Device的内存,调用hi_mpi_dvpp_malloc接口/hi_mpi_dvpp_free接口申请或释放内存,这部分内存的生命周期由用户自行管理。
- 输出内存大小(单位Byte)与图片数据的格式相关,计算公式如下:
YUV420SP:widthStride*heightStride*3/2
YUV422SP/YUV440SP:widthStride*heightStride*2
YUV444SP:widthStride*heightStride*3
- 输出图片的widthStride、heightStride:
- 输出图片的widthStride(对齐后的宽度),对齐到64;
- 输出图片的heightStride(对齐后的高度),对齐到16。
- 输出图片格式:
- 关于JPEG解码的硬件约束:
- 最多支持4张Huffman表,其中包括2 张DC(Direct Current)(直流)表和2 张AC(Alternating Current)(交流)表;
- 最多支持3张量化表;
- 只支持8bit采样精度;
- 只支持对顺序式编码的图片进行解码;
- 只支持基于DCT(Discrete Cosine Transform)变换的JPEG 格式解码;
- 只支持一个SOS(Start of Scan)标志的图片解码。
- 关于JPEG解码的软件约束:
- 支持3个SOS标志的图片解码;
- 支持mcu(Minimum Coded Unit)数据不足的异常图片解码。
性能指标说明
JPEGD性能指标是基于硬件解码的性能,JPEGD硬件解码不支持3个SOS的图片解码,对于硬件不支持的格式,会使用软件解码,软件解码性能参考为1080P 15fps。JPEGD解码的输出图片如果涉及旋转,则性能指标低于软件解码的参考值,例如对于1080P的图片,性能指标低于15fps。
1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。单个Device的基本场景性能指标参考如下:
场景举例 |
总帧率 |
---|---|
1080p*n路(1≤n≤16) |
n*128fps |
1080p*n路(n>16) |
2048fps |
4k*n路(1≤n≤16) |
n*32fps |
4k*n路(n>16) |
512fps |