跳到主要内容

JPEGD功能及约束说明

acl.himpi.vpc_set_chn_workspace

c函数原型hi_s32 **hi_mpi_vpc_set_chn_workspace(**hi_vpc_chn chn, hi_vpc_workspace_param *workspace_param, hi_u32 param_cnt)
Python函数ret = acl.himpi.vpc_set_chn_workspace(chn, workspace_param**,** param_cnt**)**
函数功能调用本接口后,系统内部会根据输入图片、输出图片的最大宽高信息申请需使用的内部临时缓存,通过该接口申请的临时缓存,在销毁通道时会自动释放。同步接口。
输入说明- chn:int,图片处理通道号。
- Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),通道总数最多128。
- workspace_param:list,元素类型为hi_vpc_workspace_param字典的数组。 此处需根据所使用的Remap功能或仿射变换功能来设置hi_vpc_workspace_param["func"]参数值。 若在一个应用程序中,涉及Remap、仿射变换两种功能,则可以在hi_vpc_workspace_param数组中包含2个元素,一个元素的hi_vpc_workspace_param["func"]设置为REMAP,一个元素的hi_vpc_workspace_param["func"]设置为AFFINE。
- param_cnt:int,数组长度,需与workspace_param数组长度保持一致。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VPC图像处理返回码
约束说明对于每个通道,该接口只能设置一次,后续不能修改。

父主题: VPC图像处理接口

acl.himpi.vpc_warp_affine

c函数原型hi_s32 hi_mpi_vpc_warp_affine(hi_vpc_chn chn, hi_transform_matrix *matrix**, hi_warp_transform_param *transform_param, hi_u32 *task_id, hi_s32 milli_sec)**
Python函数task_id, ret = acl.himpi.vpc_warp_affine(chn, matrix, transform_param, milli_sec**)**
函数功能对输入图片做仿射变换。
输入说明- chn:int,图片处理通道号。
- Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),通道总数最多128。
- matrix:dict,仿射变换需要的变换矩阵信息字典,具体参见hi_transform_matrix。使用acl.himpi.vpc_get_affine_transform或者acl.himpi.vpc_get_rotation_matrix接口获取的仿射变换矩阵信息字典。
- transform_param:dict,仿射变换参数,在hi_warp_transform_param字典内配置输入、输出图片信息,相关约束请参见约束说明
- milli_sec:超时时间配置,单位是毫秒,取值范围如下。
- “-1”:阻塞方式。
- “0”:非阻塞方式。
- >0:超时方式,配置具体的超时时间。超时时间受操作系统影响,一般偏差在操作系统的一个时间片内,例如,操作系统的一个时间片为4ms,用户设置的milli_sec参数值为1,则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下,超时时间仍可能存在波动。
返回值说明- ret:int,错误码。
- 返回0表示成功。
- 返回非0表示失败,参见VPC图像处理返回码
- task_id:任务分配的ID,用来区分任务。

约束说明

  • 输入、输出图片分辨率的取值范围为:10*6~4096*8192。

  • 关于输入、输出图片格式的要求如下(关于图片宽高对齐、内存等约束,请参见约束说明):

    版本约束
    Atlas 200/500 A2推理产品- 支持如下输入图片格式:
    text<br> HI_PIXEL_FORMAT_YUV_400 = 0, // YUV400 8bit<br> HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // YUV420SP NV12 8bit <br> HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // YUV420SP NV21 8bit <br> HI_PIXEL_FORMAT_RGB_888 = 12, // RGB888<br> HI_PIXEL_FORMAT_BGR_888 = 13, // BGR888<br> HI_PIXEL_FORMAT_YUV_PACKED_444 = 11, // YUV444P 8bit<br> HI_PIXEL_FORMAT_YVU_PACKED_444 = 58, // YVU444P 8bit<br>
    - 支持如下输出图片格式:
    text<br> HI_PIXEL_FORMAT_YUV_400 = 0, // YUV400 8bit<br> HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // YUV420SP NV12 8bit <br> HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // YUV420SP NV21 8bit <br> HI_PIXEL_FORMAT_RGB_888 = 12, // RGB888<br> HI_PIXEL_FORMAT_BGR_888 = 13, // BGR888<br> HI_PIXEL_FORMAT_YUV_PACKED_444 = 11, // YUV444P 8bit<br> HI_PIXEL_FORMAT_YVU_PACKED_444 = 58, // YVU444P 8bit<br> HI_PIXEL_FORMAT_YUYV_PACKED_422 = 7, // YUV422P YUYV 8bit <br> HI_PIXEL_FORMAT_UYVY_PACKED_422 = 8, // YUV422P UYVY 8bit<br> HI_PIXEL_FORMAT_YVYU_PACKED_422 = 9, // YUV422P YVYU 8bit <br> HI_PIXEL_FORMAT_VYUY_PACKED_422 = 10, // YUV422P VYUY 8bit <br>
  • 在任务执行过程中,需要临时缓存,因此每个通道第一次执行本接口前需先调用acl.himpi.vpc_set_chn_workspace接口申请内部临时缓存。

  • 由于YUV格式图像下采样约束,当输出图片格式为YUV420SP或YUV422SP格式时,在配置边界填充类型时,建议设置为“边界复制模式”,避免输出图片边缘异常数据。

