Skip to main content

hi_mpi_vdec_get_display_mode

hi_mpi_vdec_get_jpegd_output_info

函数功能

图片解码场景下,根据输入码流,获取按源图格式或指定图片格式输出时的图片宽、高、宽stride、高stride、解码后占用的内存大小、图片格式等信息。

该接口会检查图片格式是否支持解码,如果遇到不支持的码流则该接口会返回HI_ERR_VDEC_NOT_SUPPORT错误码,该错误码的详细描述请参见公共返回码

函数原型

hi_s32 hi_mpi_vdec_get_jpegd_output_info(const hi_vdec_stream *stream, const hi_pixel_format output_format, hi_img_info *img_info)

参数说明

参数名输入/输出说明
stream输入输入码流信息的指针。 Atlas 200/500 A2推理产品,RC模式下,在Device上调用本接口时,该结构体内的addr参数配置的地址必须是Device上的内存地址。
output_format输入输出图片格式。 若按源图格式获取相关信息,则将该参数值设置为HI_PIXEL_FORMAT_UNKNOWN;若按指定格式获取相关信息,则将该参数值设置为对应的图片格式,支持的图片格式请参见图片格式、宽高对齐、内存约束
img_info输出输出图片信息结构体,包含图片宽、高、宽stride、高stride、解码后占用的内存大小、图片格式等信息。 其中,输出图片格式,通过img_pixel_format参数返回。

返回值说明

父主题: VDEC视频解码功能/JPEGD图片解码功能

hi_mpi_vdec_set_display_mode

函数功能

若调用hi_mpi_sys_bind接口绑定数据接收者VPSS与数据源VDEC后,可调用本接口设置显示模式。不设置显示模式时,默认为回放模式。

约束说明

  • 设置显示模式前必须保证通道已创建,否则会返回通道未创建的错误码HI_ERR_VDEC_UNEXIT。
  • 预览模式(HI_VIDEO_DISPLAY_MODE_PREVIEW):预览模式下VDEC绑定的直接后级模块(比如 VPSS)以非阻塞方式接收解码图像,即当VPSS的图像Buffer满时(解码帧存个数比 VPSS 缓存队列个数多), VPSS丢弃VDEC发送过来的图像,以达到不反压VDEC 解码的目的,实现实时预览。需要注意的是, 当解码帧存个数比VPSS缓存队列个数少时,即使开启预览模式, VPSS还是会反压解码。
  • 回放模式(HI_VIDEO_DISPLAY_MODE_PLAYBACK):回放模式下VDEC绑定的直接后级模块(比如 VPSS)以阻塞方式接收解码图像, 即当VPSS的图像Buffer满时,拒绝接收VDEC发送过来的图像, VDEC发现当前图像发送失败后启动图像重新发送机制,直到图像发送成功为止。回放模式下VDEC绑定的直接后级模块能够反压VDE 解码,以达到不丢弃任何一帧解码图像的回放效果。

函数原型

hi_s32 hi_mpi_vdec_set_display_mode(hi_vdec_chn chn, hi_video_display_mode display_mode)

参数说明

参数名输入/输出说明
chn输入解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。
display_mode输入显示模式枚举。

返回值说明

父主题: VDEC视频解码功能/JPEGD图片解码功能

hi_mpi_vdec_get_display_mode

函数功能

获取显示模式。

约束说明

获取显示模式前必须保证通道已创建,否则会返回通道未创建的错误码HI_ERR_VDEC_UNEXIT。

函数原型

hi_s32 hi_mpi_vdec_get_display_mode(hi_vdec_chn chn, hi_video_display_mode *display_mode)

参数说明

参数名输入/输出说明
chn输入解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。
display_mode输入显示模式枚举指针。

返回值说明

父主题: VDEC视频解码功能/JPEGD图片解码功能

JPEGE功能及约束说明

功能说明

JPEGE(JPEG Encoder)将YUV格式图片编码成JPEG压缩格式的图片文件,例如*.jpg。

图片分辨率约束

  • 输入图片分辨率:

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

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

内存申请/释放接口说明

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

