CSource 类
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
CSource 类是用于实现源筛选器的基类。 派生自 CSource 的筛选器包含一个或多个派生自 CSourceStream 类的输出引脚。 每个输出引脚创建一个工作线程,用于将媒体样本推送到下游。
备注
CSource 类旨在支持数据流的推送模型。 不建议将此类用于创建文件读取器筛选器。 文件读取器应通过 IAsyncReader 接口支持拉取模型。 有关详细信息,请参阅筛选器开发人员数据流。
受保护的成员变量 | 说明 |
---|---|
m_iPins | 筛选器上的引脚数。 |
m_paStreams | 图钉数组。 |
m_cStateLock | 保护筛选器状态的关键节对象。 |
公共方法 | 说明 |
CSource | 构造函数方法。 |
~CSource | 析构函数方法。 |
GetPinCount | 检索筛选器上的引脚数。 |
GetPin | 检索图钉。 |
pStateLock | 检索指向筛选器的关键节对象的指针。 |
AddPin | 将新的输出引脚添加到筛选器。 |
RemovePin | 从筛选器中删除指定的引脚。 |
FindPinNumber | 检索筛选器上指定引脚的编号。 |
IBaseFilter 方法 | 说明 |
FindPin | 检索具有指定标识符的引脚。 |
若要实现输出引脚,请执行以下操作:
- 从 CSourceStream 派生类。
- 重写 CSourceStream::GetMediaType 方法和可能验证引脚的媒体类型的 CSourceStream::CheckMediaType 方法。
- 实现 CBaseOutputPin::D ecideBufferSize 方法,该方法返回引脚的缓冲区要求。
- 实现 CSourceStream::FillBuffer 方法,该方法使用数据填充媒体示例缓冲区。
若要实现筛选器,请执行以下操作:
- 从 CSource 派生类。
- 在构造函数中,创建一个或多个派生自 CSourceStream 的输出引脚。 引脚会自动将自身添加到其构造函数方法中的筛选器,并在析构函数方法中删除它们。
若要在多个线程之间同步筛选器状态,请调用 CSource::p StateLock 方法。 此方法返回指向筛选器状态关键部分的指针。 使用 CAutoLock 类保存关键部分。 从固定,可以从固定的 CBasePin::m_pFilter 成员变量访问 pStateLock,如下所示:
CAutoLock lock(m_pFilter->pStateLock());
要求 | 值 |
---|---|
标头 |
|
库 |
|