HI35xx视频解码串扰调试总结

问题描述:

在HI35xx视频解码软件开发中VO通道的视频有串扰现象,表现为不同的视频画面快速切换而无法正常解码播放。

问题分析:

从视频处理流程图可以看出,VO的输出来自VPSS,VPSS的数据源自VI和VDEC,那么如果VO的输出异常的原因可能与VO、VPSS、VDEC、VI的配置以及它们之间的相互绑定关系有关,于是有可能是以下问题导致:

1、VO的配置异常,VO的WBC回写功能再次VO输出数据,导致重复输出。

2、多个VPSS对应一个VO,即将不同的视频同时向VO输出,典型的场景是回放解码的VPSS和预览的VPSS同时向VO输出。

3、VI、VDEC输入异常,即视频源有问题或者或多个数据源项VI或VDEC推数据。

问题定位与解决

应用层没有使用WBC功能,初步排除VO配置异常的问题;检查代码也可以轻松排除多个VPSS绑定了同一个VO;而多个数据源同时向VDEC推流的概率则很大,在多线程应用中,很有可能多个数据处理线程向VDEC推流。VDEC可以理解一个硬件设备,它是一个具有固定属性的模块,有自己ID,及VDEC的通道号。反过来看HI_MPI_VDEC_SendStream(ChnId, &stStream, flag)推流API接口,它有三个属性需要指定,通道号、视频流数据指针、推送模式标志位,由于VDEC具有固定属性的性质,所以它的ChnId在全局范围内都是有效的,因而很多程序员以为自己在不同的地方定义一个局部变量的ChnId,然后调用接口推流是相互独立不干扰的,其实不然,只要不同的地方定义ChnId值一样,就会导致视频串扰。

小结,对于具有固定属性的模块(VDEC、VPSS、VO)的编程操作要小心处理ChnId的使用,在具有不同线程下使用的最好加锁或者不用时必须及时释放。

猜你喜欢

转载自blog.csdn.net/dosthing/article/details/81139731