레이블이 다이렉트쇼인 게시물을 표시합니다. 모든 게시물 표시
레이블이 다이렉트쇼인 게시물을 표시합니다. 모든 게시물 표시

2010년 5월 1일 토요일

다이렉트쇼 디버그하는방법

다이렉트쇼에서 흔히 필터가 연결되었는지 핀이 연결되었는지 볼수가 없을때

그럴때 코드에 아래의 함수를 쓰게되면 그래프에디터와 연동되어

필터와 핀의 연결유무를 판별할수있습니다.

 

//코드 추가부분
DsROTEntry dsRotEntry = new DsROTEntry(필터그래프명);

 

//코드추가후 그래프에디터로 확인하는 절차

 

//1번 파일 메뉴를 선택해줌

//2번 연결되어진 필터그래프목록이 나옵니다.

//3번 필터와 핀의 연결유무를 확인시켜줍니다.

 

 

 

 

 

 


 

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