CPullPin 类

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

cpullpin 类层次结构

CPullPin 支持通过 IAsyncReader 接口拉取数据的输入引脚。 如果要实现使用拉取模型从上游筛选器请求数据的筛选器,请使用此类。 有关详细信息,请参阅筛选器图和拉取模型中的数据流。

此类不派生自 CBasePin 或实现 IPin 接口,并且某些方法名称与 IPin 冲突,因此最好将其用作固定中的帮助程序对象。 若要使用此类,请执行以下操作:

  1. CPullPin派生帮助程序类,并从 CBasePin 派生输入引脚类。 将 对象的实例 CPullPin 声明为固定类的成员变量。
  2. 重写 CBasePin::CheckConnect 方法以调用 CPullPin::Connect。 此方法查询 IAsyncReader 的另一个引脚。
  3. 重写 CBasePin::BreakConnect 方法以调用 CPullPin::D isconnect
  4. 重写 CBasePin::Active 方法以调用 CPullPin::Active。 此方法启动一个从上游筛选器中提取样本的工作线程。 当引脚连接时,可以指定是希望工作线程发出异步读取请求还是同步读取请求。
  5. 重写 CBasePin::Inactive 方法以调用 CPullPin::Inactive。 此方法关闭工作线程。
  6. 实现纯虚拟 CPullPin::Receive 方法,以处理传入的示例并将其传送到下游。
  7. 若要设置停止和启动位置,或者要查找流,请调用 CPullPin::Seek 方法。 此方法暂停工作线程并刷新筛选器图。
  8. 实现纯虚拟 CPullPin::EndOfStreamCPullPin::BeginFlushCPullPin::EndFlush 方法,如这些方法的注释中所述。
  9. 实现纯虚拟 CPullPin::OnError 方法来处理流式处理错误。
公共成员变量 说明
m_pAlloc 指向内存分配 器的 IMemAllocator 接口的指针。
公共方法 说明
活动 创建从输出引脚拉取数据的工作线程。
AlignDown 将值截断到指定的对齐边界。
AlignUp 将值向上舍入到指定的对齐边界。
连接 完成与输出引脚的连接。
CPullPin 构造函数方法。
~CPullPin 析构函数方法。 虚拟。
DecideAllocator 与输出引脚协商分配器。 虚拟。
断开连接 使用输出引脚对连接进行啃。
Duration 检索流的持续时间。
GetReader 返回指向输出引脚的 IAsyncReader 接口的指针。
非活动 关闭从输出引脚拉取数据的工作线程。
Seek 设置流的开始和停止位置。
纯虚拟方法 说明
BeginFlush 通知拥有筛选器刷新下游筛选器。
EndFlush 通知拥有筛选器结束刷新操作。
EndOfStream 在 对象提供最后一个示例之后调用。
OnError 如果流式处理期间发生错误,则调用 。
接收 当对象从输出引脚接收媒体样本时调用。

要求

要求
标头
Pullpin.h (包括 Streams.h)

Strmbase.lib (零售版本) ;
Strmbasd.lib (调试生成)