深入浅出Directshow Filter

深入浅出Directshow Filter

ID:47023411

大小:145.00 KB

页数:38页

时间:2019-06-27

深入浅出Directshow Filter_第1页
深入浅出Directshow Filter_第2页
深入浅出Directshow Filter_第3页
深入浅出Directshow Filter_第4页
深入浅出Directshow Filter_第5页
资源描述:

《深入浅出Directshow Filter》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、深入浅出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_pFilterO

3、bject=newCFilterClass();//maketheinitialrefcount1tomatchCOMcreationm_pFilterObject->AddRef();因为Filter的基类实现了对象的引用计数,所以即使在第二种情况下,对创建后的Filter对象的操作也完全可以遵循COM标准。Filter是一个独立功能模块,最好不要将Filter依赖于其他第三方的DLL。因为Filter具有COM的位置透明性特点,Filter文件可以放在硬盘的任何位置,只要位置移动后重新注册。

4、但此时,如果Filter依赖其他DLL,则Filter对该DLL的定位就会出现问题。Filter不能脱离FilterGraph单独使用。所以,如果你想绕过FilterGraph直接使用Filter实现的模块功能,请将你的Filter移植成DMO(DirectXMediaObject)。2.Filter的注册Filter是COM组件,所以在使用前一定要注册。Filter的注册程序为regsvr32.exe。如果带上命令行参数/u,表示注销;如果带上是/s,表示不弹出任何注册/注销成功与否的提示对话

5、框。如果你想在BuildFilter项目的时候进行自动注册,请在VC的Projectsettings的CustomBuild页如下设置:Description:RegisterfilterCommands:regsvr32/s/c$(TargetPath)echoregsvr32exe.time>38$(TargetDir)$(TargetName).trgOutputs:$(TargetDir)$(TargetName).trgFilter的注册信息包括两部分:基本的COM信息和Filte

6、r信息。注册信息都存放在注册表中。前者的位置为:HKEY_CLASSES_ROOTCLSIDFilterClsid,后者的位置为:HKEY_CLASSES_ROOTCLSIDCategoryInstanceFilterClsid。COM信息标示了Filter是一个标准的可以通过CoCreateInstance函数创建的COM组件,Filter信息标示了我们通过Graphedit看到的描述这个Filter的信息。如果你不想让Graphedit看到(或者让Filter枚举器找到)你写

7、的Filter,你完全可以不注册Filter信息。而且不用担心,你这么做也完全不会影响Filter的功能。屏蔽注册Filter信息的方法也很简单。因为CBaseFilter实现了IAMovieSetup接口的两个函数:Register和Unregister。我们只需重载这两个函数,直接returnS_OK就行了。(注意:IAMovieSetup是用以注册Filter信息部分的接口,但已经废弃,仅在AMovieDllRegisterServer和AMovieDllUnregisterServer调

8、用才会用到。新写的Filter注册函数一般使用AMovieDllRegisterServer2,这个函数不使用IAMovieSetup接口。如果想要不注册Filter信息,最好自己实现Filter的两个导出函数:DllRegisterServer和DllUnregisterServer,其中只使用RegisterAllServers函数注册OleServer。)Filter的Merit值。这个值是微软的“智能连接”函数使用的。在Graphedit中,当我们加入一个SourceFilter后,在它

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。