筛选器基类简介

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

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

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

COM 对象类

以下类支持创建 COM 对象:

班级 DESCRIPTION
CBaseObject 基对象类。
CUnknown 实现 IUnknown 接口。

 

大多数 DirectShow 类派生自 CBaseObject。 此类通过在运行时统计 DLL 中所有活动对象的数量来提供调试支持。 在调试版本中,当对象计数大于零时,DLL 将断言它被卸载。 这样,可以更轻松地跟踪因引用计数问题而导致的泄漏。

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

筛选和锁定类

以下类支持创建 DirectShow 过滤器和引脚对象:

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

 

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

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

 

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

辅助对象

以下类实现由筛选器和接口使用的辅助对象。 这些类中的大多数都可以使用,而无需从它们派生新类:

班级 DESCRIPTION
CPullPin 分析器筛选器上输入引脚的辅助对象。 支持与拉取源的 IAsyncReader 连接。
COutputQueue 用于输出引脚的辅助对象,该引脚将样本排队等待在工作线程上传递。
CSourceSeeking 用于使用一个输出引脚在源筛选器上实现查找的帮助对象。 (此类不适用于具有多个引脚的筛选器,例如分析程序。)
CEnumPins 用于枚举筛选器上的引脚的枚举器对象。 实现 IEnumPins 接口。
CEnumMediaTypes 枚举器对象,用于枚举引脚上的首选媒体类型。 实现 IEnumMediaTypes 接口。
CMemAllocator 内存分配器对象。 实现 IMemAllocator 接口。
CMediaSample 媒体示例对象。 实现 IMediaSample2 接口。
CBaseReferenceClock 参考时钟的基类。 实现 IReferenceClock 接口。
CMediaType 用于操作 AM_MEDIA_TYPE 结构的辅助对象。