版本输入内存申请接口输出内存申请接口
Atlas 200/500 A2推理产品JPEGE图片编码功能时,支持以下两种内存申请接口:
- 调用aclrtMalloc[aclrtFree](./aclcppdevg_03_0101.md)接口申请\释放Device上的输入内存,这部分内存的生命周期由用户自行管理。
- 调用hi_mpi_dvpp_malloc[hi_mpi_dvpp_free](./aclcppdevg_03_0726.md)接口申请\释放Device上的输入内存,这部分内存的生命周期由用户自行管理。
注意:调用hi_mpi_dvpp_malloc接口申请的内存为媒体数据处理的专用内存,但专用内存的地址空间有限,若关注内存规划或内存资源有限时,建议调用aclrtMalloc接口申请内存。
支持以下两种方式:
- 不需要用户管理、由DVPP内部管理输出内存时,调用hi_mpi_venc_send_frame接口发送原始图像进行图像编码。 在调用hi_mpi_venc_create_chn接口创建通道时,必须正确设置hi_venc_chn_attr.venc_attr.buf_size参数值(参数描述请参见hi_venc_attr)。 该方式下,相比由用户管理内存,输出结果数据的JPEG头中不存在COM注释字段,数据长度会短一点,但需要用户从DVPP返回的内存中拷贝输出结果数据到指定内存。
- 由用户自行管理输出内存、管理内存的生命周期,调用hi_mpi_venc_send_jpege_frame接口发送原始图像进行图像编码。 在调用hi_mpi_venc_create_chn接口创建通道时,需将hi_venc_chn_attr.venc_attr.buf_size参数值设置为0(参数描述请参见hi_venc_attr),然后调用hi_mpi_venc_get_jpege_predicted_size接口预估输出内存大小,调用hi_mpi_dvpp_malloc[hi_mpi_dvpp_free](./aclcppdevg_03_0726.md)接口申请\释放输出内存(也支持调用aclrtMalloc[aclrtFree](./aclcppdevg_03_0101.md)接口申请\释放Device上的输出内存)。 **该方式下,**直接在调用hi_mpi_venc_send_jpege_frame接口时,设置输出内存地址,输出结果数据直接存放到用户设置的内存中,相比由系统管理内存的方式,用户可减少一次“从DVPP返回的内存中拷贝输出结果数据到指定内存”的操作,但输出结果数据的JPEG头中可能会存在COM注释字段(字段长度范围4~19Byte),数据长度会长一点。

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

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

输入图片格式

输入图片宽、高对齐要求

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

输出图片格式

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽stride为宽16对齐后的值,兼容对齐到16的倍数如128(按128对齐时,性能更优)。

高stride无需设置。

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

JPEG压缩格式的图片文件,例如*.jpg。

只支持huffman编码,不支持算术编码,不支持渐进编码。

YUV420SP NV21 8bit

YUV422Packed YUYV 8bit

宽2对齐

高无对齐要求

宽stride为宽的两倍再16对齐后的值。

高stride无需设置。

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

YUV422Packed UYVY 8bit

YUV422Packed YVYU 8bit

YUV422Packed VYUY 8bit

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

父主题: VENC视频编码功能/JPEGE图片编码功能

JPEGE性能指标说明

性能指标说明

1080p指分辨率为1920*1080的图片;4K指分辨率为3840*2160的图片。

单个Device的基本场景性能指标参考如下(1路对应一个通道,一个通道对应一个线程):

表1 Atlas 200/500 A2推理产品性能规格数据

场景举例(输入图片格式:YUV420 8bit)总帧率
1080p*n路256fps
4k*n路64fps

父主题: VENC视频编码功能/JPEGE图片编码功能

VENC功能及约束说明

功能说明

VENC(Video Encoder)将YUV420SP NV12/NV21-8bit图片数据编码成H264/H265格式的视频码流。

分辨率约束

  • 输入图片分辨率:

    版本分辨率范围
    Atlas 200/500 A2推理产品最大分辨率8192*8192,最小分辨率114*114
  • 输出码流分辨率

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

内存申请/释放接口说明

输入内存的大小参见表1中的计算公式,输出内存无需用户管理、由系统管理。

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

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

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

输入图片格式

输入图片宽、高对齐要求

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

输出码流格式

YUV420SP NV12 8bit

宽2对齐

高2对齐

宽stride为宽16对齐后的值。

高stride无需设置。

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

  • H264 BP/MP/HP
  • H265 MP(仅支持Slice码流)

YUV420SP NV21 8bit

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

父主题: VENC视频编码功能/JPEGE图片编码功能

在线提单