ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [펌] DirectShow SDK Installation Steps & Debug
    WhatAGreatTutorial! 2008. 4. 10. 11:18
    반응형

    http://recre8or.tistory.com/40

    :: 요약 ::

      이 문서는 Windows에 DirectShow SDK를 설치하는 과정을 설명하는 포스트이다. 이 포스트는 필요한 SDK를 구해서 설치하는 방법부터 환경을 구축해서 SDK의 설치를 검사하기 위한 DirectShow 어플리케이션을 만드는 부분까지 사용자에게 안내한다.

    :: 요구사항 ::
      이 문서는 Microsoft Windows XP SP2 운영체제 하에 Visual Studio 2005가 설치된 것을 기반으로 작성되었다.

    :: DirectShow SDK 설치 순서 ::
    Step 1 - 필요한 SDK 구하기
      사용자가 이미 Visual Studio 2005를 설치해둔 상태라는 가정 하에 두 개의 SDK를 받아야 한다.
    1.1 Windows Vista SDK 받기
      첫 번째 것은 Windows Vista SDK로, 여기에 DirectShow SDK가 존재한다. 이름에 속지 말자. 이 SDK는 Windows XP를 위한 어플리케이션 생성을 지원한다. 여기에서 SDK를 다운받을 수 있다.
    1.2 DirectX SDK 받기
      두 번째 SDK는 DirectX SDK이다. 이 SDK가 필요한 이유는, DirectShow는 DirectDraw를 사용하여 화면에 렌더링을 하는데 이 DirectDraw가 DirectX SDK에 들어있기 때문이다. 여기에서 SDK를 받을 수 있다.

    Step 2 - SDK 설치하기

      이 단계에서는 step 1에서 받은 SDK를 설치하는 방법을 다룬다.
    2.1 Windows Vista SDK 설치하기
      Windows Vista SDK를 디폴트로 설정된 폴더에 설치한다. 하드 공간을 절약하기 위해서 필자는 아래의 그림처럼 필요한 것만 선택해서 설치하였다.
      (역자주 - 역자는 전부 설치해버렸다. 전부 설치하면 2GB정도 공간을 먹는다.. 공룡이다!! -_- 하드가 넉넉하신 분은 다 설치하시고 설치한 김에 .NET Framework 3.0도 공부해보심이... ( - -))

    사용자 삽입 이미지

    Vista SDK Installation Option

      필자는 native 환경에서 어플리케이션을 개발할 것이기에 .net framework 부분은 선택하지 않았다. 필자는 대부분의 개발자 툴 역시 설치하지 않았는데 이미 Visual Studio 2005에 포함되어 있는 것들이다. 아무리 최소로 설치한다 하더라도 DirectShow SDK가 들어있는 "Windows Vista Headers and Libraries" 옵션은 반드시 선택해야 한다.
    2.2 DirectX SDK 설치하기
      Windows Vista SDK 설치가 완료된 후 DirectX SDK를 설치한다. 그냥 디폴트로 설정되어 있는 대로 "다음" 버튼만 눌러서 설치하면 된다. "다음" "다음" 다음" 하다 보면 설치가 된다.
    2.3 설치 폴더 확인하기
      DirectX SDK 설치가 완료됐을 때 사용자의 컴퓨터에는 각각의 SDK가 설치된 두 개의 폴더가 존재해야 한다. 사용자가 디폴트로 설정된 폴더에 설치하였고 이 문서에서 제공된 링크를 통해서 SDK를 받아서 설치했다면 다음의 두 폴더가 존재하는지 확인해보자.
      Program Files\Microsoft SDKs and C:\Program Files\Microsoft DirectX SDK (April 2007)

    Step 3 - 환경 설정하기
      이 과정은 사용자가 여러 환경 변수들을 설정하고 DirectShow 어플리케이션을 적절하게 빌드하기 위해 필요한 라이브러리를 가져올 수 있도록 도와준다.
    3.1 환경 변수 설정
      Visual Studio에서 필요한 헤더와 라이브러리 파일을 찾아서 빌드하기 위해 사용자는 아래의 폴더들을 Visual Studio의 폴더 찾기 경로에 추가해야 한다.
      Visual Studio 2005를 열고 도구 -> 옵션 -> 프로젝트 및 솔루션 -> VC++ 디렉터리 항목으로 이동한다.
    3.1.1 include 경로 설정
      "Win32" 플랫폼을 선택하고 "실행파일"을 위한 폴더들을 확인한다. 새로운 줄에 사용자의 Windows Vista SDK의 include 폴더의 경로를 입력한다. 필자의 경우에는 C:\Program Files\Microsoft SDKs\Windows\v6.0\Include 이다.
      다음 줄에는 DirectX SDK의 include 경로를 설정한다. 필자의 경우에는 C:\Program Files\Microsoft DirectX SDK (April 2007)\Include 이다.
      마지막으로 BaseClases의 include 경로를 추가한다. 필자의 경우에는 C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\Multimedia\DirectShow\BaseClasses 이다.
      그리고 순서를 확인하자. BaseClasses 폴더가 가장 위에, 그 다음이 DirectX, 그리고 Vista SDK의 경로가 나와야 한다.
    3.1.2 라이브러리 경로 설정
      "라이브러리 파일" 항목을 선택하자. include 경로를 설정한 것처럼 똑같잉 반복하면 된다. 필자의 경우에는 C:\Program Files\Microsoft SDKs\Windows\v6.0\LibC:\Program Files\Microsoft DirectX SDK (April 2007)\Lib\x86 이다.
      DirectX 경로가 위쪽으로 올라가 있는지 확인하자. 그렇지 않으면 컴파일러는 Windows Vista SDK에 들어있는 구버전의 SDK를 이용해 컴파일해버릴 수 있다.
    3.2 BaseClasses Sample
      지금까지의 과정만을 수행하고 사용자가 샘플 Directshow 어플리케이션(이 문서의 마지막 부분에 링크되어 있다)을 빌드하려고 하면 다음과 같은 에러를 보게 될 것이다.

    1>main.obj : error LNK2001: unresolved external symbol _IID_IMediaEvent
    1>main.obj : error LNK2001: unresolved external symbol _IID_IMediaControl
    1>main.obj : error LNK2001: unresolved external symbol _CLSID_FilterGraph
    1>main.obj : error LNK2001: unresolved external symbol _IID_IGraphBuilder

      에러가 발생하는 이유는 이러한 symbol들이 strmbase.lib(배포용)와 strmbasd.lib(디버그용) 파일에 정의되어 있기 때문이다. 따라서 사용자는 어플리케이션을 빌드하기 위해서 두 라이브러리 파일이 필요하다. 이 파일들을 생성하려면 C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\Multimedia\DirectShow\BaseClasses 폴더의 프로젝트 파일을 열어서 release와 debug 양쪽 모두 빌드한다.
      그리고 두 파일을 C:\Program Files\Microsoft SDKs\Windows\v6.0\Lib 폴더에 복사한다.
    3.3 사용자 어플리케이션에 라이브러리 파일 링크하기
      라이브러리 파일을 링크하기 위해서는 상요자의 DirectShow 어플리케이션 프로젝트를 열어서 프로젝트 -> 속성 -> 구성 속성 -> 링커 -> 입력 항목으로 이동하여 "추가 종속성" 항목에 strmbase.lib(release일 경우) / strmbasd.lib(debug일 경우) 파일명을 적어넣는다. 다른 방법으로는 필자가 선호하는 방법이 있는데 다음의 코드를 사용자의 코드 시작 부분에 추가해주는 것이다.

    #if defined( _DEBUG )
    #pragma comment( lib, "strmbasd" )
    #else
    #pragma comment( lib, "strmbase" )
    #endif // _DEBUG


      이러한 방법을 사용할 경우 가장 큰 장점은 종속성이 코드에 직접적으로 삽입되어 프로젝트 파일에 의존하지 않고도 소스 코드를 공유할 수 있다는 것이다. 만약 사용자가 symbol을 찾을 수 없어서 생기는 문제에 봉착해있다면 위와 같은 방법을 사용해보는 것도 좋을 것이다. 이러한 문제를 해결하는 가장 일반적인 방법은 "dumpbin.exe"라고 불리는 툴을 상요하는 것으로 vc\bin 폴더에 존재한다.
      명령어를 실행해보자.

    dumpbin /SYMBOLS strmbase.lib > output.txt

      필자는 _IID_IMediaControl, _IID_IMediaEvent, and _CLSID_FilterGraph가 모두 라이브러리 파일의 .rdata 섹션에 정의되어 있는 것을 확인할 수 있었다. 사용자 역시 이런 방법을 통해
    사용자가 사용하려는 symbol이 어느 라이브러리 파일에 정의되어 있는지 볼 수 있다.

    Step 4 - 설치 확인하기
      설치가 제대로 되었는지 확인하기 위해서 이 어플리케이션을 빌드해서 실행해보자.
      만약 아무 이상없이 잘 돌아간다면 clock.avi 동영상이 출력되는 것을 볼 수 있을 것이다.



    Step 5 - Debug
    VS2005 Setting
    Custom Build Step

    Command Line field :
    regsvr32 /s /u "$(TargetPath)"
    regsvr32 /s "$(TargetPath)"
    echo regsvr32 exec. time > "$(OutDir)\$(TargetName)."

    Output field :
    $(TargetDir)\$(TargetName).trg

    Debug tab
    C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin\graphedt.exe


    and..
    아래와 같이 한다면 링크 에러는 막을수 있을것이다.. ㅡㅡ;
    #pragma comment(lib,".\\LIB\\strmiids.lib")

    #if defined( _DEBUG )
    #pragma comment( lib, ".\\LIB\\strmbasd.lib" )
    #else
    #pragma comment( lib, ".\\LIB\\strmbase.lib" )
    #endif


    #endif // !defined(L544_STDAFX_H__61F10A90_6372_47FB_B36C_DC8517CA004F__INCLUDED_)

    반응형

    댓글

Designed by Tistory.