티스토리 툴바


DirectShow2009/06/23 11:27

국내에서 발간된 DirectShow 개발 서적이라는 것이 신화선님의 ‘DirectShow 멀티미디어 프로그래밍’이 거의 유일한 책이라 요즘 이 책을 가지고서 DirectShow Filter 스터디를 하고 있다. 그런데 이 책이 출간되었을 당시의 개발 환경과는 너무 크게 바뀐 것이 요즘이라 (이 글도 나중에는 구식 방법이 되겠지만…) DirectShow Filter를 그냥 만들어 보는 것 조차도 겨우겨우…

나중에라도 혹시 까먹을까 봐 한번 작성해본다.

0. Visual Studio 옵션 설정

Visual Studio의 ‘도구’->’옵션’ 메뉴를 설정하여 ‘프로젝트 및 솔루션’->’VC++ 디렉터리’의 항목을 추가해야 한다.

Windows SDK가 설치 되어 있다면 ‘포함 파일(Include Files)’에 ‘$(WindowsSdkDir)\include’ 항목이 추가되어 있을 것이다. 이 항목만 가지고선 아래에 추가할 프로젝트가 Compile이 잘 되지 않는다. (왜? 잘 모르겠다. 아시는 분?) 그래서, 이 항목 위에 ‘$(WindowsSdkDir)\Samples\Multimedia\DirectShow\BaseClasses’를 추가한다. (반드시 ‘$(WindowsSdkDir)\include’ 항목 위에 추가해야 한다. 그래야 Compile이 된다.)

image

1. 프로젝트 생성

Visual Studio 2008에서 ‘Win32 프로젝트’로 새 프로젝트 ‘DShowFilter’를 생성한다.

image

2. 응용 프로그램 설정

Win32 응용 프로그램 마법사에서 응용 프로그램 종류를 ‘DLL’로, 추가 옵션을 ‘빈 프로젝트’로 설정한다.

image

3. BaseClasses(기반 클래스) 프로젝트 추가

물론 BaseClasses만 따로 Compile하고 그 결과인 strmbasd.lib, strmbase.lib만 사용할 수 있다. (MSDN에서는 그렇게 사용하라고 한다.) 하지만, 책에서 기반클래스를 포함하여 만들어 보라고 했으니까 그대로 따라 해 본다.

‘기존 프로젝트 추가’ 메뉴를 선택한 다음 Windows SDK 폴더 아래에 있는 BassClasses 프로젝트를 찾아서 추가한다. (..\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\DirectShow\BaseClasses\baseclasses.vcproj)

image

4. 프로젝트 종속성 설정

DShowFilter 이전에 BaseClasses가 먼저 빌드 되어야 하므로 종속성 설정을 한다.

솔루션의 팝업 메뉴에서 ‘프로젝트 종속성’을 선택한다. (‘프로젝트 빌드 순서’를 선택해도 상관없다.)

image

‘종속성’ 탭에서 ‘DShowFilter’ 프로젝트를 ‘BaseClasses’에 종속시킨다. 이렇게 하면 자동으로 빌드 순서가 설정된다.

image

5. DShowFilter 프로젝트 속성 설정 (Debug 기준)

BaseClasses 프로젝트 속성은 별도로 수정할 필요가 없다.

DShowFilter 프로젝트 속성 창을 연다. ‘구성 속성’ 항목을 열어 아래 값들을 입력한다.

  • ‘C/C++’->‘일반’->‘추가 포함 디렉터리’에 ‘.\BaseClasses’를 추가한다.
  • ‘C/C++’->‘고급’->‘호출 규칙’을 ‘__stdcall (/Gz)’로 설정한다.
  • ‘링커’->‘일반’->‘출력 파일’을 ‘$(OutDir)\$(ProjectName).ax’로 설정한다.
  • ‘링커’->‘입력’->‘추가 종속성’에 ‘winmm.lib’, ‘..\BaseClasses\Debug\strmbasd.lib’, ‘msvrctd.lib’ 이 세 항목을 추가한다.
  • ‘링커’->‘입력’->‘모든 기본 라이브러리 무시’를 ‘예(/NODEFAULTLIB)’로 한다.
  • ‘링커’->‘입력’->‘모듈 정의 파일’에 ‘DShowFilter.def’를 추가한다.
  • ‘링커’->‘시스템’->‘스택 예약 크기’와 ‘스택 커밋 크기’를 2097152(0x200000)로 한다. (이 항목은 아직 왜 하는지 모르겠다. 책이 그렇게 되어 있어서 그냥 한다.)
  • ‘링커’->‘고급’ ->‘진입점’을 ‘DllEntryPoint@12’로 입력한다.

6. DShowFilter.def 파일 추가

DShowFilter 프로젝트에 ‘새 항목 추가’ 메뉴로 ‘모듈 정의 파일 (.def)’을 추가한다. 이름은 프로젝트 속성 설정 때 입력한 이름으로 설정한다. 아래 구문을 입력한다. (책 참고)

LIBRARY        DShowFilter.ax
DESCRIPTION 'DirectShow Filter'
EXPORTS
            DllRegisterServer    PRIVATE
            DllUnregisterServer    PRIVATE
            DllGetClassObject    PRIVATE
            DllCanUnloadNow        PRIVATE

Compile할 때 DESCRIPTION이라는 항목이 무시된다고 나와서 지워버렸다.

 

여기까지가 환경 설정이었다. 이제 책 내용대로 코드를 입력해보면 Filter 생성이 잘 된다!!!

Posted by 대희
Friends2007/12/11 22:24

11월 25일 일요일 이른 저녁 때 평촌에 다녀왔습니다. 예전 회사와 10분거리밖에 안되어 자주 다니던 곳인데...

