DirectShow 샘플 Texture3D9 개선.

DirectShow 샘플 Texture3D9 개선.


Texture3D9 샘플은 간단하고 유용하긴 하지만, 샘플에 표현된 코드를 그대로 가져다 쓰기엔 무리가 있다. 물론 Ctrl-C/Ctrl-V 로 무작정 때려 박을 수는 있지만, 그간 경험상 이런 식의 해결은 결코 해서는 방법 중 하나다. 좀더 괜찮은 방법은 동영상을 플레이하는 핵심 코드들 모듈화 시켜서 Main 함수로 부터 독립 시킨 후, 그 모듈만 가져다 쓰는 방법이다. 결과적으로 볼 때, 들이는 수고는 Ctrl-C/Ctrl-V 방법과 거의 비슷한 반면, 그 보상은 몇배라고 할 수 있다.

기존의 클래스 다이어그램을 보자.

<그림. 기존의 클래스 다이어그램. 누르면 커짐.>


그림에서 VideoInterface와 Framework는 실제로 없으며 저 두클래스가 그냥 main 함수안에 구현되어 있다. 때문에 main 함수와 실제 동영상을 위한 코드가 밀접하게 결합되어 있어서 비디오 플레이어에 필요한 코드들의 독립성은 상당히 떨어지는 편이다. 그리고 전역변수가 지나치게 많이 쓰이는 점도 다른 곳에 이식하는대 걸림돌이다.


이제, main함수에서 동영상에 필요한 코드만 떼어낸 다음에 모듈화 시킨다. 그리고 main 함수는 그 모듈화된 class에서 제공하는 interface만을 쓰도록 바꾼다. 물론 전역변수들드 싸그리 멤버변수로 바꾸는게 좋을 것 같다.


<그림. 개선된 클래스 다이어그램. 누르면 커짐.>


좀더 개선된 클래스 다이어그램이다. 그림에서 app 부분이 main 함수라 보면 된다. 이제 main 함수내에 있던 동영상 관련 코드들은 모두 dxVideoInterface 쪽으로 옮겨 갔고, main 함수에서는 dxVideoInterface만을 이용하는 것을 볼 수 있을 것이다. 그리고 CTextureRenderer 또한 기존에 사용하던 전역변수를 멤버변수로 바꿈으로써 독립성을 높였다.


이제 다른 곳에 가져다 쓸 때도 dxVideoInterface 모듈만 가져가서 별다른 작업없이 그냥 쓰기만 하면 된다.


여기서 좀더 나아가 VideoInterface 란 것을 만들어, 여기에 필수 인터페이스를 규정해 두고 이 인터페이스를 상속받아 구현하도록 한다. 그리고 후에 DirectShow가 아닌 다른 라이브러리를 이용해 동영상을 구현 할때도 이 인터페이스에 맞춰 구현하도록 하면 동영상 모듈을 필요에 따라 쉽게 교체할 수 있다.


이제서야 좀 쓸만한 Texture3D9이 된 것 같다. 이제 시퀀스 다이어그램을 이용해 좀더 세부적인 작업을 한다음 기존 샘플을 리팩토링만 하면 된다.

by 트래핑 | 2008/08/20 11:22 | DevDiary : Release | 트랙백

◀ 이전 페이지 다음 페이지 ▶