다음을 통해 공유


CTransInPlaceFilter 클래스

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

ctransinplacefilter 클래스 계층 구조

클래스는 CTransInPlaceFilter 버퍼 간에 데이터를 복사하는 대신 입력 데이터를 수정하는 필터인 현재 위치 변환 필터를 위해 설계되었습니다. 이 클래스를 사용하려면 에서 CTransInPlaceFilter 새 클래스를 파생하고 다음 메서드를 구현합니다.

이 클래스는 입력 핀에 CTransInPlaceInputPin 클래스를 사용하고 출력 핀에 CTransInPlaceOutputPin 클래스를 사용합니다. 일반적으로 이러한 핀 클래스를 재정의할 필요가 없습니다. 필터는 CTransInPlaceFilter::GetPin 메서드에 두 핀을 만듭니다. 핀 클래스를 재정의하는 경우 GetPin 을 재정의하여 사용자 지정 핀을 만들어야 합니다.

이 클래스는 입력 형식이 항상 출력 형식과 일치하도록 설계되었습니다. 가능하면 필터는 두 핀 연결에 대해 단일 할당자를 사용합니다.

기본 설정 미디어 유형

출력 핀이 이미 연결된 경우 입력 핀은 다운스트림 필터의 기본 설정 형식을 제공합니다. 실제로 다운스트림 필터의 열거자 개체만 반환합니다. 그렇지 않으면 기본 설정 형식이 없습니다. 출력 핀의 동작은 동일하지만 역방향: 입력 핀이 이미 연결된 경우 출력 핀은 업스트림 필터의 기본 형식을 제공합니다. 그렇지 않으면 기본 설정 형식이 없습니다.

연결 고정

한 핀이 연결되면 필터는 일반적으로 다른 핀을 다시 연결하여 두 핀이 동일한 미디어 유형과 동일한 할당자를 사용하는지 확인합니다. (핀을 다시 연결하는 메커니즘은 핀 다시 연결에 설명되어 있습니다.) 두 가지 시나리오가 가능합니다. 입력 핀이 먼저 연결되거나 출력 핀이 먼저 연결됩니다.

입력 핀이 먼저 연결한다고 가정해 보겠습니다. 수행되는 단계는 다음과 같습니다.

  1. 입력 핀은 필터의 CheckInputType 메서드를 호출하여 미디어 형식을 검사.
  2. 업스트림 필터는 할당자를 선택합니다. 이 시점에서 입력 핀에는 할당자 요구 사항이 없으며 연결에 대한 할당자를 허용합니다. 업스트림 필터가 할당자를 요청하는 경우 핀은 새 할당자를 만듭니다. 곧 설명된 이유로 이 할당자는 최종 연결에서 사용되지 않습니다. 연결 프로세스의 이 단계를 완료하는 데 도움이 되는 경우에만 제공됩니다.

나중에 출력 핀이 연결되면 다음을 수행합니다.

  1. 출력 핀은 필터의 CheckInputType 메서드를 호출하여 미디어 형식을 검사. 또한 업스트림 필터에서 IPin::QueryAccept를 호출합니다. 이렇게 하면 입력 핀이 미디어 형식을 일치하도록 변경할 수 있습니다.
  2. 출력 핀은 필터의 CheckInputType 메서드를 호출하여 미디어 형식을 검사. 또한 업스트림 필터에서 IPin::QueryAccept를 호출합니다. 이렇게 하면 입력 핀이 미디어 형식을 일치하도록 변경할 수 있습니다.
  3. 출력 핀은 필터의 CheckInputType 메서드를 호출하여 미디어 형식을 검사. 또한 업스트림 필터에서 IPin::QueryAccept를 호출합니다. 이렇게 하면 입력 핀이 미디어 형식을 일치하도록 변경할 수 있습니다.
  4. 이번에는 입력 핀의 GetAllocator 메서드가 다운스트림 할당자를 반환하고 GetAllocatorRequirements 는 다운스트림 필터의 할당자 요구 사항을 반환합니다. 입력 핀은 업스트림 필터가 선택한 할당자를 허용합니다.
  5. 이번에는 입력 핀의 GetAllocator 메서드가 다운스트림 할당자를 반환하고 GetAllocatorRequirements 는 다운스트림 필터의 할당자 요구 사항을 반환합니다. 입력 핀은 업스트림 필터가 선택한 할당자를 허용합니다.

이제 출력 핀이 연결할 첫 번째 핀인 반대 시나리오를 고려합니다.

  1. 출력 핀은 필터의 CheckInputType 메서드를 호출하여 미디어 형식을 검사.
  2. 할당자를 선택하여 다운스트림 필터의 할당자를 사용하는 것을 선호합니다.

그런 다음 입력 핀이 연결되면 다음을 수행합니다.

  1. 입력 핀은 필터에서 CheckInputType 을 호출하고 다운스트림 필터의 출력 핀에서 QueryAccept 를 호출하여 미디어 형식을 확인합니다.
  2. 입력 형식이 출력 형식과 일치하지 않으면 필터가 출력 핀을 다시 연결합니다.
  3. 업스트림 필터는 할당자를 선택합니다. 입력 핀의 GetAllocator 메서드는 다운스트림 할당자를 반환하고 입력 핀은 업스트림 필터가 선택하는 할당자를 허용합니다.
  4. 필터는 다운스트림 연결에 동일한 할당자를 사용하며 원래 다운스트림 할당자를 재정의할 수 있습니다.

다운스트림 할당자를 쓸 수 있어야 하므로 관련된 할당자 중 하나라도 읽기 전용인 경우 이 이벤트 시퀀스가 약간 변경됩니다. 이 경우 필터는 두 개의 개별 할당자를 사용할 수 있습니다.

이 클래스를 사용하는 방법에 대한 자세한 내용은 변환 필터 작성을 참조하세요.

보호된 멤버 변수 Description
m_bModifiesData 필터가 샘플 데이터를 수정하는지 여부를 나타냅니다.
Protected 메서드 Description
복사 미디어 샘플을 복사합니다.
InputPin 필터의 입력 핀에 대한 포인터를 검색합니다.
OutputPin 필터의 출력 핀에 대한 포인터를 검색합니다.
TypesMatch 입력 미디어 형식이 출력 미디어 형식과 일치하는지 여부를 결정합니다.
UsingDifferentAllocators 입력 및 출력 핀이 다른 할당자를 사용하는지 여부를 결정합니다.
Public 메서드 Description
CTransInPlaceFilter 생성자 메서드입니다.
GetPin 핀을 검색합니다.
GetMediaType 출력 핀에 대한 기본 미디어 형식을 검색합니다.
DecideBufferSize 출력 핀의 버퍼 요구 사항을 설정합니다.
CheckTransform 입력 미디어 형식이 출력 미디어 형식과 호환되는지 여부를 확인합니다.
CompleteConnect 핀 연결을 완료합니다.
수신 미디어 샘플을 수신하고, 처리하고, 다운스트림 필터에 전달합니다.
순수 가상 메서드 Description
Transform 현재 위치에서 샘플을 변환합니다.

요구 사항

요구 사항
헤더
Transip.h(Streams.h 포함)
라이브러리
Strmbase.lib(소매 빌드);
Strmbasd.lib(디버그 빌드)