筛选器基类简介

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

本文介绍 Microsoft DirectShow 基类库。 此库适用于筛选器开发人员,但应用程序编写者可能会发现一些帮助程序类和调试实用工具很有用。 但是,DirectShow 编程不需要基类库。

以下部分汇总了库中最重要的基类。

COM 对象类

以下类支持创建 COM 对象:

说明
CBaseObject 基对象类。
CUnknown 实现 IUnknown 接口。

 

大多数 DirectShow 类派生自 CBaseObject。 此类通过在运行时保留 DLL 中所有活动对象的计数来提供调试帮助。 在调试版本中,DLL 断言对象计数大于零时是否卸载它。 这样可以更轻松地跟踪由引用计数问题导致的泄漏。

支持 COM 接口的所有基类都派生自继承 CBaseObjectCUnknownCUnknown 类支持引用计数、QueryInterface 和聚合。 有关详细信息,请参阅 如何实现 IUnknown

筛选器和固定类

以下类支持创建 DirectShow 筛选器和固定对象:

说明
CBaseFilter 筛选器的基类。 实现 IBaseFilter 接口。
CBasePin 引脚的基类。 实现 IPinIQualityControl 接口。
CBaseInputPin 使用本地内存传输的输入引脚的基类。 实现 IMemInputPin 接口。 此类派生自 CBasePin
CBaseOutputPin 使用 IMemInputPin 连接的输出引脚的基类。 此类派生自 CBasePin

 

以下类可用于创建更专用的筛选器类型:

说明
CSource 源筛选器的基类。 此类旨在创建推送源。 它不适用于拉取源,如文件读取器。 若要为此类创建输出引脚,请使用 CSourceStream 类。
CTransformFilter 转换筛选器的基类。 此类对数据执行复制。 此类的引脚为 CTransformInputPinCTransformOutputPin
CTransInPlaceFilter 不复制数据的转换筛选器的基类。 此类在将输入数据传递到下游之前,直接对输入数据执行数据处理。 此类的引脚为 CTransInPlaceInputPinCTransInPlaceOutputPin
CVideoTransformFilter 视频转换筛选器的基类。 此类派生自 CTransformFilter ,并添加了对质量控制的支持。
CBaseRenderer 呈现器筛选器的基类。 此类的输入引脚为 CRendererInputPin
CBaseVideoRenderer 视频呈现器的基类。 此类派生自 CBaseRenderer

 

若要使用这些类,必须派生自己的类并编写代码以支持特定于筛选器的功能。 基类越专用化,需要在派生类中编写的代码就越少。

帮助程序对象

以下类实现筛选器和固定使用的帮助程序对象。 其中大多数类都可以使用,而无需从中派生新类:

说明
CPullPin 分析器筛选器上输入引脚的帮助程序对象。 支持具有拉取源的 IAsyncReader 连接。
COutputQueue 输出引脚的帮助程序对象,该输出引脚将样本排队,以便在工作线程上传递。
CSourceSeeking 帮助对象,用于实现对恰好一个输出引脚的源筛选器的查找。 (此类不是针对具有多个引脚的筛选器设计的,例如 parsers.)
CEnumPins 枚举器对象,用于枚举筛选器上的图钉。 实现 IEnumPins 接口。
CEnumMediaTypes 枚举器对象,用于枚举引脚上的首选媒体类型。 实现 IEnumMediaTypes 接口。
CMemAllocator 内存分配器对象。 实现 IMemAllocator 接口。
CMediaSample 媒体示例对象。 实现 IMediaSample2 接口。
CBaseReferenceClock 引用时钟的基类。 实现 IReferenceClock 接口。
CMediaType 用于操作 AM_MEDIA_TYPE 结构的帮助程序对象。