hi_mpi_vdec_get_frame
hi_mpi_vdec_set_protocol_param
函数功能
设置协议相关的内存分配通道参数,如slice、pps(Picture Parameter Set)、sps(Sequence Parameter Set)等。
不支持该接口。
约束说明
- 必须保证通道已创建,否则会返回错误码HI_ERR_VDEC_UNEXIST。
- 设置协议参数前必须先停止接收码流,否则返回错误码HI_ERR_VDEC_NOT_PERM。
- 切换协议参数时,解码器内部会复位解码通道。
- 协议参数所需的内存是解码器内部根据当前码流实际vps(Video Parameter Set)/sps/pps/slice个数使用vmalloc动态分配的,最大上限不超过此接口设置的最大vps/sps/pps/slice个数。
函数原型
hi_s32 hi_mpi_vdec_set_protocol_param(****hi_vdec_chn chn, const hi_vdec_protocol_param *protocol_param)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| chn | 输入 | 解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| protocol_param | 输入 | 解码通道参数指针。 |
返回值说明
- 0:成功
- 非0:失败,参见VDEC视频解码/JPEGD图片解码返回码
hi_mpi_vdec_get_protocol_param
函数功能
获取协议相关的内存分配通道参数,如slice、pps(Picture Parameter Set)、sps(Sequence Parameter Set)等。
约束说明
必须保证通道已创建,否则会返回错误码HI_ERR_VDEC_UNEXIST。
函数原型
hi_s32 hi_mpi_vdec_get_protocol_param(hi_vdec_chn chn, hi_vdec_protocol_param *protocol_param)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| chn | 输入 | 解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| protocol_param | 输出 | 解码通道参数指针。 |
返回值说明
- 0:成功
- 非0:失败,参见VDEC视频解码/JPEGD图片解码返回码
hi_mpi_vdec_send_stream
函数功能
解码前,向解码通道发送码流数据及存放解码结果的buffer。
约束说明
- 发送数据前必须保证已经调用hi_mpi_vdec_start_recv_stream接口启动接收码流,否则直接返回该操作不允许的错误码HI_ERR_VDEC_NOT_PERM。如果在发送数据过程中停止接收码流,就会立刻返回HI_ERR_VDEC_NOT_PERM。
- 发送数据前必须保证通道已经被创建,否则直接返回通道未创建的错误码HI_ERR_VDEC_UNEXIST。如果在发送码流过程中复位通道或者销毁通道,就会立刻返回错误码HI_ERR_VDEC_UNEXIST。
- 发送码流时需要按照创建解码通道时设置的发送方式(仅支持按帧发送)进行发送。按帧发送时,调用此接口一次,必须发送完整的一帧码流,否则,解码会出现错误。
- 不能发送end_of_stream为0的空码流包(码流长度为0或码流地址为空),否则返回错误码。发送end_of_stream为1的空码流包时,解码器会把所有码流全部解完并输出全部图像。除此之外,其它情况应该把end_of_stream置为0。
- 当码流buffer为空且装不下当前包码流时,会返回参数超出范围的错误码HI_ERR_VDEC_ILLEGAL_PARAM。
- 以非阻塞方式发送码流,如果码流缓冲区已满,会立刻返回错误码HI_ERR_VDEC_BUF_FULL。
- 以超时方式发送码流,到达设定的超时时间还不能成功发送码流会返回错误码HI_ERR_VDEC_BUF_FULL。
- 视频解码时支持设置是否将解码结果写入输出内存中,hi_vdec_stream结构体中将need_display设置为0时,此帧码流的解码结果将不会写入到hi_vdec_pic_info结构体中配置的输出内存中,此时允许将输出内存地址配置为NULL。hi_mpi_vdec_get_frame接口仍然能获取到结构hi_video_frame_info和hi_vdec_stream的信息,但是此时输出内存中无解码结果数据,需要用户释放输出内存(如果用户传入的输出内存地址是NULL,则无需释放)。
- 解码时,输入输出内存均需要在调用hi_mpi_vdec_get_frame接口获取结果之后才能进行释放。
- 视频解码,输入输出内存要求、输入码流格式、输出图片格式请参见VDEC功能及约束说明。
- 图像解码,输入输出内存要求、输入图片格式、输出图片格式请参见JPEGD功能及约束说明。
函数原型
hi_s32 hi_mpi_vdec_send_stream(hi_vdec_chn chn, const hi_vdec_stream *stream, hi_vdec_pic_info *vdec_pic_info, hi_s32 milli_sec)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| chn | 输入 | 解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| stream | 输入 | 输入码流信息的指针。 该结构体内的addr参数配置的地址为Device上的内存地址。 |
| vdec_pic_info | 输入 | 输出图片信息的指针。 |
| milli_sec | 输入 | 超时时间,单位是毫秒。 - -1:阻塞方式 - 0:非阻塞方式 - >0:超时方式,配置具体的超时时间。超时时间受操作系统影响,一般偏差在操作系统的一个时间片内,例如,操作系统的一个时间片为4ms,用户设置的milli_sec参数值为1,则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下,超时时间仍可能存在波动。 |
返回值说明
- 0:成功
- 非0:失败,参见VDEC视频解码/JPEGD图片解码返回码
参考资源
接口调用流程及示例,参见JPEGD图片解码、VDEC视频解码。
hi_mpi_vdec_get_frame
函数功能
解码后,获取解码通道的解码图像及输入Stream。
JPEGD图像解码场景下,在调用本接口时,如果硬件解码失败,则会在本接口内部触发软件解码。
约束说明
- 向VDEC获取解码结果,输入buffer和输出buffer一起获取。
- JPEGD图片解码时,默认对于jpeg(420)、jpeg(422)、jpeg(440)格式的输入图片,如果输入图片的宽高为奇数,JPEGD解码输出图片的宽高为向下2对齐;默认对于jpeg(444)、jpeg(400)格式的输入图片,JPEGD解码输出图片的宽高与输入图片保持一致。若需调整输出图片的宽、高对齐模式,可调用hi_mpi_vdec_set_jpegd_precision_mode接口。
函数原型
hi_s32 hi_mpi_vdec_get_frame(hi_vdec_chn chn, hi_video_frame_info *frame_info, hi_vdec_supplement_info *supplement, hi_vdec_stream *stream, hi_s32 milli_sec)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| chn | 输入 | 解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| frame_info | 输出 | 已解码的图像信息的指针。解码后的数据存放在Device内存中。 |
| supplement | 输出 | 解码图像补充信息的指针。预留参数,暂未使用,建议用户设置为NULL。 |
| stream | 输出 | 已解码的输入码流信息指针。 |
| milli_sec | 输入 | 超时时间,单位是毫秒。 - -1:阻塞方式 - 0:非阻塞方式 - >0:超时方式,配置具体的超时时间。超时时间受操作系统影响,一般偏差在操作系统的一个时间片内,例如,操作系统的一个时间片为4ms,用户设置的milli_sec参数值为1,则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下,超时时间仍可能存在波动。 (说明:JPEGD图像解码场景下,此处配置的超时时间仅指获取硬件解码结果的等待时间,不包含软件解码的时间。) |
返回值说明
-
0:成功,获取解码数据成功后,需调用hi_mpi_vdec_release_frame接口释放解码相关资源。
本接口虽返回成功,但有可能获取到的是解码失败的数据,解码是否成功,需要查看hi_video_frame_info结构体的v_frame成员下的frame_flag参数值说明。
-
非0:失败,参见VDEC视频解码/JPEGD图片解码返回码
注意:
- 如果在解码图像时未创建通道,则会返回错误码HI_ERR_VDEC_UNEXIST。
- 如果在获取图像的过程中销毁通道,则会返回错误码HI_ERR_VDEC_UNEXIST。
- 如果在获取解码图像的过程中复位通道,则会返回错误码HI_ERR_VDEC_UNEXIST。
- 以非阻塞方式获取解码图像,如果缓冲区内无图像,则会返回错误码HI_ERR_VDEC_BUF_EMPTY。
- 以超时方式获取解码图像,到达设定的超时时间还不能获取到硬件解码结果则会返回错误码HI_ERR_VDEC_BUF_EMPTY,此时则可增大超时时间,或循环调用本接口等待解码结果。
参考资源
接口调用流程及示例,参见JPEGD图片解码、VDEC视频解码。
hi_mpi_vdec_release_frame
函数功能
解码之后,释放资源。
约束说明
- 此接口需与hi_mpi_vdec_get_frame配对使用,获取的数据应当在使用完之后立即释放,如果不及时释放,会导致解码过程阻塞等待资源。
- 释放的数据必须是调用hi_mpi_vdec_get_frame接口从该通道获取的数据,不得对数据信息结构体进行任何修改。
函数原型
hi_s32 hi_mpi_vdec_release_frame(hi_vdec_chn chn, const hi_video_frame_info *frame_info)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| chn | 输入 | 解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
| frame_info | 输入 | 解码后的图像信息指针,调用hi_mpi_vdec_get_frame接口获取。 |
返回值说明
- 0:成功
- 非0:失败,参见VDEC视频解码/JPEGD图片解码返回码
参考资源
接口调用流程及示例,参见JPEGD图片解码、VDEC视频解码。
hi_mpi_vdec_get_fd
函数功能
获取视频解码通道的设备文件句柄。
约束说明
在进程退出时会自动关闭文件句柄,回收资源。
函数原型
hi_s32 hi_mpi_vdec_get_fd(hi_vdec_chn chn)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| chn | 输入 | 解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
返回值说明
- 0或正数值:有效返回值
- 非正数值:无效返回值
hi_mpi_vdec_close_fd
函数功能
关闭视频解码的设备文件句柄。
不支持该接口。
函数原型
hi_s32 hi_mpi_vdec_close_fd(hi_vdec_chn chn)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| chn | 输入 | 解码通道号。 Atlas 200/500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128。 |
返回值说明
- 0:成功
- 非0:失败,参见VDEC视频解码/JPEGD图片解码返回码
在线提单