VENC编码无输出
现象描述
VENC通道创建,发送帧都成功,但调用VENC获取码流的接口hi_mpi_venc_get_stream返回0xa008800e,获取不到编码后码流数据。
可能原因
可能原因有以下:
- 用户传入的图像帧内存不是使用dvpp内存申请接口hi_mpi_dvpp_malloc申请的。
- 用户传入的图像帧内存和分辨率不匹配。
- OS内存管理出现问题。
处理步骤
针对分析的可能原因,请参考以下方法处理:
- 查看日志是否有出现看门狗相关的打印,如下图所示,如果出现看门狗,基本可以确认是内存使用存在问题
[Chnl]:chnl_watch_dog_timer_isr [Line]:1141 find VEDU_0 down,now reset it [Chnl]:chnl_watch_dog_blackbox [Line]:1097 vpu_id is 0, venc watchdog fail enter blackbx
- 排查用户代码中输入图像帧的内存申请方式,如果不是使用dvpp内存申请接口hi_mpi_dvpp_malloc申请的,VENC芯片将无法正常访问该内存,导致编码无输出,需要修改为使用hi_mpi_dvpp_malloc申请输入内存。
- 排查输入图像帧的内存和分辨率是否不匹配,比如NV12或NV21格式的YUV,一帧图像大小为宽x高x1.5,如果实际送给VENC的内存大小比设置的分辨率宽x高x1.5小的话,会产生访问越界等不可预期的行为,也会导致编码无输出。需要保证申请的内存大小和实际设置的分辨率参数匹配。
- 如果以上排查都不存在问题,可能是OS的内存管理出现问题,您可以通过https://gitee.com/ascend网站提交issue获取帮助。
父主题: JPEGE图片编码/VENC视频编码