DirectShow基础编程 最简单transform filter 编写步骤

目标编写一个transform filter,功能是对图像进行翻转。

MSDN中有一章 "Writing Transform Filters" 列出了编写transform filter的六个基本步骤,我们按照这六个步骤一步一步来。

 

一、选择基类

从CBaseFilter派生出三个用于编写transform filter的类,分别是:CTransformFilter 、CTransInPlaceFilter 和CVideoTransformFilter ,三个基类的区别可以看MSDN的说明,我们选择CTransformFilter类。

选择好基类,我们就创建一个空的DLL工程,添加三个文件,分别是:FlipFilter.h、FlipFilter.cpp和FlipFilter.def。

 

二、声明Filter类

在FlipFilter.h中添加下列代码声明

 

三、媒体类型协商

这一步是Filter的pin在连接的时候必须进行的步骤,主要重载三个函数:

1、HRESULT CheckInputType(const CMediaType *mtIn);

CTransformFilter使用CTransformInputPin类作为输入pin,CTransformInputPin::CheckMediaType(const CMediaType* pmt)中调用m_pTransformFilter->CheckInputType(pmt);因此我们可以简单的认为CheckInputType就是输入pin的CheckMediaType。这样设计的是为了不需要重新定义输入pin类,只需要定义Filter类,简化编写Transform filter的步骤,另外的几个接口也是这样的一个设计原理。

2、HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);

同样的,这个函数也是为输入pin所写。

3、HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);

这个函数是输出pin调用。CTransformOutputPin::CheckMediaType(const CMediaType* pmtOut)中调用m_pTransformFilter->CheckTransform。

 

四、协商分配器的属性,决定数据的属性

这个函数由CTransformOutputPin::DecideBufferSize调用。

 

五、实现数据转换

 

六、添加COM信息,使DLL成为filter

1、创建filter实例,这是标准格式

2、声明工厂类模版

3、注册和注销filter,DLL的全局入口

 

Filter编写完成。

 

注:完整代码下载:http://d.download.csdn.net/down/2435821/bwmwm

 

 

 

阅读更多
个人分类: DirectX
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