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

利用 DirectShow 开发自己的 Filter

 2006-07-23 11:33:58 来源:WEB开发网   
核心提示: CMyFilter::CMyFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr):CBaseFilter(NAME("my filter"), pUnk, this, CLSID_MYFilter){ }CMyFilter::~

CMyFilter::CMyFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr)
      :CBaseFilter(NAME("my filter"), pUnk, this, CLSID_MYFilter)
{ }
CMyFilter::~CMyFilter()
{}
// Public method that returns a new instance.
CUnknown * WINAPI CMyFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)
{ 
  CMyFilter *pFilter = new CMyFilter(NAME("my Filter"), pUnk, pHr);
  if (pFilter== NULL)
  {
    *pHr = E_OUTOFMEMORY;
  }
  return pFilter;
}
CBasePin * CMyFilter::GetPin(int n)
{
  return NULL;
}
int CMyFilter::GetPinCount()
{
   return 0;
}

这样基本上就实现了一个filter,但是这个filter没有与之相联系的PIN,但是实现Filter的基本过程就时这样了,至于逻辑上的东西,比如Filter和pin如何连接,数据流是如何流动的,你都要去看看sdk了,按照上面的步骤你就可以写一个Filter的框架出来。

下面我们总结一下写一个Filter至少需要那些东西。

1、Filter的实现类

在这里就是CMyFilter类,在这个类里你可以实现自己的逻辑上的功能,包括定义你的filter的特性,给你的filter配备pin接口等。

2 com组件的引出函数,五个全局函数:

DllMain //dll的入口函数
DllGetClassObject //获得com组件的类厂对象
DllCanUnloadNow //com组件是否可以卸载
DllRegisterServer //注册com组件
DllUnregisterServer //卸载com组件
其中DllGetClassObject 已经由基类完成,你自己只要完成三个函数即可,
DllMain,DllRegisterServer,DllUnregisterServer。

3、com组件的类厂对象

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

Tags:利用 DirectShow 开发

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