父主题: VPC图像处理接口

JPEGD功能及约束说明

功能说明

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

  • JPEGD在解码图片时,支持对图片进行旋转。

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

    :::note 说明 Atlas 200/500 A2推理产品上,JPEGD 422格式旋转图片,若原图高为奇数,并且旋转方式为宽高对换,则旋转后宽存在黑边,建议用户将向下对齐到偶数使用(即去除黑边),比如原图为200*101,若旋转后为101*200,则建议用户实际使用区域为100*200。

    Atlas 200/500 A2推理产品上,JPEGD 440格式旋转图片,若原图宽为奇数,并且旋转方式为宽高对换,则旋转后高存在黑边,建议用户将向下对齐到偶数使用(即去除黑边),比如原图为201*101,若旋转后为100*201,则建议用户实际使用区域为100*200。

    JPEGD 422格式旋转图片,若原图高为奇数,并且旋转方式为宽高对换,则旋转后宽存在黑边,建议用户将向下对齐到偶数使用(即去除黑边),比如原图为200*101,若旋转后为101*200,则建议用户实际使用区域为100*200。

    JPEGD 440格式旋转图片,若原图宽为奇数,并且旋转方式为宽高对换,则旋转后高存在黑边,建议用户将向下对齐到偶数使用(即去除黑边),比如原图为201*101,若旋转后为100*201,则建议用户实际使用区域为100*200。 :::

  • JPEGD在解码图片时,支持按源图片格式解码。

    源图片格式解码是指解码前后图片的编码格式保持一致,例如解码前输入图片为jpeg(440),解码后输出图片为YUV440SP V在前U在后或YUV440SP U在前V在后。

    使用源图片格式解码,有以下方式:

    • 在调用JPEGD解码接口时,直接将输出图片格式配置为“HI_PIXEL_FORMAT_UNKNOWN”,输出格式默认按源图片格式输出、且是V在前U在后的Semi-Planar格式。例如,JPEG源图片格式为jpeg(440),输出图片格式配置为“HI_PIXEL_FORMAT_UNKNOWN”,JPEGD解码后,实际输出图片格式为YUV440SP V在前U在后。

      此种方式,由于不知道输出图片格式,因此需要用户申请尽量大的内存或调用acl.himpi.dvpp_get_image_info接口获取解码输出内存大小,防止内存不够,无法存放输出图片。

    • 先调用acl.himpi.dvpp_get_image_info接口根据传入的jpeg源图片,获取按源图解码时的输出图片的宽、高、宽stride、高stride、解码输出内存大小、图片格式等信息后,再调用JPEGD解码接口,使用通过acl.himpi.dvpp_get_image_info接口获取的图片格式来设置输出图片格式。

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

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

图片分辨率约束

  • 输入图片分辨率

    版本分辨率范围
    Atlas 200/500 A2推理产品最大分辨率:16384*16384,最小分辨率:32*32。
  • 输出图片分辨率

    JPEGD只对图片解码,不会改变图片分辨率,因此输出与输入的图片分辨率保持一致。

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

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

  • 输入内存的大小就是指实际的输入图片所占用的大小。
  • 输出内存的大小参见下表中的计算公式。

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

:::note 说明 输出图片格式的定义请参见hi_pixel_format,宽stride、高stride等概念请参见基本概念。 :::

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

