次の方法で共有


IGraphConfig::Reconnect メソッド (strmif.h)

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

メソッドは Reconnect 、2 つのピン間で動的再接続を実行します。

構文

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
フィルターの状態が変更されました。 操作を完了できません。

注釈

1 つのピンのみを指定した場合、メソッドはもう一方のピンを検索します。 ただし、既定では、 IFilterGraph::AddFilter メソッドを使用してグラフに追加されたフィルターに到達すると、検索は失敗します。 この動作をオーバーライドするには、 IGraphConfig::SetFilterFlags を呼び出し、フィルターにAM_FILTER_FLAGS_REMOVABLE フラグを設定します。

再接続プロセスにはいくつかの手順が含まれており、そのほとんどはこのメソッド内で処理されます。

  1. まず、 メソッドを呼び出す前に、再構成されるパスに沿ったデータフローをブロックしてください。 これを行うには、アプリケーションで IPinFlowControl::Block メソッドを呼び出す必要があります。 呼び出し元がアプリケーションではなくフィルターである場合は、フィルターが内部的にデータ フローを制御できる可能性があります。
  2. 指定された出力ピンと入力ピンは、再接続の開始点と終了点を定義します。 入力ピンは IPinConnection インターフェイスをサポートしている必要があります。 これらのピンの 1 つを指定しない場合 ( NULL パラメーターを渡すことによって)、メソッドはフィルター グラフを検索して再接続の候補ピンを見つけます。 (入力ピンを見つけるには、出力ピンからダウンストリームを検索します。出力ピンを見つけるには、入力ピンからアップストリームを検索します)。
  3. メソッドは、保留中のデータをフィルター グラフ ( IGraphConfig::P ushThroughData への内部呼び出しを介して) プッシュします。
  4. グラフに挿入するフィルターを指定した場合、 メソッドは開始出力ピンをフィルターの入力ピンに接続し、フィルターの出力ピンを最後の入力ピンに接続します。 フィルターを指定しない場合、 メソッドは単に出力ピンを入力ピンに接続します。 どちらの場合も、 メソッドは接続を完了するために必要な変換フィルターを挿入します。 (ただし、適切なフラグを設定することで、この動作をオーバーライドできます。詳細については、 dwFlags パラメーターの説明を参照してください)。
  5. 最後に、 メソッドは、新しいフィルターを実行中の状態に配置します。 データ フローを再起動するのは呼び出し元次第です。 これを行うには、フラグなしで IPinFlowControl::Block を 呼び出します。
フィルターが独自のデータ処理スレッドのいずれかでこのメソッドを呼び出すと、デッドロックの可能性が生じます。 メソッドはフィルター グラフのロックを取得します。これにより、 IMediaFilter::Stop の呼び出しの受信時にフィルターが停止するのをブロックできます。 この状況を防ぐために、 メソッドは、フィルターによって提供されるイベント オブジェクトへのハンドルを受け取ります。 フィルターは、 Stop メソッドの呼び出しを受け取った場合にイベントを通知する必要があります。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー strmif.h (Dshow.h を含む)
Library Strmiids.lib

こちらもご覧ください

エラーコードと成功コード

IGraphConfig インターフェイス