CBasePin 연결 프로세스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 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의 연결 프로세스를 보여줍니다.
관련 항목