输入图片格式(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对齐

高无对齐要求

宽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对齐

宽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

软、硬件约束

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

精度相关约束

JPEGD+VPC串联使用时,由于JPEGD解码后的输出图片的宽stride*高stride有64*16对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以在执行VPC功能时(例如缩放时),需在输入图片的hi_vpc_pic_info["picture_width"]、hi_vpc_pic_info["picture_height"]属性处正确设置输入图片的原图宽高,这样VPC在缩放图片前会先根据原图宽高自行抠图,目的是去除无效数据对图像精度的影响。

其它注意事项

若图片内EOI(End Of Image,标记代码为0XFFD9)之后,还有用户自定义的数据,则JPEGD在对图片进行解码时,会直接清零EOI之后的8字节数据,若用户需要保留这些自定义的数据,则将图片数据读入内存之后,需要提前备份这部分数据,再传给JPEGD处理。

若需要查看图片内EOI之后是否存在自定义数据,可以使用二进制查看工具打开图片查看,例如下图中的FFD9标记符之后就存在自定义数据。

父主题: VDEC视频解码/JPEGD图像解码接口

JPEGD性能指标数据

性能指标说明

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

1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):

场景举例总帧率
1080p*n路(1≤n≤2)n*256fps
1080p*n路(n>2)512fps
4k*n路(1≤n≤2)n*64fps
4k*n路(n>2)128fps

父主题: VDEC视频解码/JPEGD图像解码接口

VDEC功能及约束说明

功能说明

VDEC(Video Decoder)实现视频的解码。

分辨率约束

  • 输入码流分辨率:

    版本分辨率范围
    Atlas 200/500 A2推理产品对于H264输入码流,最大分辨率8192*8192,最小分辨率128*128。 对于H265输入码流,最大分辨率5400*8192,最小分辨率128*128。
  • 输出图片分辨率:

    版本分辨率范围
    Atlas 200/500 A2推理产品输出图片最大分辨率8192*8192;当输入码流宽度小于或等于4096时,输出图片最小分辨率为10*6,当输入码流宽度大于4096时,输出图片最小分辨率为128*128。

内存申请/释放接口说明

输入内存的大小就是指实际的输入码流所占用的大小,输出内存的大小参见表1中的计算公式。

版本内存申请接口
Atlas 200/500 A2推理产品VDEC视频解码时,支持以下两种内存申请接口:
- 调用acl.rt.malloc[acl.rt.free](./aclpythondevg_01_0116.md)接口申请\释放Device上的输入、输出内存,这部分内存的生命周期由用户自行管理。
- 调用acl.himpi.dvpp_malloc[acl.himpi.dvpp_free](./aclpythondevg_01_0405.md)接口申请\释放Device上的输入、输出内存,这部分内存的生命周期由用户自行管理。
注意:调用acl.himpi.dvpp_malloc接口申请的内存为媒体数据处理的专用内存,但专用内存的地址空间有限,若关注内存规划或内存资源有限时,建议调用acl.rt.malloc接口申请内存。

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

实现VDEC视频解码功能时,输入或输出内存的生命周期由用户自行管理:

  • 输入码流格式。

    • H264 bp/mp/hp level5.1 YUV420编码的码流,当前只支持annex-B的裸码流。
    • H265 8/10bit level5.1 YUV420编码的码流,当前只支持annex-B的裸码流。
  • 输出图片要求:

    表1 码流/图片格式、宽高对齐、内存大小约束

    输出图片格式

    输出图片宽、高对齐要求

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

    Atlas 200/500 A2推理产品

    YUV420SP NV12 8bit

    宽2对齐

    高2对齐

    宽stride无对齐要求,与宽相同即可,最小10,最大24576。

    高stride无对齐要求,与高相同即可,最小6,最大24576。

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

    YUV420SP NV21 8bit

    宽2对齐

    高2对齐

    RGB888

    无对齐要求

    宽stride为宽乘以3的值,最小30,最大24576。

    高stride无对齐要求,最小6,最大24576。

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

    BGR888

    无对齐要求

    :::note 说明 输出图片格式的定义请参见hi_pixel_format,宽stride、高stride等概念请参见基本概念。 :::

其它约束

  • VDEC只支持对按帧输入码流进行解码。
  • 若码流中有坏帧、缺帧等情况,解码器VDEC解码时会将该帧标记为解码失败,并上报异常。
  • 通过隔行扫描方式编码出来的码流,VDEC仅支持解码H264 8bit编码的码流。
  • 同时配置按帧发送码流与按解码序输出,可以达到快速解码和快速输出的目的,但这种场景不支持解码含有B帧的码流。

父主题: VDEC视频解码/JPEGD图像解码接口

在线提单