筛选器基类简介
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
本文介绍 Microsoft DirectShow 基类库。 此库适用于筛选器开发人员,但应用程序编写者可能会发现一些帮助程序类和调试实用工具很有用。 但是,DirectShow 编程不需要基类库。
以下部分汇总了库中最重要的基类。
COM 对象类
以下类支持创建 COM 对象:
类 | 说明 |
---|---|
CBaseObject | 基对象类。 |
CUnknown | 实现 IUnknown 接口。 |
大多数 DirectShow 类派生自 CBaseObject。 此类通过在运行时保留 DLL 中所有活动对象的计数来提供调试帮助。 在调试版本中,DLL 断言对象计数大于零时是否卸载它。 这样可以更轻松地跟踪由引用计数问题导致的泄漏。
支持 COM 接口的所有基类都派生自继承 CBaseObject 的 CUnknown。 CUnknown 类支持引用计数、QueryInterface 和聚合。 有关详细信息,请参阅 如何实现 IUnknown。
筛选器和固定类
以下类支持创建 DirectShow 筛选器和固定对象:
类 | 说明 |
---|---|
CBaseFilter | 筛选器的基类。 实现 IBaseFilter 接口。 |
CBasePin | 引脚的基类。 实现 IPin 和 IQualityControl 接口。 |
CBaseInputPin | 使用本地内存传输的输入引脚的基类。 实现 IMemInputPin 接口。 此类派生自 CBasePin。 |
CBaseOutputPin | 使用 IMemInputPin 连接的输出引脚的基类。 此类派生自 CBasePin。 |
以下类可用于创建更专用的筛选器类型:
类 | 说明 |
---|---|
CSource | 源筛选器的基类。 此类旨在创建推送源。 它不适用于拉取源,如文件读取器。 若要为此类创建输出引脚,请使用 CSourceStream 类。 |
CTransformFilter | 转换筛选器的基类。 此类对数据执行复制。 此类的引脚为 CTransformInputPin 和 CTransformOutputPin。 |
CTransInPlaceFilter | 不复制数据的转换筛选器的基类。 此类在将输入数据传递到下游之前,直接对输入数据执行数据处理。 此类的引脚为 CTransInPlaceInputPin 和 CTransInPlaceOutputPin。 |
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 结构的帮助程序对象。 |