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

利用DirectShow开发自己的Filter

 2010-07-20 20:46:19 来源:WEB开发网   
核心提示:3、com组件的类厂对象类厂对象是用来生成Filter对象的,用的模板类定义了一个全局的模板类对象数组,利用DirectShow开发自己的Filter(7),一般格式如下:CFactoryTemplate g_Templates[1] ={{L"my filter",// Name&CLSID_MY

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>

智慧的鱼 aoosang 2004-09-01

本文配套源码

上一页  2 3 4 5 6 7 

Tags:利用 DirectShow 开发

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