【Directshow】Filter Graph的创建,IFilterGraph2, IGraphBuilder, IcaptureGraphBuiler2的区别

               操作filter之前,肯定要创建filter graph。几乎所有的介绍directshow的书和例子都用了 IGraphBuilder, IcaptureGraphBuiler2

这两个接口,当然IFilterGraph也有,少用。

 

             这三者有什么区别?

 

          【1】IFilterGraph2,IcaptureGraphBuiler2这两个filter的CLSID是不一样的。IFilterGraph2,IGraphBuilder是一样 的。

                  IFilterGraph2,IGraphBuilder注册在CLSID_FilterGraph下,IcaptureGraphBuiler2注册在CLSID_CaptureGraphBuilder2下。

          【2】对于IFilterGraph2来说,还有一个IFilterGraph,IFilterGraph3.

                  他们的继承关系为:

                  IFilterGraph——>IGraphBuilder——>IFilterGraph2——>IFilterGraph3

                      一般使用IGraphBuilder比较多

         【3】如果我们仅仅是显示预览UVC,可以只使用IFilterGraph2,通过pFilterGraph2->AddSourceFilterForMoniker(),

               用Moniker指针将filter添加到graph,则不必创建IcaptureGraphBuiler2这个接口。

         【4】IcaptureGraphBuiler2是一个专门用来进行视频,音频捕捉的增强型接口;如果要特别的编解码,用它就很方便。

                  但为什么一般创建了IcaptureGraphBuiler2,还要创建IGraphBuilder呢?

                  这是因为我们在预览视频时处理播放,暂停,停止这些动作,需要用到IGraphBuilder,而这些功能IcaptureGraphBuiler2

                 是没有的,所以需要而这协调处理。

                  IcaptureGraphBuiler2创建后,要将IGraphBuilder的指针与他关联:

                 pCaptureGraphBuiler2->captureGraphBuiler2(pGraphBuilder).

你可能感兴趣的:(【Directshow】Filter Graph的创建,IFilterGraph2, IGraphBuilder, IcaptureGraphBuiler2的区别)