IGraphConfig::Connection 方法 (strmif.h)

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

方法 Reconnect 在两个引脚之间执行动态重新连接。

语法

HRESULT Reconnect(
  [in] IPin                *pOutputPin,
  [in] IPin                *pInputPin,
  [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  [in] IBaseFilter         *pUsingFilter,
  [in] HANDLE              hAbortEvent,
  [in] DWORD               dwFlags
);

参数

[in] pOutputPin

指向输出引脚 的 IPin 接口的指针。 可以为 NULL,在这种情况下 ,pInputPin 不得为 NULL

[in] pInputPin

IPin 接口指针指向输入引脚。 可以为 NULL,在这种情况下 ,pOutputPin 不得为 NULL

[in] pmtFirstConnection

指向 AM_MEDIA_TYPE 结构的指针,该结构指定在重新连接期间建立的第一个引脚连接的媒体类型。 如果此参数为 NULL,则第一个连接可以具有任何媒体类型。

[in] pUsingFilter

指向在重新连接中使用的可选筛选器的指针。 筛选器必须已位于图形中。 可以为 NULL

[in] hAbortEvent

事件的句柄。 如果调用方是在其数据处理线程之一上调用的筛选器,则此参数应是事件句柄,该事件将在筛选器进入停止状态时发出信号。 否则,此参数可以为 NULL。 有关详细信息,请参阅“备注”。

[in] dwFlags

AM_GRAPH_CONFIG_RECONNECT_FLAGS 枚举中的标志组合,指定如何执行重新连接。

返回值

如果成功,则返回S_OK。 否则,返回一个错误代码,可能是以下值之一或未列出的其他值之一。

返回代码 说明
E_INVALIDARG
无效的参数。 (例如, pInputPinpOutputPin 均为 NULL.)
E_NOINTERFACE
输入引脚不支持 IPinConnection
VFW_E_CANNOT_CONNECT
无法连接筛选器。
VFW_E_STATE_CHANGED
筛选器的状态已更改。 无法完成操作。

注解

如果仅指定一个图钉,方法将搜索另一个图钉。 但是,默认情况下,如果搜索到达通过 IFilterGraph::AddFilter 方法添加到图形的筛选器,则搜索将失败。 若要替代此行为,请调用 IGraphConfig::SetFilterFlags 并在筛选器上设置AM_FILTER_FLAGS_REMOVABLE标志。

重新连接过程涉及几个步骤,其中大多数步骤在此方法中处理:

  1. 首先,在调用 方法之前,请确保阻止正在重新配置的路径上的数据流。 应用程序应调用 IPinFlowControl::Block 方法来执行此操作。 如果调用方是筛选器而不是应用程序,则筛选器可能可在内部控制数据流。
  2. 指定的输出和输入引脚定义重新连接起点和终点。 输入引脚必须支持 IPinConnection 接口。 如果通过) 传递 NULL 参数将其中一个引脚保留为未指定 (,则 方法将搜索筛选器图以查找要重新连接的候选引脚。 (若要查找输入引脚,它会从输出引脚中搜索下游;若要查找输出引脚,请从输入引脚搜索上游。)
  3. 方法通过筛选图推送任何挂起的数据, (通过内部调用 IGraphConfig::P ushThroughData) 。
  4. 如果已指定要插入到图形中的筛选器,方法会将起始输出引脚连接到筛选器的输入引脚,并将筛选器的输出引脚连接到最终输入引脚。 如果未指定筛选器,方法只需将输出引脚连接到输入引脚。 在任一情况下,方法都插入完成连接所需的任何转换筛选器。 (但是,可以通过设置适当的标志来替代此行为;有关详细信息,请参阅 dwFlags parameter.)
  5. 最后, 方法将新筛选器置于运行状态。 由调用方来重启数据流。 应用程序可以通过调用不带标志的 IPinFlowControl::Block 来执行此操作。
如果筛选器在其自己的数据处理线程之一上调用此方法,则会造成死锁。 方法获取筛选器图上的锁,这可能会阻止筛选器在收到 对 IMediaFilter::Stop 的调用时停止。 为了防止出现这种情况,方法采用筛选器提供的事件对象的句柄。 如果收到对其 Stop 方法的调用,则筛选器应发出事件信号。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 strmif.h (包括 Dshow.h)
Library Strmiids.lib

另请参阅

错误和成功代码

IGraphConfig 接口