블로그 이미지
대갈장군

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2008. 1. 26. 01:39 프로그래밍/DirectShow
알고보니 DirectShow Application을 작성할때 (직접 코딩할때) 제일 중요한 것은 COM 의 개념을 이해하고 어떻게 그것을 이용/생성/해제 하는가와 필터 그래프 관리자와 그래프 에디터가 결국은 같은 것임을 깨닳는 것이다.

코딩시 그래프 에디터가 만들어주는 널 렌더링 기법을 위해서는 우선 필터 그래프 관리자를 생성해야 하는데, 이 놈은 바로 COM 컴포넌트이다.

이 컴포넌트에 원료를 줘서 생산을 해야 하는데 바로 그 명령이,

CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, llD_lGraphBuilder, (void **)&m_pGB));

이다. 필터 그래프는 첫번째 인자인 COM 컴포넌트에 들어가있음을 알려주고 세번째 인자가 요청하는 것이 필터그래프매니져 인터페이스인데, 조금 헷갈릴 수도 있다.

물론 그냥 그렇다라고 알고 가도 되지만, 좀더 해석해보자면, COM 컴포넌트는 추상 클래스이다. 이 추상클래스는 객체화 되지 않은 그냥 빈 틀인데 여기다가 내가 원하는 특정한 기능을 만들고 싶다면 그것이 무엇인지 COM 컴포넌트에게 알려줘야 하고 그게 바로 세번째 인자인것 같다.

결국은 그렇다면 첫번째 인자는 가장 위쪽에 위치한 할배 추상 클래스이고 세번째 인자는 자식이나 손주뻘쯤 되는 상속 클래스의 이름이라고 보면 되겠는가? :)

원래라면 사용자가 모두 객체화 하고 함수를 써줘야 하는데 DirectShow Application은 그럴필요가 전혀 없어 보인다. 과연 이것이 장점일까?

한가지 더 중요한 것은 Release() 함수인데 이것은 앞서 만든 객체를 해제 할때 사용하는 함수다. COM 객체는 똑똑해서 자신을 참조하는 객체의 갯수를 항상 세고 있다가 0이되면 알아서 자폭한다.

고로 마구마구 Release를 쓰면 아직 사용중인 COM 객체가 날아가는 수가 있다. 고로 항상 짝을 이루어 조심히 써라는 말.

그리고 널 렌더링시 알아서 필터를 구성해주는 기법은 어플리케이션에서 다음 한줄이면 끝이다.

m_pGB->RenderFile(wFileName,NULL);

엄청 간단하다... -_-
posted by 대갈장군