emclass

입구에 들어서니 역시 돌잡이 이벤트를...뭐에 넣었더라...흠

IMG_8731 (1024x681)

그리고 입구에는 부부의 정성스런 손길이 녹아 있는 작품들이 있었습니다. 스고이~~

IMG_8732 (1024x681) 

IMG_8836 (1024x681)

 

아직 사진 초보인 관계로 미처 화이트밸런스를 맞춰 놓지 않은 채로 사진을 찍어버렸군요. 귀찮아서 후보정도 안하는데 쩝. 뭐 찍다보면 나아지겠죠.ㅎㅎ

주인공 정언이와 그의 아빠입니다. (어쩌면 전체적으로 어둡게 나온게 도움이 되었을지도    ㅡ.ㅡ;;)

IMG_8734 (1024x681)

사실 주인공들의 사진은 별로 없습니다. 제가 그날의 찍사는 아니었기 때문에  철저하게 제 주위에 있는 사람들만 찍었죠...환수, 혜선 쏘리~

주로 승오, 주연, 시아 가족 위주네요.  찬조로 튼튼이 엄마 미정이와 정양원군 가족이 등장하네요.

특별한 설명 없이 사진만 쭈욱 올립니다. (귀차니즘 발동..)

IMG_8739 (1024x681)

IMG_8742 (1024x681) 

IMG_8744 (1024x681)

IMG_8753 (1024x681)

IMG_8754 (1024x681)

IMG_8756 (1024x681)

IMG_8760 (1024x681) 

IMG_8766 (1024x681) 

IMG_8767 (1024x681)

IMG_8771 (1024x681)

IMG_8776 (1024x681)

IMG_8779 (1024x681)

IMG_8780 (1024x681)

IMG_8789 (1024x681)

IMG_8794 (1024x681)

IMG_8795 (1024x681)

IMG_8803 (1024x681)

IMG_8806 (1024x681)

 IMG_8809 (1024x681)

IMG_8810 (1024x681)

IMG_8815 (1024x681)

IMG_8818 (1024x681)

IMG_8821 (1024x681)

IMG_8838 (1024x681)

IMG_8825 (1024x681)

IMG_8832 (1024x681)

.

피날레는 역쉬~~

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

앙드레김 피날레가 최고죠~!

IMG_8785 (1024x681)

Posted by 대희
TAG 돌잔치
Work2007/11/23 18:35

저희 회사에서 지난 주에 미국 Microsoft 본사에 Silverlight Issues Resolution이라는 행사를 다녀왔습니다. 저는 못갔지만 저희 팀원이 다녀와서 저에게 Report한 내용 중 도움이 될 만한 것들을 정리해서 올립니다.

 

1. 시기는?

   1.1 Beta는 12월 중순경 나올 예정이다. 2월말~3월 초 추가 업데이트(Mix08때 발표?)... 정식버전은 아마도 9월 이후?

2. Seadragon은 언제 어떻게?

  1.1 Beta 버전때 Binary 형태로 추가될 예정. (Seadragon은 근본적으로 Silverlight 기술이 아닌 DirectX를 근간으로 한 독자적인 기술로 만들었음.)

3. License는?

  정해진 허용 정책은 아직...

4. BitmapImage Processing이 가능한가?

  1.1에서 지원할 예정임

5. Mouse Double Click, Right Click, Wheel Event

  1.1에서 지원할 예정임

6. Timer 기능

  1.1에서 지원할 예정임

7. Cross-domain policy

  1.1에서 지원할 예정임

8. Layout

  1.1에서 Grid등 Canvas 이외의 Layout 지원 예정 (WPF에서 지원하는 모두인지는 잘 모르겠습니다.)

9. Motion Path

  3월의 추가 업데이트까지는 공식적으로 지원 계획 없음

10. XPS 지원

  XPS의 Spec이 너무 커서 공식 지원할 예정 없음. 이러면서 Viewer Sample 보여줌 (Codeplex에 있는 그 Viewer 맞습니다~)

11. Unicode 및 한글 Font 문제

  1.1에서 지원할 예정임 (DEMO 동영상으로 직접 확인하였음)

12. Expression Encoder SDK

  이미 Command-Line으로 제공하고 있으며, 그것으로도 충분히 Silverlight에 적용 가능할 것으로 생각...즉 별도로 제공할 계획은 없다.

13. Bubble Mark Test 사이트를 가보면 XBAP이 느린 것으로 나온다. 그이유는? (H/W 가속을 사용하지 않는가?)

  Flash와 Java의 Graphic Engine은 Immediate mode이지만 WPF는 Retained mode이다. (Immediate mode = Direct + Indirect, Retained mode = Indirect)

  그 사이트의 XBAP Demo는 Timer로 Drawing되는 시점을 강제 지정하고 그리는 내용을 직접 구현하려고 함. (WPF에서 Rendering되는 좋은 시나리오는 아님)

  WPF의 성능을 이끌어내려면 그리는 내용(OnRender)으로 정의하는 방식을 따르는 것이 좋음.

14. 1.1 Runtime Install Size는?

  정식버전까지 5MB 이하로 유지할 것임.

 

정리해보니 약 14가지 정도가 되네요. 그쪽 이야기로는 1.1 Beta는 현재 Alpha와는 내부 구조부터 뒤엎은... 전혀 다른 기술이라고 할 수 있을 만큼 변화가 크다고 합니다. 그래서 Alpha때 이미 4.5MB에 달하는

Runtime 용량을 5MB 이내로 계속 유지할 수 있다고 하고요.

 

모든게 다 예상이니...Beta가 나와보면 알게되겠죠? ㅎㅎ

Posted by 대희