다음을 통해 공유


필터 기본 클래스 소개

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

이 문서에서는 Microsoft DirectShow 기본 클래스 라이브러리에 대해 설명합니다. 이 라이브러리는 필터 개발자를 위한 것이지만 애플리케이션 작성자는 일부 도우미 클래스 및 디버깅 유틸리티가 유용할 수 있습니다. 그러나 DirectShow 프로그래밍에는 기본 클래스 라이브러리가 필요하지 않습니다.

다음 섹션에서는 라이브러리에서 가장 중요한 기본 클래스를 요약합니다.

COM 개체 클래스

다음 클래스는 COM 개체 만들기를 지원합니다.

클래스 Description
CBaseObject 기본 개체 클래스입니다.
CUnknown IUnknown 인터페이스를 구현합니다.

 

대부분의 DirectShow 클래스는 CBaseObject에서 파생됩니다. 이 클래스는 런타임에 DLL의 모든 활성 개체 수를 유지하여 디버깅 지원을 제공합니다. 디버그 빌드에서 DLL은 개체 수가 0보다 큰 동안 언로드되면 어설션합니다. 이렇게 하면 참조 계산 문제로 인한 누수를 더 쉽게 추적할 수 있습니다.

COM 인터페이스를 지원하는 모든 기본 클래스는 CBaseObject를 상속하는 CUnknown에서 파생됩니다. CUnknown 클래스는 참조 계산, QueryInterface 및 집계를 지원합니다. 자세한 내용은 IUnknown을 구현하는 방법을 참조하세요.

클래스 필터링 및 고정

다음 클래스는 DirectShow 필터 및 고정 개체 만들기를 지원합니다.

클래스 Description
CBaseFilter 필터의 기본 클래스입니다. IBaseFilter 인터페이스를 구현합니다.
CBasePin 핀에 대한 기본 클래스입니다. IPinIQualityControl 인터페이스를 구현합니다.
CBaseInputPin 로컬 메모리 전송을 사용하는 입력 핀에 대한 기본 클래스입니다. IMemInputPin 인터페이스를 구현합니다. 이 클래스는 CBasePin에서 파생됩니다.
CBaseOutputPin IMemInputPin 연결을 사용하는 출력 핀에 대한 기본 클래스입니다. 이 클래스는 CBasePin에서 파생됩니다.

 

다음 클래스는 보다 특수화된 유형의 필터를 만드는 데 유용합니다.

클래스 Description
CSource 원본 필터에 대한 기본 클래스입니다. 이 클래스는 푸시 원본을 만들기 위해 설계되었습니다. 파일 판독기 같은 끌어오기 원본에는 적합하지 않습니다. 이 클래스에 대한 출력 핀을 만들려면 CSourceStream 클래스를 사용합니다.
CTransformFilter 변환 필터의 기본 클래스입니다. 이 클래스는 데이터에 대한 복사본을 수행합니다. 이 클래스의 핀은 CTransformInputPinCTransformOutputPin입니다.
CTransInPlaceFilter 데이터를 복사하지 않는 변환 필터의 기본 클래스입니다. 이 클래스는 다운스트림으로 전달하기 전에 입력 데이터에서 직접 데이터 처리를 수행합니다. 이 클래스의 핀은 CTransInPlaceInputPinCTransInPlaceOutputPin입니다.
CVideoTransformFilter 비디오 변환 필터의 기본 클래스입니다. 이 클래스는 CTransformFilter 에서 파생되며 품질 제어에 대한 지원을 추가합니다.
CBaseRenderer 렌더러 필터의 기본 클래스입니다. 이 클래스의 입력 핀은 CRendererInputPin입니다.
CBaseVideoRenderer 비디오 렌더러의 기본 클래스입니다. 이 클래스는 CBaseRenderer에서 파생됩니다.

 

이러한 클래스를 사용하려면 고유한 클래스를 파생하고 필터와 관련된 기능을 지원하는 코드를 작성해야 합니다. 기본 클래스가 특수화될수록 파생 클래스에서 작성해야 하는 코드가 줄어듭니다.

도우미 개체

다음 클래스는 필터 및 핀에 사용되는 도우미 개체를 구현합니다. 이러한 클래스의 대부분은 새 클래스를 파생하지 않고 사용할 수 있습니다.

클래스 Description
CPullPin 파서 필터의 입력 핀에 대한 도우미 개체입니다. 끌어오기 원본을 사용하는 IAsyncReader 연결을 지원합니다.
COutputQueue 작업자 스레드에서 배달을 위해 샘플을 큐에 대기하는 출력 핀에 대한 도우미 개체입니다.
CSourceSeeking 정확히 하나의 출력 핀을 사용하여 원본 필터에서 검색을 구현하기 위한 도움말 개체입니다. (이 클래스는 파서와 같은 여러 핀이 있는 필터용으로 설계되지 않았습니다.)
CEnumPins 필터에서 핀을 열거하기 위한 열거자 개체입니다. IEnumPins 인터페이스를 구현합니다.
CEnumMediaTypes 핀에 기본 설정 미디어 형식을 열거하기 위한 열거자 개체입니다. IEnumMediaTypes 인터페이스를 구현합니다.
CMemAllocator 메모리 할당자 개체입니다. IMemAllocator 인터페이스를 구현합니다.
CMediaSample 미디어 샘플 개체입니다. IMediaSample2 인터페이스를 구현합니다.
CBaseReferenceClock 참조 클록의 기본 클래스입니다. IReferenceClock 인터페이스를 구현합니다.
CMediaType AM_MEDIA_TYPE 구조를 조작하기 위한 도우미 개체입니다.