WEB开发网
开发学院软件开发VC 利用 DirectShow 开发自己的 Filter 阅读

利用 DirectShow 开发自己的 Filter

 2006-07-23 11:33:58 来源:WEB开发网   
核心提示: 最后,我们看一下Filter类的实现,利用 DirectShow 开发自己的 Filter(7),首先当然也要实现基类的所有纯虚函数,除此之外,所以特别简单,你可以参考我的demo,Filter还要实现CreateInstance以提供COM的入口,实现NonDelegatingQuery

最后,我们看一下Filter类的实现。首先当然也要实现基类的所有纯虚函数。除此之外,Filter还要实现CreateInstance以提供COM的入口,实现NonDelegatingQueryInterface以暴露支持的接口。如果我们创建了自定义的输入、输出Pin,一般我们还要重载GetPinCount和GetPin两个函数。

这里我主要为了举例,所以简单写的filter没有Pin接口,但在我的demo里的Filter,却是有个out pin和一个input pin。我的Filter类的定义如下:

class CMyFilter : public CCritSec, public CBaseFilter
{
public:
  CMyFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr);
  virtual ~CMyFilter();
  static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *phr);
  CBasePin *GetPin(int n);
  int GetPinCount(); 
} 

注:因为基类是一个纯虚的基类,所以在你的filter一定要派生一个其中的纯虚函数,否则编译器会提示你的派生类也是一个纯虚类,你在创建这个com组件对象的时候,纯虚类是没法创建对象的。

2、给自己的Filter生成一个CLSID

你可以用Guidgen or Uuidgen给自己的Filter生成一个128位的ID号,然后利用DEFINE_GUID宏在Filter的头文件声明该Filter的CLSID;

[myFilter.h]
// {1915C5C7-02AA-415f-890F-76D94C85AAF1}
DEFINE_GUID(CLSID_MYFilter,
0x1915c5c7, 0x2aa, 0x415f, 0x89, 0xf, 0x76, 0xd9, 0x4c, 0x85, 0xaa, 0xf1);

这个CLSID_MYFilter在类厂数组用到,在注册Filter时也要用到。

3、CMyFilter类的简单实现

这个类纯粹为了演示用,所以特别简单,你可以参考我的demo,那个filter写的功能比较全。

上一页  2 3 4 5 6 7 8 9  下一页

Tags:利用 DirectShow 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接