写一个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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值