본문 바로가기

About Programing/07. Direct Show

[DirectShow기초] 필터와 필터 그래프

필터란? MSDN에 따르면 다음과 같다. 

 A key component in the DirectShow architecture, a filter is a COM object that supports
DirectShow interfaces or base classes. It might operate on streams of data in
a variety of ways, such as reading, copying, modifying, or writing the data to a file.
 Sources, transform filters, and renderers are all particular types of filters.
 A filter contains pins that it uses to connect to other filters.

 필터란 DirectShow구조의 핵심 콤포넌트로서, DirectShow interface나 베이스 클레스를 지원하는
COM객체이다. 필터는 데이터 스트림에 대해 다양한 방식으로 작업을 하게 된다. 예를 들면 스트림을 읽거나,
복사하거나, 변경하거나, 파일에 쓰는 일과 같은 작업이 있다. 소스, 변환필터, 렌더러는 필터의 특정한 형태들이다.
 필터는 다른 필터와 연결하기 위한 핀을 가지고 있다. 
 
 위에 있는데로, 필터는 DirectShow 구조의 핵심 콤포넌트다.
또한, 필터는 COM객체이다.  COM에 대해서는 Inside COM등 다른 COM책을 참조하면 될것 같다.
(너무 이야기가 길어져서 생략한다.) 
 
 필터는 다른 필터와 연결되기 위해 핀(pin)을 가진다. 반도체IC에 달려있는 핀을 생각하면 된다.
따라서, 핀에는 입력핀과 출력핀이 있으며, 필터의 종류에 따라 입력핀은 있고, 출력핀은 없거나(렌더링 필터),
출력핀은 있고, 입력핀은 없는 경우(소스필터)가 있으며, 입출력핀을 모두 갖춘 필터도 있다(변환필터). 
 
위에 요약된 것과 같이, 필터의 종류는 크게 세가지로 나눌 수 있다.

1) 소스 필터 : 파일/디스크/인터넷/위성 등에서 소스 데이터를 받아서 필터 그래프로 전해주는 필터
2) 변환 필터 : 데이터 스트림을 입력으로 받아, 작업을 수행한 후, 그 결과를 출력스트림으로 보내주는 필터
3) 렌더링 필터 : 입력 스트림을 받아서 최종 출력 형태로 변환해 출력해 주는 필터. 일반적으로는 화면에
                    보여주거나, 스피커를 통해 소리로 전달하게 되지만, 메모리나 디스크 파일에 전송할
                    수도 있다.

 필터들이 연결된 네트웍을 필터 그래프라 하며, 데이터는 필터 그래프를 일반적으로 소스필터에서
렌더링필터 방향으로 흘러가게 된다. 이 데이터의 흐름을 기준으로 순방향쪽에 있는 필터를
다운스트림필터라 하며, 역방향쪽에 있는 필터를 업스트림필터라 한다. 다른말로 어떤 필터를
기준으로 그 필터에게 데이터를 전달해 주는 쪽을 업스트림필터라 하고, 데이터를 전송받는 쪽을
다운스트림 필터라 한다.
(업다운 구분은 물의 흐름을 생각하면 쉬울듯 하다. 위에서 아래로 물이 흐르니까..) 
 
 예를 들어 필터가 A-B-C-D순으로 연결된다고 해보자. A는 소스필터이고, D는 렌더링필터이고,
B,C는 변환필터라 하자. 이때, A는 B의 업스트림필터이고, B는 C의 업스트림필터이며,
D는 C의 다운스트림필터이다. 
 
 우리가 플레이할 미디어와 관련된 데이터스트림은 다운스트림쪽으로 흘러가지만,
다른 제어정보 등은 역방향으로도 전달될 수 있다는 점을 언급해 두고 넘어가도록 하겠다. 
 
 필터그래프의 생성은 어플리케이션에 의해 각 필터간의 핀을 연결함으로써 수동으로(?)이루어질 수도 있으며,
필터그래프 매니저에 의해 자동으로 이루어질수도 있다. 필터그래프 매니저는 특정 미디어 타입에 따라
적절한 필터그래프를 생성할 수 있는 능력을 가지고 있으며, 레지스트리에서 적절한 클래스를 찾아서
미디어 타입이나 인코등 스킴에 따라 렌더링이나 디코딩을 수행하는 적절한 필터를 찾아서 필터그래프의 생성과
미디어 데이터 처리를 진행할 수 있다.