DirectShow DirectShow 의 사용법 DirectShow 필터의 개발 DirectShow 필터 개발의 개요   [목차열람] [주소복사] [슬롯비우기]
DirectShow 필터 개발의 개요
 
Microsoft DirectX 9.0

DirectShow 필터 개발의 개요

여기에서는, 커스텀 DirectShow 필터의 개발에 관련되는 태스크의 간단한 개요를 나타낸다. 또, 이러한 태스크에 대해 자세하게 설명하고 있는 주제에의 링크도 가리킨다. 이 토픽을 읽기 전에, 「DirectShow 에 대하며」의 토픽을 읽는 것. 그곳에서는, DirectShow 아키텍처 전체에 대해 설명하고 있다.

DirectShow base class 라이브러리

DirectShow SDK 에는, 필터 생성용의 C++ 클래스의 집합이 포함되어 있다. 이러한 클래스의 사용은 필수는 아니지만, 새로운 필터의 생성 방법으로서 추천 한다. base class를 사용하려면 , 「DirectShow 필터의 빌드」로 설명하고 있도록(듯이), base class를 정적 라이브러리에 컴파일 해, 프로젝트에 . lib 파일을 링크한다.

base class 라이브러리는 필터의 루트 클래스인 CBaseFilter 클래스를 정의한다. CBaseFilter 로부터는 다른 클래스가 몇개인가 파생하고 있다. 이러한 클래스는 특정의 종류의 필터 전용이다. 예를 들어,CTransformFilter 클래스는 변환 필터용으로 설계되고 있다. 새로운 필터를 생성 하려면 , 필터 클래스의 1 개를 계승하고 있는 클래스를 처리 하는 것. 예를 들어, 클래스 선언은 다음과 같이 된다.

class CMyFilter : public CTransformFilter
{
private:
    /* 필터에 고유의 변수와 메서드를 선언한다.  */
public:
    /* CTransformFilter 의 다양한 메서드를 오버라이드(override) 한다.  */
};

DirectShow base class의 더 자세한 정보는, 다음 주제를 참조할것.

핀의 생성

필터는 1 개 이상의 핀을 생성 할 필요가 있다. 핀의 수는 설계시에 고정할 수 있다. 또, 필터는 필요에 따라서 새로운 핀을 생성 할 수도 있다. 보통, 핀은 CBasePin 클래스로부터, 또는 CBasePin 를 계승하는 CBaseInputPin 등의 클래스로부터 파생한다. 필터의 핀은 필터 클래스의 멤버 변수로서 선언하는 것. 필터 클래스의 일부에서는 이미 핀을 정의하고 있지만, 생성 하는 필터가 CBaseFilter 로부터 직접 파생하는 경우는, 상속 클래스로 핀을 선언할 필요가 있다.

핀 접속의 조정

필터 그래프 매니저가 2 개의 필터를 접속하려고 할 때, 핀은 다양한 점으로써 일치할 필요가 있다. 일치할 수 없는 경우, 접속은 실패한다. 보통, 핀은 다음의 점에 대해 조정을 실시한다.

base class는 이러한 조정의 프레임워크(framework)를 처리 한다. base class의 다양한 메서드를 오버라이드(override) 해, 상세를 결정할 필요가 있다. 오버라이드(override) 할 필요가 있는 메서드의 집합은, 클래스나 필터의 기능에 따라서 다르다. 더 자세한 정보는, 「필터의 접속」을 참조할것.

데이터의 처리와 송신

대부분의 필터의 주된 기능은 미디어 데이터의 처리와 송신이다. 그 처리 방법은 필터의 타입에 따라서 다르다.

그 밖에 스트리밍에 관계하는 태스크로서 그래프로부터의 데이터의 플래시, 스트림의 마지막 처리, 시크 요구에의 응답등이 있다. 이러한 문제의 더 자세한 정보는, 다음 주제를 참조할것.

COM 의 지원

DirectShow 필터는 COM 개체이며, 보통은 DLL 내에 패키지화되고 있다. base class 라이브러리는 COM 를 지원 하는 프레임워크(framework)를 처리 한다. 더 자세한 정보는, 「DirectShow 와 COM 」를 참조할것.

↑TOP