智能连接
Filter通过Pin这样的连接,就能“串联”起来,从而构建一个完整的Filter Graph。
Filter Graph的构建方法大概有以下几种:
- IFilterGraph::AddFilter:该参数提供一个Filter对象,将其加入到Filter Graph中;
- IFilterGraph::ConnectDirect:该参数提供输出Pin、输入Pin以及媒体类型,进行直接的连接;
- IGraphBuilder::AddSourceFilter:该参数提供源文件名,自动将一个Source Filter加入到Filter Graph中;
- IGraphBuilder::Connect:该参数提供输出pin和输入pin进行连接,如果连接失败,自动尝试在中间插入必要的格式转换Filter;
- IGraphBuilder::Render:该参数提供输出pin,自动加入必要的Filter完成剩下部分Filter Graph的构建(直到连接到Rendering Filter);
- IGraphBuilder::RenderFile:该参数提供源文件名,自动加入必要的Filter完成这个文件的回放Filter Graph构建
后4种构建方法都有“自动”的功能。在DirectShow中,这种“自动”机制也称为智能连接(Intelligent Connect)。
在介绍智能连接的具体实现过程之前,先要来看一下Filter的Merit值。这个Merit值可以理解成为Filter被智能连接所使用的优先级。DirectShow定义了6种标准的Merit值,Filter的Merit值只有在大于MERIT_DO_NOT_USE的时候,才有可能被智能连接所使用,而在同等条件下(几个Filter完成的功能相同),Merit的值越大,这个Filter被使用的机会也就越大。在开发自己的Filter的过程中,可以取任何DWORD类型的值来设置自己的Filter的Merit值,但推荐的一种做法是,在标准值上加一个偏移量,如MERIT_DO_NOT_USE+1:

本文介绍了DirectShow中Filter Graph的构建方法,特别是智能连接机制。讲解了IFilterGraph、IGraphBuilder和IGraphConfig接口在构建和优化Filter Graph中的作用,包括AddFilter、ConnectDirect、AddSourceFilter、Connect、Render和RenderFile等方法。同时,讨论了Filter的Merit值对智能连接的影响,以及如何修改Filter的Merit值和优先使用特定Filter。
最低0.47元/天 解锁文章
593

被折叠的 条评论
为什么被折叠?



