欢迎来到天天文库
浏览记录
ID:57138586
大小:93.00 KB
页数:48页
时间:2020-08-03
《深入浅出Directshow Filter演示教学.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、深入浅出DirectshowFilter精品文档深入浅出DirectShowFilterFilter概述Filter是一个COM组件,由一个或多个Pin组成。Pin也是一个COM组件。Filter文件的扩展名为.ax,但也可以是.dll。Filter根据其包含Inputpin或Outputpin的情况(或在FilterGraph的位置),大致可分为三类:SourceFilter(仅有Outputpin)、TransformFilter(同时具有Inputpin和Outputpin)和RendererFilter(仅有Inputpin)。一般情况下
2、,创建Filter使用一个普通的Win32DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过CoCreateInstance函数Filter实例;Filter与应用程序在二进制级别的协作。另外一种方法,也可以在MFC的应用程序项目中创建Filter。这种情况下,Filter不需注册为COM组件,Filter与应用程序之间的协作是源代码级别的;创建Filter实例,不再使用CoCreateInstance函数,而是直接new出一个Filter对象,如下: m_pFilterObject=newCFilterClass();//m
3、aketheinitialrefcount1tomatchCOMcreationm_pFilterObject->AddRef();因为Filter的基类实现了对象的引用计数,所以即使在第二种情况下,对创建后的Filter对象的操作也完全可以遵循COM标准。Filter是一个独立功能模块,最好不要将Filter依赖于其他第三方的DLL。因为Filter具有COM的位置透明性特点,Filter文件可以放在硬盘的任何位置,只要位置移动后重新注册。但此时,如果Filter依赖其他DLL,则Filter对该DLL的定位就会出现问题。收集于网络,如有侵权请
4、联系管理员删除精品文档Filter不能脱离FilterGraph单独使用。所以,如果你想绕过FilterGraph直接使用Filter实现的模块功能,请将你的Filter移植成DMO(DirectXMediaObject)。2.Filter的注册Filter是COM组件,所以在使用前一定要注册。Filter的注册程序为regsvr32.exe。如果带上命令行参数/u,表示注销;如果带上是/s,表示不弹出任何注册/注销成功与否的提示对话框。如果你想在BuildFilter项目的时候进行自动注册,请在VC的Projectsettings的Custom
5、Build页如下设置: Description:Registerfilter Commands:regsvr32/s/c$(TargetPath) echoregsvr32exe.time>$(TargetDir)$(TargetName).trg Outputs:$(TargetDir)$(TargetName).trgFilter的注册信息包括两部分:基本的COM信息和Filter信息。注册信息都存放在注册表中。前者的位置为:HKEY_CLASSES_ROOTCLSIDFilterClsid,后者的位置为:HKEY_CLASSES_
6、ROOTCLSIDCategoryInstanceFilterClsid。COM信息标示了Filter是一个标准的可以通过CoCreateInstance函数创建的COM组件,Filter信息标示了我们通过Graphedit看到的描述这个Filter的信息。如果你不想让Graphedit看到(或者让Filter枚举器找到)你写的Filter,你完全可以不注册Filter信息。而且不用担心,你这么做也完全不会影响Filter的功能。屏蔽注册Filter信息的方法也很简单。因为CBaseFilter实现了IAMovieSetup接口的两个函
7、数:Register和Unregister。我们只需重载这两个函数,直接return收集于网络,如有侵权请联系管理员删除精品文档S_OK就行了。(注意:IAMovieSetup是用以注册Filter信息部分的接口,但已经废弃,仅在AMovieDllRegisterServer和AMovieDllUnregisterServer调用才会用到。新写的Filter注册函数一般使用AMovieDllRegisterServer2,这个函数不使用IAMovieSetup接口。如果想要不注册Filter信息,最好自己实现Filter的两个导出函数:DllRe
8、gisterServer和DllUnregisterServer,其中只使用RegisterAllServers函数注册OleServe
此文档下载收益归作者所有