写一个Filter至少需要那些东西。[转贴]

  写一个Filter至少需要那些东西。

[文章信息]
作者: 智慧的鱼
时间: 2004-12-20
出处: 天极网


  1、Filter的实现类

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

  2、com组件的引出函数

  五个全局函数:

  DllMain //dll的入口函数
  DllGetClassObject //获得com组件的类厂对象
  DllCanUnloadNow //com组件是否可以卸载
  DllRegisterServer //注册com组件
  DllUnregisterServer //卸载com组件

  其中DllGetClassObject 已经由基类完成你自己只要完成三个函数即可DllMain,DllRegisterServer,DllUnregisterServer。

  3、com组件的类厂对象

  类厂对象是用来生成Filter对象的,用的模板类定义了一个全局的模板类对象数组,一般格式如下

CFactoryTemplate g_Templates[1] =
{
 {
  L"my filter", // Name
  &CLSID_MYFilter, // CLSID
  CMyFilter::CreateInstance, // Method to create an instance of MyComponent
  NULL, // Initialization function
  &sudInfTee // Set-up information (for filters)
 }
};
int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]);

  4、关于你自己定义的Filter以及Pin的信息
 
  这些是一个全局的结构变量,用于描述你的Filter和你定义的pin,在注册Filter的时候会用到,如下

  AMOVIESETUP_FILTER 描述一个Filter
  AMOVIESETUP_PIN 描述pin
  AMOVIESETUP_MEDIATYPE 描述数据类型

  下面的代码描述了一个Filter带有一个output PIN

static const WCHAR g_wszName[] = L"Some Filter";
AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {
 { &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },
 { &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },
};
AMOVIESETUP_PIN sudOutputPin = {
 L"", // Obsolete, not used.
 FALSE, // Is this pin rendered?
 TRUE, // Is it an output pin?
 FALSE, // Can the filter create zero instances?
 FALSE, // Does the filter create multiple instances?
 &GUID_NULL, // Obsolete.
 NULL, // Obsolete.
 2, // Number of media types.
 sudMediaTypes // Pointer to media types.
};

AMOVIESETUP_FILTER sudFilterReg = {
 &CLSID_SomeFilter, // Filter CLSID.
 g_wszName, // Filter name.
 MERIT_NORMAL, // Merit.
 1, // Number of pin types.
 &sudOutputPin // Pointer to pin information.
};

  最后如果你还是调试通不过,看看你是否包含了下面的头文件

#include streams.h
#include initguid.h
#include tchar.h
#include stdio.h

你可能感兴趣的:(filter)