内存被提前释放,导致解码数据花屏
内存被提前释放,导致解码数据花屏
现象描述
原始H264/H265每一帧视频流正常,解码过程无异常(无异常日志),仅仅输出图片有异常。
可能原因
解码过程无异常,说明送入的码流非异常码流,仅仅输出被破坏,可能由于:
-
输出内存被别人复用,被踩或者被提前释放;
-
解码需要的输出内存比实际申请的内存大。
处理步骤
- 对于DVPP内存申请接口,增加日志打印内存大小及地址,检查VDEC输出内存,检查申请的内存大小是否与实际使用的一致,比如典型的错误场景,VDEC解码输出格式预期是RGB,实际仍按照YUV420sp申请内存。
- 在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视频编码
内存被提前释放,导致编码数据花屏
现象描述
编码出来的数据花屏,其他无异常日志信息。
可能原因
VENC输入内存是YUV图片数据,输入内存被踩或者被提前释放。
处理步骤
在DVPP内存释放接口处、以及hi_mpi_venc_get_stream/aclvencCallback/acldvppJpegEncodeAsync接口处,增加内存大小及地址的打印日志,确认内存释放时序,是否存在输入内存在编码完成前被提前释放的情况。
父主题: JPEGE图片编码/VENC视频编码
使用正确的内存申请接口,但内存大小传值错误
现象描述
日志报错如下:
device:0 chan 0, output terminal address is invalid, maybe outBufSize:3110400 is invalid.
可能原因
传入的buffer size太大,超出了实际申请的buffer范围,导致内部结束地址校验出错。
处理步骤
如果内存申请接口使用正常,业务流程中dvpp内存申请接口增加地址及长度日志,检查接口hi_mpi_venc_send_frame/hi_mpi_venc_send_jpege_frame/aclvencSendFrame/acldvppJpegEncodeAsync传入buffer长度是否一致。
父主题: JPEGE图片编码/VENC视频编码
在线提单