Directshow怎么查询graph里面的filter类型啊?
我用IGraphBuilder的Rendfile方法,创建了一个链路,然后用IEnumFilters发现这里面有Default directsound device,Video Render,MPEGLayer-3 Decoder,Xvid MPEG-4 Video Decoder,"E:/movie/testA.avi(应该是source filter)。
现在问题来了,我想用Rendfile智能创建一条链路,然后修改里面其中的一个filter为自己写的filter,比如说上面的Video Render,我想把它改成my Render(自己写的filter),之前我的做法是按名字来查找,然后给替换掉的。现在考虑到未来的兼容性,比如说以后的Rendfile方法,最末端的不是Video Render这个怎么办,所以按名字找总不是个可靠的方法吧?想问问大家directshow里面有没有查找filter大类的方法呢?就是想知道一个filter是Source类、还是Splitter类,还是Decompress类,还是Render类,或者Device类这其中的某一个类型,这样以后我枚举的时候,就直接找到Render类,把它替换就可以了,不知道有没有哪个函数能区别出来?
[解决办法]
用IFilterGraph::EnumFilters 枚举所有的filters,拿到IBaseFilter之后通过IBaseFilter::QueryFilterInfo来获取filter的名字,然后通过这个名字来判断是哪些filter,不过这个方法并不太好,你要是想插入自己特定的一些filter的话,最好先把filter插入到graph, 然后调用IGraphBuilder::Render这样的话比较保险。