利用 directshow 开发自己的 filter

利用 directshow 开发自己的 filter

ID:12539639

大小:206.50 KB

页数:13页

时间:2018-07-17

利用 directshow 开发自己的 filter_第1页
利用 directshow 开发自己的 filter_第2页
利用 directshow 开发自己的 filter_第3页
利用 directshow 开发自己的 filter_第4页
利用 directshow 开发自己的 filter_第5页
资源描述:

《利用 directshow 开发自己的 filter》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、http://www.vckbase.com利用DirectShow开发自己的Filter作者:智慧的鱼源代码下载  学习directshow已经有几天了,下面将自己的学习心得写下来,希望对其他的人有帮助。Filter实质是个COM组件,所以学习开发Filter之前你应该对com的知识有点了解。Com组件的实质是一个实现了纯虚指针接口的C++对象。关于com的东西,这里不多讲。一、给vc配置DirectShow的开发环境  无论开发Filter还是开发Dshow的应用程序都要配置一下开发环境的,其

2、实就是包含一下dshow用到的头文件和动态库。选择Tools菜单下面的Options。在弹出的Option对话框配置如下:图1添加头文件选择动态库文件添加到工程中图2添加动态库二、创建工程以及Filter的入口函数创建工程:  一般情况下,创建Filter使用一个普通的Win32DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过CoCreateInstance函数Filter实例;Filter与应用程序在二进制级别的协作。另外一种方法,也可以在MFC的应用程序项目中创建Filt

3、er。在vc里新建一个工程,选择win32动态库,如下图图3图4  这样生成了一个简单的DLL,只有一个Dllmain入口函数。下面我要给这个filter添加入口函数了。Filter是个基于DLL的com组件,所以一般的Filter都要实现下面几个入口函数:DllMainDllGetClassObjectDllCanUnloadNowDllRegisterServerDllUnregisterServer首先定义导出函数:  要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspe

4、c(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。使用导出函数关键字_declspec(dllexport)创建MyDll.dll就是在.h文件中定义定义函数如下:extern"C"_declspec(dllexport)BOOLDllRegisterServer;等等  为了用.def文件创建DLL,往该工程中加入一个文本文件,命名为MyDll.def,再在该文件中加入如下代码:LIBRARYMyFilter.axEXPORTSDllMainPRIVATEDll

5、GetClassObjectPRIVATEDllCanUnloadNowPRIVATEDllRegisterServerPRIVATEDllUnregisterServerPRIVATE  其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加@n,如Max@1,Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。该DLL编译成功后,打开工程中的Debug目录,同样也会看到MyDll.dll和MyDll.

6、lib文件。  然后要定义这些函数的实现了,其实这些工作dshow的基类里都已经替我们做好了,我们所要做的就拿来用就是了,最重要的三个函数的实现一般如下 STDAPIDllRegisterServer(){returnAMovieDllRegisterServer2(TRUE);}STDAPIDllUnregisterServer(){returnAMovieDllRegisterServer2(FALSE);}extern"C"BOOLWINAPIDllEntryPoint(HINSTANCE,

7、ULONG,LPVOID);BOOLAPIENTRYDllMain(HANDLEhModule,DWORDdwReason,LPVOIDlpReserved){returnDllEntryPoint((HINSTANCE)(hModule),dwReason,lpReserved);}  其中DllEntryPoint是在C:DX90SDKSamplesC++DirectShowBaseClassesdllentry.cpp定义的,如果感兴趣我们可以去看看它的定义。AMovieDllR

8、egisterServer2函数是在下面C:DX90SDKSamplesC++DirectShowBaseClassesdllsetup.cpp这个文件定义的,具体实现可以自己看看。  到了这里你恐怕要做点工作,还是要设置一下你的项目环境,否则恐怕你编译是通不过的,因为你用到了基类的一些东西,所以你要将你的dshow基类的定义和库文件包含进来。首先包含:#includeStreams.h其次在Project–Setting菜单下配置自己的Filter输出的名字和连接的l

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

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

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