更新时间:2021-03-18 GMT+08:00
分享

VPC调用失败

现象描述

VPC模块调用失败,查看日志有类似如下报错信息:

日志信息(1):

roiNum(0), input rightOffset(1918) is not odd

日志信息(2):

if format is yuv420sp or yuv400, bareDataBufferSize(2073600) should be equel to widthStride(1920) * heightStride(1088) * 3/2

日志信息(3):

input widthStride(300) is not right, it should be 16 algined and not be smaller than 32.

日志信息(4):

cmdListBufferAddr is null, make sure bareDataAddr(0xaaaadeacdce0) is allocated by acldvppMalloc.

日志信息(5):

roi(1) outputAddr(0xaaaadeccdcd0) should be in same 4G space with firstOutputAddr(0xffff00002000).

日志信息(6):

please check roi(0) input crop area.Crop area must be in image area and large than 10*6.cropWidth(8), cropHeight(8), imageWidth(128), imageHight(16), leftOffset(0), rightOffset(7), upOffset(0), downOffset(7).

日志信息(7):

scale must be in [1/32, 16], cropWidth(3840), outputAreaWidth(112), cropHeight(2160),outputAreaHeight(112), please check roi(0).

可能原因

针对上面日志信息分析,可能存在以下对应原因:

  • 日志信息(1):VPC抠图区域右偏移坐标需是奇数,日志信息里1918是偶数,不符合要求。
  • 日志信息(2):当输入格式为yuv420sp或者yuv400时,输入内存大小应该等于宽stride*高stride*3/2,日志信息显示不满足这个条件。
  • 日志信息(3):输入图片的宽stride(即每行图像占用的内存大小)必须是16倍数。日志信息里宽stride是300,不满足16倍数的要求,需要将图像做对齐后,并将宽stride设置成对齐后的值。
  • 日志信息(4):VPC的输入内存需要使用acldvppMalloc接口申请。
  • 日志信息(5):VPC的输出内存需要使用acldvppMalloc接口申请。
  • 日志信息(6):VPC的抠图区域必须大于等于10*6,日志信息里抠图的宽只有8,因此报错。
  • 日志信息(7):VPC的缩放范围为[1/32, 16],日志信息提示了缩放范围,并且显示了抠图宽为3840,输出区域的宽为112,通过计算可以得到:112/3840 < 1/32,因此报错。

定位思路

  1. 根据日志描述的错误信息,找到VPC对应的配置参数,根据提示进行修改。
  2. 根据日志描述的错误信息,参考应用软件开发指南中VPC参数的约束修改。

处理步骤

根据提示的错误信息进行修改:

  1. 如果为日志信息(1),说明输入图片抠图区域的右偏移错误,应该设置为奇数。
  2. 如果为日志信息(2),说明输入内存的大小不正确,应该检查申请输入内存的代码,申请内存大小应该为1920*1088*3/2,并且bareDataBufferSize这个值也要填写为1920*1088*3/2。
  3. 如果为日志信息(3),说明输入图片的stride值不符合要求,需设置为16的倍数。
  4. 如果为日志信息(4)和日志信息(5),代码中申请内存时,需要使用acldvppMalloc接口申请。
  5. 如果为日志信息(6),需要修改抠图宽度。
  6. 如果为日志信息(7),需要修改缩放范围。
分享:

    相关文档

    相关产品

关闭导读