下载
中文
注册

功能及约束说明

功能及约束说明

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

如果输入图片的码流中包含Orientation信息(代表捕获图像时摄像机相对于场景的方向),则JPEGD在解码时会解析Orientation信息,将图片进行90度、180度、270度或镜像旋转。旋转后输出图片的宽stride、高stride、输出内存仍需满足•JPEGD输出的约束:中的要求。如果输入图片的码流异常,导致JPEGD解码时无法读取Orientation信息,则不能实现图片旋转的功能。

  • JPEGD输入的约束
    • 输入图片分辨率:
      • 最大分辨率:8192*8192,最小分辨率:32*32。
    • 输入图片格式:
      • 只支持Huffman编码,码流的colorspace为YUV,码流的subsample为444/422/420/400/440。
      • 不支持算术编码。
      • 不支持渐进JPEG格式。
      • 不支持JPEG2000格式。
    • 输入内存:
      • 输入内存首地址要求128对齐。调用acldvppMalloc接口/acldvppFree接口申请或释放内存,这部分内存的生命周期由用户自行管理。
      • 输入内存的大小就是指实际的输入图片所占用的大小。
  • JPEGD输出的约束
    • 输出图片格式:

      针对不同的源图编码格式,解码后,输出如下格式的图片:

      • 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源图片格式时,将输出图片格式配置为PIXEL_FORMAT_UNKNOWN,输出格式默认按源图片格式输出、且是V在前U在后的Semi-Planar格式。例如,JPEG源图片格式为jpeg(440),输出图片格式配置为PIXEL_FORMAT_UNKNOWN,JPEGD解码后,实际输出图片格式为YUV440SP V在前U在后。

      源图片格式解码是指解码前后的编码格式保持一致,例如解码前输入图片为jpeg(440),解码后输出图片为YUV440SP V在前U在后或YUV440SP U在前V在后。获取JPEGD解码前输入图片的源图编码格式,可调用acldvppJpegGetImageInfoV2接口。

      JPEGD解码后的输出图片,如果要直接作为模型推理的输入,建议将输出图片格式配置为PIXEL_FORMAT_UNKNOWN,这时JPEGD使用源图片格式解码(但这里要确保解码后的图片格式模型是支持的),保证模型推理的精度。

      JPEGD解码后的输出图片,如果直接作为VPC的输入,该场景下若使用源图片格式解码时,则需要关注解码后的输出图片格式VPC是否支持(VPC输入图片的格式请参见功能及约束说明),如果VPC不支持,则用户需按VPC支持的情况指定JPEGD的输出图片格式。

    • 输出内存:
      • 输出内存首地址要求128字节对齐。调用acldvppMalloc接口/acldvppFree接口申请或释放内存,这部分内存的生命周期由用户自行管理。

        如果申请大块内存时,内存申请计算应该是(n表示图片数量):输出内存大小 +(n-1)*AlignTo128(输出内存大小+8)

      • 输出内存大小(单位Byte)与图片数据的格式相关,计算公式如下(也可以调用acldvppJpegPredictDecSize接口预估输出内存大小):

        YUV420SP:大于或等于widthStride*heightStride*3/2

        YUV422SP/YUV440SP:大于或等于widthStride*heightStride*2

        YUV444SP:大于或等于widthStride*heightStride*3

    • 输出图片的widthStride、heightStride:
      • 输出图片的widthStride(对齐后的宽度):

        昇腾310 AI处理器,要求对齐到128。

        昇腾910 AI处理器,要求对齐到128。

      • 输出图片的heightStride(对齐后的高度),对齐到16。
  • 关于硬件约束
    • 最多支持4张Huffman表,其中包括2 张DC(直流)表和2 张AC(交流)表。
    • 最多支持3张量化表。
    • 只支持8bit采样精度。
    • 只支持对顺序式编码的图片进行解码。
    • 只支持基于DCT(Discrete Cosine Transform)变换的JPEG 格式解码。
    • 只支持一个SOS(Start of Scan)标志的图片解码。
  • 关于软件约束
    • 支持3个SOS标志的图片解码。
    • 支持mcu(Minimum Coded Unit)数据不足的异常图片解码。
    • JPEGD+VPC串联使用时:

      昇腾310 AI处理器上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽stride*高stride有128*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acldvppSetPicDescWidth和acldvppSetPicDescHeight接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。

      昇腾910 AI处理器上,JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽stride*高stride有128*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需调用acldvppSetPicDescWidth和acldvppSetPicDescHeight接口正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。

性能指标说明(昇腾310 AI处理器

JPEGD性能指标是基于硬件解码的性能,JPEGD硬件解码不支持3个SOS的图片解码,对于硬件不支持的格式,会使用软件解码,软件解码性能参考为1080P 15fps。JPEGD解码的输出图片如果涉及旋转,则性能指标低于软件解码的参考值,例如对于1080P的图片,性能指标低于15fps。

1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。单个Device的基本场景性能指标参考如下:

场景举例

总帧率

1080p*1路

128fps

1080p*n路(n≥2)

256fps

4k*1路

32fps

4k*n路(n≥2)

64fps

上述性能数据,基于以下基本要求

  • 一个stream上下发1个异步媒体数据处理任务后,执行一次aclrtSynchronizeStream接口。
  • CtrlCPU与AI CPU的配比是4:4

性能指标说明(昇腾910 AI处理器

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

上述性能数据,基于以下基本要求:

  • 一个stream上下发1个异步媒体数据处理任务后,执行一次aclrtSynchronizeStream接口。
  • CtrlCPU与AI CPU的配比是1:15