您的位置:首页 > 其它

DirectShow基础类库开发参考文档

2008-05-21 15:17 483 查看

[align=left]以下的文章是我在学习DirectShow的过程中翻译自DirectX 9 SDK的帮助文档,希望对大家了解和编写自己的filter等组件时有所帮助。翻译文档的内容我会陆续发到网上。[/align]
[align=center] [/align]

1. DirectShow基础类库概述

Microsoft® DirectShow®基础类库是一系列的C++类和实用函数的集合,这些使用函数的设计的目的是为了实现DirectShow的filter。对应用程序开发人员来说,某些帮助类也是非常有用的。
本篇文章描述了这个基础类库,包含了以下一些部分:

如何使用DirectShow基础类库

Introduction to the Filter Base Classes

Base Class Reference

Utility Functions

Debugging Utilities

2. 如何使用DirectShow基础类库

如果你想使用Microsoft® DirectShow®基础类库,你必须生成和链接基础类库的库文件,这些库文件位于:
(SDK 根目录)\Samples\C++\DirectShow\BaseClasses
DirectShow的基础类库的工作空间的名字叫做BaseClasses.dsw。这个工程生成了两个版本的库文件,一个零售版本――Strmbase.lib,一个调式版本的库文件――Strmbasd.lib。在你的自己的工程里面,如果你想使用基本类库,你必须包含Streams.h这个头文件。你的应用程序既可以链接Strmbase.lib or to Strmbasd.lib,这取决于你生成的程序的版本,即你是生成一个零售版本还是一个调试版本。
下面这个表格总结了你需要的文件:

[align=center]工作空间[/align][align=center]BaseClasses.dsw[/align]
[align=center]零售版库文件[/align][align=center]Strmbase.lib[/align]
[align=center]调试版本库文件[/align][align=center]Strmbasd.lib[/align]
头文件[align=center]Streams.h[/align]
[align=left]
[/align]

2.1. 预处理符号

当你在你的工程中包含了Streams.h这个头文件,下面的与处理符号就有了特殊的意义:

PERF: 保留字符。不要使用这个预处理符号。

VFWROBUST: 在零售版本中启用指针验证。在调试版本周,这个并不是必须定义VFWROBUST宏。

3. Filter基本类库简介

这篇文文章描述了Microsoft DirectShow基本类库,这个库是为filter开发人员设计的,但是应用程序开发人员可能会找到一些有帮助的类文件,或者调试应用程序时有些帮助。但是基本库类并不是DirectShow程序必须的。
下面的章节概述了大多数最重要的基本类:

3.1. COM 对象库

下面的这些类用来支持COM对象的创建:

[align=center][/align][align=center]描述[/align]
[align=center]CBaseObject[/align][align=center]基本对象类。[/align]
[align=center]CUnknown[/align][align=center]实现了IUnknown 接口。[/align]
大多数的DirectShow类派生于CBaseObject。这个类提供了一个在在Dll文件中的活动对象计数器,在运行时的调试帮助。在调试版本中,如果DLL没有被加载,但是对象计数器大于0,则被断言失败。这样就可以很容易的追踪由引用计数引起的内存泄露问题。
所有的这些基本类支持从CUnknown 中派生出来的COM接口,CUnknown派生于CBaseObjectCUnknown类支持引用计数、QueryInterface、聚合。

3.2. Filter and Pin 类

下面的这些类支持DirectShow filter和pin对象的创建:

[align=center][/align][align=center]描述[/align]
CBaseFilterFilter的基础类,实现了IBaseFilter接口。
CBasePinPin(接脚)的基本类,实现了IPin和IQualityControl接口。
CBaseInputPin输入pin的基本类,使用了本地内存传输。实现了IMemInputPin接口。这个接口派生于CBasePin。
CBaseOutputPin输出pin的基本类,使用了IMemInputPin连接。这个类派生于CBasePIn。
下面的这些类在创建专门的filter有一些帮助:

[align=center][/align][align=center]描述[/align]
CSource创建源filter的基本类。这个基本类用来创建推源,但是不适合用来创建一个拉源(参考推模式、拉模式),比如说文件读取器。如果要创建一个输出pin,使用CSourceStream类。
CTransformFilter变换filter的基本类。这个类执行了一个数据的副本的拷贝。这个类的接脚类(pin)是CTransformInputPin和CTransformOutputPin。
CTransInPlaceFilter变换filter的基本类,这个类不拷贝数据。这个类在向下游传输数据之前,直接执行输入数据处理。这个类的接脚是CTransInPlaceInputPinCTransInPlaceOutputPin
CVideoTransformFilter视频变换filter基本类,这个类派生于CTransformFilter然后添加了一些质量控制。
CBaseRenderer渲染filter的基本类。输入接脚(Pin)是CRendererInputPin
CBaseVideoRenderer视频渲染的基本类,这个类派生于CBaseRenderer
要使用这些类,你必须要派生你自己的类,然后在你自己的类里面编写代码来实现filter里面的功能。越专业的基类,你要在你自己的派生类里面要书写的代码就越少。

3.3. 辅助对象

下面的这些类实现了一些用在filter和pin中的辅助对象。这些类中的大多数无需从中派生,可以直接使用。

类名描述
CPullPin在分析器上的辅助对象输入接脚。支持IAsyncReader推源的连接器
COutputQueue输出接脚的辅助对象,可以传送一个样本队列(queue samples )到一个工作线程(worker thread)。
CSourceSeeking在一个有着准确外接接脚的源filter里面实现一个位置查找的辅助对象。(这个类并不是为有多接脚的filter设计的,比如说像解析器)
CEnumPins在一个filter上为列举接脚的用的枚举对象。实现了IEnumPins接口。
CEnumMediaTypes这是一个用于在接脚中枚举最优先的媒体类型的枚举对象,这个对象实现了IEnumMediaTypes接口。
CMemAllocator内存分配器对象,实现了IMemAllocator接口。
CMediaSample媒体样本对象。实现了IMediaSample2接口。
CBaseReferenceClock引用时钟的基本类。实现了IReferenceClock接口。
CMediaType辅助对象用来操作AM_MEDIA_TYPE数据结构。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