本文主要是介绍《DirectShow开发指南》学习笔记_5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
智能连接
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:
enum
{ MERIT_PREFERRED = 0x800000,MERIT_NORMAL = 0x600000,MERIT_UNLIKELY = 0x400000,MERIT_DO_NOT_USE = 0x2
这篇关于《DirectShow开发指南》学习笔记_5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!