CTransformFilter 클래스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
클래스는 CTransformFilter
변환 필터를 구현하기 위한 기본 클래스입니다. 이 클래스는 입력 핀 1개와 출력 핀 1개를 사용하여 변환 필터를 구현하도록 설계되었습니다. 입력 핀과 출력 핀에 별도의 할당자를 사용합니다. 데이터를 처리하는 필터를 만들려면 CTransInPlaceFilter 클래스를 사용합니다.
이 필터는 입력 핀에 CTransformInputPin 클래스를 사용하고 출력 핀에 CTransformOutputPin 클래스를 사용합니다. 일반적으로 이러한 핀 클래스를 재정의할 필요가 없습니다. 대부분의 핀 메서드는 클래스에서 해당 메서드를 CTransformFilter
호출하므로 필요한 경우 필터 메서드를 재정의할 수 있습니다. 필터는 CTransformFilter::GetPin 메서드에 두 핀을 만듭니다. 핀 클래스를 재정의하는 경우 GetPin 을 재정의하여 사용자 지정 핀을 만들어야 합니다.
이 클래스를 사용하려면 에서 CTransformFilter
새 클래스를 파생하고 다음 메서드를 구현합니다.
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
필터의 요구 사항에 따라 다른 메서드도 재정의해야 할 수 있습니다.
미디어 유형
이 필터의 입력 핀은 미디어 유형을 제안하지 않습니다. 업스트림 필터를 사용하여 연결에 대한 미디어 형식을 제안합니다. 이 디자인의 이유는 대부분의 경우 업스트림 필터가 형식에 대한 자세한 정보를 제공할 수 있기 때문입니다. 예를 들어 비디오 형식의 경우 업스트림 필터는 비디오 차원과 프레임 속도를 알고 있지만 변환 필터는 이 정보를 확인할 방법이 없습니다. 이 동작을 변경하려면 입력 핀의 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 | 지정된 식별자를 사용하여 핀을 검색합니다. |
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|