2010년 4월 24일 토요일

기초 - Indroduction

요즘 진행하는 프로젝중에 DirectShow를 사용하는 프로젝이 있어서 스터디중입니다.

DirectShow에 대해 소개하는 글을 계속 올립니다. 역사니 뭐니 하는건 다 생략하구...

개념부터...

 

- Filter, Filter Graphs

 

DirectShow의 기본 빌딩 블럭은 filter라 불리는 콤포넌트이다. 필터는 멀티미디어 스트림을

어떤 연산을 해서, 내용을 변화시킨 후 출력해 주는 콤포넌트라 할 수 있다.

 

예를 들면 파일을 읽는 필터는 HDD에서 파일을 읽어서, 해당 파일을 스트림으로 만들어서

출력으로 내놓게 된다. 디코더나 출력장치로 출력하는 콤포넌트도 DirectShow에서는 필터라 부른다.

 

DiretShow에서는 이런 필터를 연결해서 필요한 작업을 진행한다. 예를 들어 파일필터의 출력을 디코더 필터의 입력에 연결하고, 디코더필터의 출력을 렌더러에 연결하고 하는 식이다. 당연한 이야기지만, 한 필터의 출력이 두개 이상의 필터에 입력으로 연결될 수도 있고, (아마도) 둘 이상의 필터의 출력을 한 필터에서 입력으로 받아서 처리할 수도 있을 것이다. 따라서, 필터간의 연결상태는

단순한 선형이 아닌 그래프 구조를 띄게 되며, 이런 연결된 필터들의 집합을 필터그래프라 한다.

 

다음 예는 MSDN에 나온 필터그래프의 예이다.

 

HDD의 파일을 FileSource필터가 읽어서, AVI Splitter에 전달하면, AVI Splitter는 그 데이터를 비디오 스트림과 오디오 스트림으로 만들어서 각각 AVI Decompressor와 Default DirectSound Device에 전달한다. AVI Decompressor는 비디오 스트림을 디코드하고, 그 결과를 Video Renderer에 전달하게 되며, 최종적으로 VideoRenderer는 DirectDraw나 GDI를 이용해 비디오 프레임을 화면에, DirectSound Device는 소리를 DirectSound를 이용해 스피커에 출력하게 된다.

 

어플리케이션 작성시에는 이러한 필터 그래프 생성을 위해 Filter Graph Manager를 사용하게 된다. Filter Graph Manager는 필터들을 서로 연결할 수 있는 메소드를 제공하고, 스트림의 흐름을 제어하는 메소드와 각 필터에서 발생할 수 있는 이벤트를 전달하는 구조를 가지고 있다.

 

DIrectShow 어플리케이션의 동작은 다음과 같은 절차를 거쳐 이루어진다.

 

1. Filter Graph Manager의 인스턴스 생성

2. Filter Graph Manager를 통한 Filter Graph의 생성

3. Filter Graph Manager를 통한 스트림의 제어와 이벤트의 처리.

4. 동작 완료 후엔 사용했던 필터와 manager를 해제

 

다음 그림은 이 과정을 도식화한 것이다.

 

 

 
 

각 필터와 Graph Filter Manager는 COM객체이다. 따라서, 객체의 생성과 해제도 COM의 규칙에 따라 이루어지게 된다.

 

 

출처- http://mrwebi.tistory.com/34

댓글 없음:

댓글 쓰기