IGraphConfig::Reconnect 메서드(strmif.h)

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 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일 수 있습니다. 이 경우 pInputPinNULL이 아니어야 합니다.

[in] pInputPin

IPin 인터페이스를 입력 핀에 포인터로 지정합니다. NULL일 수 있습니다. 이 경우 pOutputPinNULL이 아니어야 합니다.

[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 매개 변수에 대한 설명을 참조하세요.)
  5. 마지막으로 메서드는 새 필터를 실행 중 상태로 배치합니다. 데이터 흐름을 다시 시작하는 것은 호출자에게 달려 있습니다. 애플리케이션은 플래그 없이 IPinFlowControl::Block 을 호출하여 이 작업을 수행할 수 있습니다.
필터가 자체 데이터 처리 스레드 중 하나에서 이 메서드를 호출하면 교착 상태가 발생할 가능성이 있습니다. 메서드는 필터 그래프에 대한 잠금을 가져옵니다. 이 잠금은 필터가 IMediaFilter::Stop에 대한 호출 수신을 중지하지 못하도록 차단할 수 있습니다. 이 상황을 방지하기 위해 메서드는 필터에서 제공하는 이벤트 개체에 대한 핸들을 사용합니다. 필터는 Stop 메서드에 대한 호출을 수신하는 경우 이벤트에 신호를 보내야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 strmif.h(Dshow.h 포함)
라이브러리 Strmiids.lib

추가 정보

오류 및 성공 코드

IGraphConfig 인터페이스