directshow使用自定义的filter(多输入,单输出)出现cpu使用率过高的问题,filter的丢帧处理

研究directshow有一段时间了,也该写点心得什么的了。最近写了一个多输入单输出的自定义filter,参考的是sdk的inftee中的例子,调试了很长时间,终于能用了,但是不用不知道一看cpu占用率吓一跳啊。filter的具体设计是这样的:共有5个输入pin,一个输出pin,一个输入pin连接来自摄像头的视频流,它的帧数据交由该输出pin处理;其他四个连接gif流(也可以不连接源,是动态的),但是运行起过滤器图表后,如果连接上一个gif流,cpu使用率达到50%,而如果连接两个gif流,则达到90%以上,根本无法忍受。找了很长时间,一直没发现是什么原因。后来在做其他的功能时,又遇到类似的情况,最终测试发现,原来是没有对输入pin中的帧数据进行及时的丢帧处理。所以如果是一般的过滤器图表的连接(没有自定义的filter),那么只需添加一个null render就可以了,将帧丢掉;如果是自定义的filter,如上面我提到的,那么不能只使用一个输出pin,只能实现一个多输入多输出的形式、一个pin实现原来的功能、连接下游输入pin,其他4个连接null render的输入pin,也是丢帧处理。这样cpu使用率过高的问题就得到完美解决了。

PS:这里,小弟有一个疑问:在我提到的多输入单输出的自定义filter中,是不是可以在传输的内部进行实现(也就是说在filter内部实现丢帧处理),不需要再连接null render 进行丢帧处理,也就不用非得实现一个多输入多输出的自定义filter了呢?本人新手,还请高手不吝赐教,谢谢!

展开阅读全文

没有更多推荐了,返回首页