CDynamicOutputPin 类

CDynamicOutputPin 类实现支持动态重新连接和格式更改的输出引脚。

此类派生自 CBaseOutputPin 类并实现 IPinFlowControl 接口。 它支持几个对于动态图形生成非常重要的操作:

  • 动态重新连接:引脚可以在筛选器保持活动状态时断开连接和重新连接, (暂停或运行) 。
  • 动态格式更改:引脚可以在筛选器仍然处于活动状态时协商新的媒体类型,而无需重新连接。
  • Flow控件:拥有筛选器 (或应用程序) 可以阻止来自引脚的数据流,而无需停止筛选器。

有关详细信息,请参阅动态Graph生成

引脚有三种可能的状态:已阻止、取消阻止和挂起。 在 挂起 状态下,引脚正在等待一些操作在另一个线程上完成,然后引脚切换到阻塞状态。 当引脚被阻止时,筛选器无法通过引脚传递数据,或更改引脚的连接。

若要在多个线程之间协调,拥有筛选器必须遵循某些规则。 (有关筛选器图中的线程的详细信息,请参阅 “线程和关键节”。) 首先,流式处理线程必须始终调用 CDynamicOutputPin::StartUsingOutputPin 方法,然后再调用以下任一方法:

之后,它必须调用 CDynamicOutputPin::StopUsingOutputPin 方法。

其次,应用程序线程不得调用上一列表中的任何方法。 第三,流式处理线程不得调用阻止或取消阻止引脚的类方法。 这些方法包括: CDynamicOutputPin::BlockCDynamicOutputPin::SyncBlockOutputPinCDynamicOutputPin::SyncBlockOutputPinCDynamicOutputPin::UnblockOutputPin

这些规则可确保应用程序线程在使用流式处理线程时无法阻止引脚,反之亦然。 流式处理线程调用 StartUsingOutputPin 后,在流式处理线程调用 StopUsingOutputPin 之前,该引脚不会阻止。 相反,如果引脚被阻止, StartUsingOutputPin 会等到引脚取消阻止。

若要避免忘记调用 StopUsingOutputPin,可以使用 CAutoUsingOutputPin 类。 当 StopUsingOutputPin 超出范围时,它会自动调用 StopUsingOutputPin

当拥有筛选器联接或离开筛选器图 (在其 IBaseFilter::JoinFilterGraph 方法) 时,它必须调用 pin 的 CDynamicOutputPin::SetConfigInfo 方法。

受保护的成员变量 说明
m_BlockStateLock 保护阻止状态的关键部分。
m_hUnblockOutputPinEvent 未阻止引脚时发出信号的事件。
m_hNotifyCallerPinBlockedEvent 当引脚成功阻止或用户取消挂起块时发出信号的事件。
m_BlockState 阻止状态。
m_dwBlockCallerThreadID 最后调用此引脚上的 IPinFlowControl::Block 方法的线程的标识符。
m_dwNumOutstandingOutputPinUsers 使用此引脚的流式处理线程数。
m_hStopEvent 筛选器停止或引脚刷新数据时发出信号的事件。
m_pGraphConfig 指向用于执行动态重新连接的 IGraphConfig 接口的指针。
m_bPinUsesReadOnlyAllocator 用于指定引脚分配器中的样本是否为只读的标志。
受保护的方法 说明
SyncBlockOutputPin 阻止引脚;在阻止引脚之前不会返回。
SyncBlockOutputPin 阻止引脚;在阻止引脚之前可能会返回。
UnblockOutputPin 取消阻止引脚。
BlockOutputPin 阻止引脚。
WaitEvent 等待指定事件发出信号。
公共方法 说明
CDynamicOutputPin 构造函数方法。
~CDynamicOutputPin 析构函数方法。
SetConfigInfo 指定 IGraphConfig 指针和停止事件。
DeliverBeginFlush 请求连接的输入引脚开始刷新操作。
DeliverEndFlush 请求连接的输入引脚以结束刷新操作。
非活动 通知该筛选器已停止的引脚。
活动 通知 pin,筛选器现在处于活动状态。
CompleteConnect 完成与输入引脚的连接。 虚拟。
StartUsingOutputPin 获取对流式处理操作的引脚的访问权限。 虚拟。
StopUsingOutputPin 在流式处理操作后释放对引脚的访问权限。 虚拟。
StreamingThreadUsingOutputPin 确定任何线程是否在引脚上执行流式处理操作。 虚拟。
ChangeOutputFormat 动态更改连接的媒体类型,并传递新的段信息。
ChangeMediaType 动态更改连接的媒体类型。
DynamicReconnect 使用新媒体类型执行动态重新连接。
IPin 方法 说明
断开连接 中断当前引脚连接。
IPinFlowControl 方法 说明
阻止 阻止或取消阻止引脚中的数据流。

要求

要求 Value
标头
Amfilter.h (包括 Streams.h)

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