[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
이 섹션에서는 CBasePin 클래스가 핀 연결 프로세스를 구현하는 방법을 설명합니다.
필터 그래프 관리자는 모든 핀 연결을 시작합니다. 출력 핀의 IPin::Connect 메서드를 호출하여 입력 핀을 지정합니다. 출력 핀은 입력 핀의 IPin::ReceiveConnection 메서드를 호출하여 연결을 완료합니다. 입력 핀은 연결을 수락하거나 거부할 수 있습니다.
필터 그래프 관리자는 연결에 대한 미디어 형식을 지정할 수도 있습니다. 그렇다면 핀이 해당 형식과 연결하려고 시도합니다. 그렇지 않은 경우 핀은 형식을 협상해야 합니다. 필터 그래프 관리자는 부분 미디어 형식을 지정할 수도 있습니다. 이 형식에는 주 형식, 하위 형식 또는 형식 형식에 대한 값 GUID_NULL 있습니다. 이 경우 핀은 미디어 형식의 어느 부분을 지정했는지 일치시키려고 합니다. GUID_NULL 값은 와일드카드로 작동합니다.
CBasePin::Connect 메서드는 핀이 연결을 수락할 수 있는지 확인하여 시작합니다. 예를 들어 핀이 아직 연결되어 있지 않은지 확인합니다. 나머지 연결 프로세스는 CBasePin::AgreeMediaType 메서드에 위임합니다. 다음은 AgreeMediaType수행됩니다.
미디어 형식이 완전히 지정된 경우 핀은 CBasePin::AttemptConnection 메서드를 호출하여 연결을 시도합니다. 그렇지 않으면 다음 순서로 미디어 형식을 시도합니다.
- 입력 핀의 기본 설정 형식입니다.
- 출력 핀의 기본 설정 형식입니다.
CBasePin::m_bTryMyTypesFirst 플래그를 TRUE 설정하여 이 순서를 되돌릴 수 있습니다.
각각의 경우 핀은 IPin::EnumMediaTypes 호출하여 미디어 형식을 열거합니다. 이 메서드는 CBasePin::TryMediaTypes 메서드에 전달되는 열거자 개체를 검색합니다. TryMediaTypes 메서드는 각 미디어 형식을 반복하고 각 형식에 대해 AttemptConnection 호출합니다.
AttemptConnection 메서드 내에서 출력 핀은 다음 메서드를 호출합니다.
- CBasePin::CheckConnect 호출하여 입력 핀이 적합한지 확인합니다.
- CBasePin::CheckMediaType 호출하여 미디어 형식의 유효성을 검사합니다.
- 입력 핀에서 IPin::ReceiveConnection 호출합니다. 입력 핀은 이 메서드를 사용하여 연결을 수락해야 하는지 여부를 결정합니다.
- CBasePin::CompleteConnect 호출하여 연결을 완료합니다.
다음 사항에 유의하세요.
- CheckConnect 가상 메서드입니다. 기본 클래스에서 이 메서드는 핀 방향이 호환되는지 여부를 확인합니다. 출력 핀은 입력 핀에 연결해야 하며 그 반대의 경우도 마찬가지입니다. 파생 핀 클래스는 일반적으로 이 메서드를 재정의하여 다른 검사를 수행합니다. 예를 들어 연결에 필요한 인터페이스에 대해 다른 핀을 쿼리할 수 있습니다. 파생 클래스가 CheckConnect 재정의하는 경우 CBasePin 메서드도 호출해야 합니다.
- CheckMediaType 파생 클래스가 구현해야 하는 순수 가상 메서드입니다.
- CompleteConnect 기본 클래스에서 아무 작업도 수행하지 않는 가상 메서드입니다. 파생 클래스는 메모리 할당자 결정과 같이 연결을 완료하는 데 필요한 추가 작업을 수행하도록 이 메서드를 재정의할 수 있습니다.
이러한 단계가 실패하면 출력 핀은 CBasePin::BreakConnect 메서드를 호출하여 checkConnect수행한 모든 단계를 실행 취소합니다.
입력 핀의 ReceiveConnection 메서드는 입력 핀의 CheckConnect, CheckMediaType및 CompleteConnect 메서드를 호출합니다. 이러한 오류가 발생하면 연결 시도도 실패합니다.
다음 다이어그램은 CBasePin연결 프로세스를 보여줍니다.
관련 항목