필터 기본 클래스 소개
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media 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 | 핀에 대한 기본 클래스입니다. IPin 및 IQualityControl 인터페이스를 구현합니다. |
CBaseInputPin | 로컬 메모리 전송을 사용하는 입력 핀에 대한 기본 클래스입니다. IMemInputPin 인터페이스를 구현합니다. 이 클래스는 CBasePin에서 파생됩니다. |
CBaseOutputPin | IMemInputPin 연결을 사용하는 출력 핀에 대한 기본 클래스입니다. 이 클래스는 CBasePin에서 파생됩니다. |
다음 클래스는 보다 특수화된 유형의 필터를 만드는 데 유용합니다.
클래스 | Description |
---|---|
CSource | 원본 필터에 대한 기본 클래스입니다. 이 클래스는 푸시 원본을 만들기 위해 설계되었습니다. 파일 판독기 같은 끌어오기 원본에는 적합하지 않습니다. 이 클래스에 대한 출력 핀을 만들려면 CSourceStream 클래스를 사용합니다. |
CTransformFilter | 변환 필터의 기본 클래스입니다. 이 클래스는 데이터에 대한 복사본을 수행합니다. 이 클래스의 핀은 CTransformInputPin 및 CTransformOutputPin입니다. |
CTransInPlaceFilter | 데이터를 복사하지 않는 변환 필터의 기본 클래스입니다. 이 클래스는 다운스트림으로 전달하기 전에 입력 데이터에서 직접 데이터 처리를 수행합니다. 이 클래스의 핀은 CTransInPlaceInputPin 및 CTransInPlaceOutputPin입니다. |
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 구조를 조작하기 위한 도우미 개체입니다. |