跳到主要内容

读/写内存地址无效,导致异常中断

调用错误的内存申请接口,导致内存地址校验出错

现象描述

日志报错如下:

device 0, vpc address is illegal, please make sure it has been allocated with hi_mpi_dvpp_malloc or acldvppMalloc.

可能原因

根据日志提示,是由于没有使用指定的接口申请内存。

处理步骤

检查代码,是否使用媒体数据处理V1版本中的acldvppMalloc接口/媒体数据处理V2版本中的hi_mpi_dvpp_malloc接口申请存放VPC输入或输出数据的内存。

父主题: VPC图片处理

使用正确的内存申请接口,但内存大小传值错误

现象描述

  • 日志1

    buffer size(3110400) is smaller than need buffer size(4147200) when format is 3.
  • 日志2

    device 0, vpc end address is illegal, check allocated buffer size: configured buffer size: 3110400, current pic: format 3 width_stride 1920 height_stride 1080.

可能原因

  1. 代码中申请的内存大小小于该格式所需的输入或输出内存大小;

  2. VPC任务接口传入的buffer size正常,与输入格式匹配,但是超出了实际申请的内存长度,所以校验出来结束地址非法。

处理步骤

  1. 检查代码,根据图片格式、宽高对齐、内存约束中的说明,检查对应格式的内存大小要求;

  2. 在代码中增加打印内存长度的日志,检查VPC任务接口传入的buffer size是否与实际申请的内存长度一致。

父主题: VPC图片处理

读/写内存地址无效,导致异常中断

现象描述

Device侧内核态日志报错VPC异常:

  • 日志1:

    vpc get err int: vpc_cvdr_axi_rd_resp_err
  • 日志2:

    vpc get err int: vpc_cvdr_axi_wr_resp_err

可能原因

  • cvdr_axi_rd_resp_err表示读地址越界,可能申请的输入内存太小或内存地址无效,昇腾AI处理器执行读操作时访问到了无效地址。
  • cvdr_axi_wr_resp_err表示写地址越界,可能申请的输出内存太小或内存地址无效,昇腾AI处理器执行写操作时访问到了无效地址。

处理步骤

  1. 在申请DVPP内存的接口处、以及在VPC异常任务接口处增加日志打印,检查申请的输入\输出内存大小与实际使用的输入\输出内存大小是否一致;

  2. 在释放DVPP内存的接口处增加打印日志,检查VPC任务完成之前是否存在内存被提前释放的情况。

父主题: VPC图片处理

调用错误的内存申请接口,导致内存地址校验出错

现象描述

日志报错如下:

address check failed ret 0x3, please check: 1. use hi_mpi_dvpp_malloc or aclDvppMalloc to alloc dvpp memory; 2. current buffer size 3110400 may be larger than actually allocated.

可能原因

根据日志提示,可能由于:

  1. 没有使用指定的DVPP内存申请接口;

  2. 接口传入的buffer size小于实际申请的内存大小。

处理步骤

检查代码:

  1. 是否使用媒体数据处理V1版本中的acldvppMalloc接口/媒体数据处理V2版本中的hi_mpi_dvpp_malloc接口申请存放JPEGD图片解码/VDEC视频解码输入或输出数据的内存;

  2. 对于DVPP内存申请接口,增加日志打印内存大小及地址,检查接口hi_mpi_vdec_get_frame/aclvdecSendFrame/acldvppJpegDecodeAsync送入的buffer size是否超出了实际申请的内存区域。

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

内存被提前释放,导致解码数据花屏

现象描述

原始H264/H265每一帧视频流正常,解码过程无异常(无异常日志),仅仅输出图片有异常。

可能原因

解码过程无异常,说明送入的码流非异常码流,仅仅输出被破坏,可能由于:

  1. 输出内存被别人复用,被踩或者被提前释放;

  2. 解码需要的输出内存比实际申请的内存大。

处理步骤

  1. 对于DVPP内存申请接口,增加日志打印内存大小及地址,检查VDEC输出内存,检查申请的内存大小是否与实际使用的一致,比如典型的错误场景,VDEC解码输出格式预期是RGB,实际仍按照YUV420sp申请内存。
  2. 在DVPP内存释放接口处、以及hi_mpi_vdec_get_frame/aclvdecCallback/acldvppJpegDecodeAsync接口处,增加内存大小及地址的打印日志,确认内存释放时序,是否存在内存地址解码完成前被提前释放的情况。

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

调用错误的内存申请接口,导致内存地址校验出错

现象描述

日志报错如下:

  • 日志1

    device:0 chan 0, venc or jpege input buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or aclDvppMalloc.
  • 日志2

    device:0 chan 0, venc or jpege output buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or aclDvppMalloc.
  • 日志3

    device:0 chan 0, jpege input buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or aclDvppMalloc.
  • 日志4

    device:0 chan 0, jpege output buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or aclDvppMalloc.

可能原因

根据日志提示,是由于没有使用指定的接口申请内存。

处理步骤

使用媒体数据处理V1版本中的acldvppMalloc接口/媒体数据处理V2版本中的hi_mpi_dvpp_malloc接口申请DVPP内存,存放JPEGE图片编码/VENC视频编码输入或输出数据。

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

在线提单