다음을 통해 공유


CTransformFilter 클래스

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

ctransformfilter 클래스 계층 구조

클래스는 CTransformFilter 변환 필터를 구현하기 위한 기본 클래스입니다. 이 클래스는 입력 핀 1개와 출력 핀 1개를 사용하여 변환 필터를 구현하도록 설계되었습니다. 입력 핀과 출력 핀에 별도의 할당자를 사용합니다. 데이터를 처리하는 필터를 만들려면 CTransInPlaceFilter 클래스를 사용합니다.

이 필터는 입력 핀에 CTransformInputPin 클래스를 사용하고 출력 핀에 CTransformOutputPin 클래스를 사용합니다. 일반적으로 이러한 핀 클래스를 재정의할 필요가 없습니다. 대부분의 핀 메서드는 클래스에서 해당 메서드를 CTransformFilter 호출하므로 필요한 경우 필터 메서드를 재정의할 수 있습니다. 필터는 CTransformFilter::GetPin 메서드에 두 핀을 만듭니다. 핀 클래스를 재정의하는 경우 GetPin 을 재정의하여 사용자 지정 핀을 만들어야 합니다.

이 클래스를 사용하려면 에서 CTransformFilter 새 클래스를 파생하고 다음 메서드를 구현합니다.

필터의 요구 사항에 따라 다른 메서드도 재정의해야 할 수 있습니다.

미디어 유형

이 필터의 입력 핀은 미디어 유형을 제안하지 않습니다. 업스트림 필터를 사용하여 연결에 대한 미디어 형식을 제안합니다. 이 디자인의 이유는 대부분의 경우 업스트림 필터가 형식에 대한 자세한 정보를 제공할 수 있기 때문입니다. 예를 들어 비디오 형식의 경우 업스트림 필터는 비디오 차원과 프레임 속도를 알고 있지만 변환 필터는 이 정보를 확인할 방법이 없습니다. 이 동작을 변경하려면 입력 핀의 GetMediaType 메서드를 재정의합니다. 업스트림 필터가 미디어 형식을 제안하면 입력 핀은 필터의 CheckInputType 메서드(순수 가상)를 호출합니다.

입력 핀이 연결될 때까지 출력 핀은 모든 연결을 거부하고 기본 미디어 유형을 반환하지 않습니다. 입력 핀이 연결되면 출력 핀은 필터의 GetMediaType 메서드를 호출하여 기본 설정 형식 목록을 반환합니다. 필터의 CheckTransform 메서드를 통해 연결에 대한 출력 형식을 확인합니다. (두 방법 모두 순수 가상입니다.) 일반적으로 입력 형식은 부분적으로 허용되는 출력 형식을 결정합니다.

필터에 따라 필터 매퍼 개체가 필터를 찾을 수 있도록 필터의 지원되는 미디어 형식 중 일부를 등록할 수 있습니다. 자세한 내용은 DirectShow 필터를 등록하는 방법을 참조하세요.

스트리밍

이 클래스는 출력 데이터를 큐에 추가하지 않습니다. 각 출력 샘플은 IMemInputPin::Receive 메서드 내에서 제공됩니다. Receive 메서드는 필터의 Transform 메서드(순수 가상)를 호출하여 데이터를 처리합니다.

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

보호된 멤버 변수 Description
m_bEOSDelivered 필터가 스트림 종료 알림을 보냈는지 여부를 나타내는 플래그입니다.
m_bSampleSkipped 가장 최근 샘플이 삭제되었는지 여부를 나타내는 플래그입니다.
m_bQualityChanged 품질이 변경되었는지 여부를 나타내는 플래그입니다.
m_csFilter 필터 상태를 보호하는 중요 섹션입니다.
m_csReceive 스트리밍 상태를 보호하는 중요 섹션입니다.
m_pInput 입력 핀에 대한 포인터입니다.
m_pOutput 출력 핀에 대한 포인터입니다.
Public 메서드 Description
CTransformFilter 생성자 메서드입니다.
~ CTransformFilter 소멸자 메서드입니다.
GetPinCount 필터의 핀 수를 검색합니다. 가상.
GetPin 핀을 검색합니다. 가상.
Transform 입력 샘플을 변환하여 출력 샘플을 생성합니다. 가상.
StartStreaming 필터가 일시 중지된 상태로 전환되면 호출됩니다. 가상.
StopStreaming 필터가 중지됨 상태로 전환될 때 호출됩니다. 가상.
AlterQuality 품질 변경이 요청됨을 필터에 알 수 있습니다. 가상.
SetMediaType 필터의 핀 중 하나에서 미디어 유형이 설정되면 호출됩니다. 가상.
CheckConnect 핀 연결이 적합한지 여부를 확인합니다. 가상.
BreakConnect 연결에서 핀을 해제합니다. 가상.
CompleteConnect 핀 연결을 완료합니다. 가상.
수신 미디어 샘플을 수신하고, 처리하고, 출력 샘플을 다운스트림 필터에 전달합니다. 가상.
InitializeOutputSample 새 출력 샘플을 검색하고 초기화합니다.
EndOfStream 필터에 입력 핀에서 추가 데이터가 필요하지 않음을 알 수 있습니다. 가상.
BeginFlush 플러시 작업을 시작합니다. 가상.
EndFlush 플러시 작업을 종료합니다. 가상.
NewSegment 이 호출 후 받은 미디어 샘플이 세그먼트로 그룹화되었음을 필터에 알 수 있습니다. 가상.
순수 가상 메서드 Description
CheckInputType 지정된 미디어 형식이 입력에 허용되는지 여부를 확인합니다.
CheckTransform 입력 미디어 형식이 출력 미디어 형식과 호환되는지 여부를 확인합니다.
DecideBufferSize 출력 핀의 버퍼 요구 사항을 설정합니다.
GetMediaType 출력 핀에 대한 기본 미디어 형식을 검색합니다.
IMediaFilter 메서드 Description
중지 필터를 중지합니다.
일시 중지 필터를 일시 중지합니다.
IBaseFilter 메서드 Description
FindPin 지정된 식별자를 사용하여 핀을 검색합니다.

요구 사항

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