1 / 62

What is Direct Show ?

What is Direct Show ?. 2006. 3. 14 ( 화 ) 한 민 규 hufs96mk@hufs.ac.kr. Contents. DirectShow Overview DirectShow Filter Type Support various hardwares DirectShow Function Setup DirectShow SDK Microsoft Component Model 정지영상 캡쳐 프로그램 Appendix A. WDM. Overview. Introduction.

dougal
Download Presentation

What is Direct Show ?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. What is Direct Show ? 2006. 3. 14 (화) 한 민 규 hufs96mk@hufs.ac.kr

  2. Contents • DirectShow Overview • DirectShow Filter Type • Support various hardwares • DirectShow Function • Setup DirectShow SDK • Microsoft Component Model • 정지영상 캡쳐 프로그램 • Appendix A. WDM

  3. Overview

  4. Introduction • MS에서 제공하는 DirectX 패키지는 DirectX프로그램을 실행하기 위한 ‘run-time environment’와 DirectX 프로그램을 개발하기 위한 SDK로 구성됨. • DirectX 기술에는 윈도우 멀티미디어를 다루는 기술은 DirectShow가 포함되어 있음. • DirectX 실행환경은 대부분 윈도우에 기본적으로 설치되어 있음. • 윈도우 미디어 플레이어는 DirectShow를 포함한 DirectX 기술을 사용하는 대표적인 프로그램.

  5. Direct Show History & Flows

  6. About Direct 9.0 • Direct 9.0 Beta 3.0 • 인터넷 스트리밍 서비스를 위한 Direct show의 새로운 버전인 Video mixing Render가 포함됨 • Video mixing Render 란? • 완전한 비디오 품질과 기능을 창들로 구성된 다중 비디오 창을 지원 • 보다 다양한 디지털 컨텐츠를 즐길 수 있음 • Characteristics • Support Windows98, ME, 2000, XP • 단, Windows 95 및 Windows NT는 미지원 • 가장 최근 버전 • DirectX 9.0c(2004.08) • 추후 보안 및 코드취약성 업데이트 중

  7. DirectShow System Overview • Directshow Framework Abstract Layer Hardware Layer

  8. Background of DirectShow(1) • DirectShow 의 모체는 비디오 캡쳐의 주요 기술인 VfW(Video for Windows). • 비디어 캡쳐 기술은 처음에 단순히 비디오 편집을 위해 입력된 영상을 파일에 저장하는 것을 목적으로 하였지만, PC에서 멀티미디어에 대한 요구가 점점 늘어나면서 단순 저장보다는 화상회의 같은 다양한 애플리케이션 형태로 발전함. • MS는 벤더들이 독자적으로 확장한 VfW 기술을 흡수하고 흩어져 있는 각종 멀티미디어 기술을 통합하는 기술을 발표 => DirectShow

  9. Background of DirectShow(2) • 멀티미디어 데이터 특징

  10. Background of DirectShow(3) • 멀티미디어 데이터의 처리방안

  11. Component Architecture of DirectShow (1) • DirectShow는 ‘필터(filter)’ 라는 구조의 컴포넌트를 도입하고 이들을 조합하여 다양한 멀티미디어 환경에 대응할 수 있도록 설계됨. • 필터는 MS의 COM(Component Object Model) 기술을 기반으로 제작되며, 이에 따라 생성된 객체(object)는 독립된 COM 객체로 취급됨. • DirectShow 자체는 사용자 모드 기술이므로 ‘DirectShow 가 보여주는 필터는 모두 사용자 모드의 필터’ 로 커널 모드의 하드웨어를 DirectShow 에서 사용하기 위해서는 특별한 형태의 사용자 모드 필터가 필요하다. • 커널 모드의 하드웨어와 통신할 수 있는 특별한 DirectShow 필터는 “Hardware Wrapper Filter”

  12. Component Architecture of DirectShow(2) • DirectShow는 필터를 조합하여 미디어를 재생. • 필터 그래프(Filter Graph)는 필터들을 적절한 순서대로 조합하여 생성한 결과. • DirectShow의 미디어 재생 기능에 있어서 최소 단위의 시스템이 바로 필터라는 컴포넌트 단위. • 필터는 종류별로 묶어 분류하고 이에 GUID(Globally Unique Identifier)를 붙여서 구별한 것. • DirectShow의 필터는 입력값으로 들어온 데이터 스트림을 사용자가 필요한 대로 가공, 변경하여 출력.

  13. DirectShow GraphEditor Filter Type

  14. 인터넷 DirectShow 소스 필터 변환 필터 렌더 필터 파일 시스템 사용자 모드 커널 모드 스트림 클래스 TV 튜너 기존의 VFW 캡쳐 장치 아날로그 비디오 크로스바 사운드 카드 WDM 캡쳐 장치 Source Filter • 필터그래프의 성격을 결정하는 중요한 필터. • 사용자 모드의 파일 시스템이나 인터넷 입력, 커널 모드의 다양한 하드웨어 입력, CD롬이나 DVD롬 등의 입력을 처리. • 얼마나 다양한 입력을 처리할 수 있느냐는 얼마나 많은 소스 필터를 보유하는지에 따라.

  15. Transform Filter • 소스 필터로부터 입력된 데이터를 다양한 형태로 변화시키는 역할. • 적용될 수 있는 영역은 멀티미디어 데이터 압축 및 해제, 형식 변환, 데이터 수정 등. • 얼마나 다양한 포맷을 처리할 수 있느냐는 얼마나 많은 변환 필터를 보유하는냐에 따라. DirectShow DirectShow 코덱 필터 기존의 VFW VCM/ACM 코덱 소스 필터 변환 필터 렌더 필터 사용자 모드 커널 모드 스트림 클래스 하드웨어 코덱 장치 WDM 코덱 장치

  16. 인터넷 DirectShow 소스 필터 변환 필터 렌더 필터 파일 시스템 사용자 모드 커널 모드 스트림 클래스 DirectDraw DirectSound WDM 캡쳐 장치 비디오 카드 사운드 카드 Render Filter • 최종 출력을 어떤 형태로 처리할것인지 결정짓는 필터 • 최종 출력을 파일로 저장할 수도 있고 화면에 출력할 수도 있고 또는 네트워크에 있는 다른 소스 필터로 최종 출력을 전송할 수도 있다.

  17. Support various hardwares

  18. Support various hardwares • Directshow는 UserMode이기 때문에 UserMode의 Filter만을 사용할 수 있다. Kernel Mode의 Hardware와 통신할 수 있는 특별한 Directshow Filter가 필요하다. • Hardware Wrapper Filter  KsProxy Filter DirectShow KsProxyFilter User Mode Kernel Mode Stream Class WDM 장치미니 드라이버

  19. DirectShow control • DirectShow는 다수의 컴포넌트 객체가 서로 상호 작용하여 동작하는 구조로 이루어져 있기 때문에 Single-Thread로는 동작하기 어려우며 대개 Multi-Thread로 동작하게 된다. Multi-Thread 환경에서의 Deadlock를 피하기 위해 모든 제어 동작을 항상 “upstream order”로만 수행하도록 규정함. • 제어를 담당하는 컴포넌트는 “Filter graph manager”. • Filter graph manager가 filter graph의 제어를 독점하면 DirectShow의 작동 원칙을 일일이 설명할 필요가 없을 뿐만 아니라 잘못 사용함으로써 발생할 수 있는 치명적인 오류를 방지함.

  20. DirectShow Function

  21. Filter Graph Manager (1) • Role of Filter Graph Manager

  22. Filter Graph Manager (2) • 필터 그래프에 제어 명령이 내려지면 해당 필터에 명령을 전달하고 상태를 주시한다. 이벤트 등을 통해 상태 변화가 전달되면 다시 필요한 필터에 상태 변화를 전달하고 필요한 작업을 수행하도록 한다. • Filter Graph Manager distributes State/Control information 필터 그래프 매니저 분배작업

  23. 필터그래프매니저 필터그래프 제어 멀티미디어 스트림 Data flows of DirectShow (1) • DirectShow에서는 제어와 데이터 흐름이 분리 • 멀티미디어 데이터가 흐를 수 있는 전용물길을 만들어 주고 제어를 분리하여 필요할 때만 물길에 영향을 미칠 수 있게 함으로써 효율적으로 처리 • 제어는 필터그래프 매니저에서 담당하며 멀티미디어 데이터는 필터그래프 내에서만 흐른다. • 필터그래프매니저는 이러한 데이터 흐름을 제어할 뿐이지 스트림이 흘러가는 방향을 변경할 수는 없다. • 멀티미디어 스트림의 path가 정해짐에 따라 굳이 데이터를 복사하여 전달할 필요 없이 직접 전달할 수 있음.  Buffer share

  24. Data flows of DirectShow(2) • 버퍼 공유 : 멀티미디어 스트림의 물길이 정해짐에 따라 굳이 데이터를 복사하여 전달할 필요 없이 직접 전달할 수 있게 한다. 멀티미디어 데이터는 크기가 크기 때문에, 복사하는 횟수를 줄일수록 성능을 향상 시킬 수 있다. DirectShow는 ‘Buffer Negotiation”이라는 과정을 통해 가능하면 최대한 버퍼를 공유해 불필요한 복사 연산을 줄이도록 설계되었다. • 많은 리소스와 CPU 성능을 절약할 수 있음.

  25. Data flows of DirectShow(3) • Buffer Negotiation • Vfw • Directshow Source A InPlace B CopyDec C InPlace D InPlace E VidRen F A B C D E F Source A InPlace B CopyDec C InPlace D InPlace E VidRen F A B C D E F

  26. Thinking of Development • Graph Editor & Directshow • FilterGraph Manager & Directshow Application Directshow FilterComponent Filter Graph Manager Graph Editor User Directshow FilterComponent Filter Graph Manager User

  27. Setup DirectShow SDK

  28. Configuration of DirectX SDK Path • 비주얼 C++통합 환경에서 Tool>Option 메뉴를 누르면 옵션 대화상자가 나타난다. • 위의 두 그림과 같이 Directions 탭의 ‘Include files’, ‘Library files’와 관련된 설정에 반드시 DirectX SDK 경로가 포함되어 있어야 한다.

  29. The thing of Need for development • DirectShow Application을 개발할 때는 DirectShow base class를 사용하는것이 권장 되지 않음. • strmbase.lib 파일을 사용하는 경우는 매우 드물지만 필터 개발에는 꼭 필요한 라이브러리다. • Directshow App 개발에 필요한 파일 • “StdFax.h” 파일에 #include <dshow.h> • Strmiids.lib 파일은 위저드 실행시 자동 첨부됨.

  30. Make Application

  31. Make Application ClassView list

  32. Use Component lib Com lib loading Com lib unloading

  33. Component Operation Flow • Component Operation Flow

  34. Component Creation(OnFileOpen())

  35. Microsoft Component Model

  36. IUnknown Interface • Struct Iunknown{ virtual HRESULT QeuryInterface(IID &iid, void **ppvObj) = 0; virtual ULONG AddRef() = 0; virtual ULONG Release() = 0;} Virtual Function Pointer Table Compenet pIUnknown IUnknown QueryInterface( ) pfnQueryInterface pfnAddRef AddRef( ) pfnRelease Release( ) Object Implement

  37. Support Multiple Interfaces • struct Iaddition : public Iunknown { virtual HRESULT Add(int vlaue) = 0; virtual int GetResult() = 0; } IUnknown IAddition Component Virtual Function Pointer Table pIUnknown QueryInterface( ) pfnQueryInterface pfnAddRef AddRef( ) pfnRelease Release( ) pIAddition pfnQueryInterface QueryInterface( ) pfnAddRef AddRef( ) Release( ) pfnRelease Add( ) pfnAdd GetResult( ) pfnGetResult Implement

  38. Query Interface • pUnknown을 가지고 있다면 Component의 다른 Interface를 참조할 수 있다. • pUnknownQueryInterface(IID_Iaddition, &pAdd); • pAddQueryInterface(IID_Iunknown, &pUnknown);

  39. Make Multimedia Player Project

  40. Mplyaer App & Example of Com SmartPoint <stdafx.h>

  41. Com을 이용한 Filtergraph 사용(1) OnFileOpen( ) : Com Object(FilterGraph Manager Component) 생성 및 wFilelName의 MM파일을 Rendering 할 수 있게 Filtergraph Manager에게 요청한다. OnPlayClip( ) : QueryInterface()를 수행하여 IID_ImediaControl 인터페이스의 포인터를 받아오며, FilterGraph에 필터를 동작시킨다.(연결된 스트림을 동작시킨다는 의미)

  42. Com을 이용한 Filtergraph 사용(2) OnPauseClip( ) : QueryInterface()를 수행하여 IID_ImediaControl 인터페이스의 포인터를 받아오며, FilterGraph에 스트림을 잠시 Pause시키는 function을 수행시킨다. OnStopClip( ) : FilterGraph에 흐르던 스트림을 모두 정지시킨다.(필터 기능을 다 정지 시킨다.)

  43. COM SmartPoint(1) • COM 기술에 가장 많이 사용되는 것이 Interface의 비활성화에 해당하는 IUnknown::Release() 함수다. • Release()는 Local or Remote Server에서의 Component Object의 사용을 마치고 해제하는 역할을 한다. • Smart pointer : Memory Overflow를 automatic하게 방지하기 위해서 제안된 인터페이스.(일종의 macro 라 볼 수 있다.)

  44. Com SmartPoint(2) • CComQIPter 은 QueryInterface() 와 Release()를 해줄 수 있는 Class임을 알 수 있다. • 소멸자에서 Component의 Object가 소멸될 때해제시켜 줄 수 있는 것을 알 수 있다.

  45. Event Processing • 미디어의 재싱이 모두 끝나면 어떻게 알 수 있을까? • 재생 중에 발생하는 오류를 어떻게 모니터링 할 수 있을까?  IMediaEventEx Interface Application Event FilterGraph Manager Really? Event Graph Editor

  46. Event Handling Application Window Message Notify Request Event Get Event Event Buffering FilterGraph Manager Message Queue Event Graph Editor Video stream Audio stream

  47. 정지영상 캡쳐 프로그램

  48. 정지영상 샘플 추출 <Project Execution>

  49. GraphEditor Spy Example • GraphEditor의 Spy 기능은 현재 실행되는 멀티미디어 파일에 대한 스트림정보를 정열하여 사용하고 있는 필터에 대한 정보를 한눈에 보여줄 수 있으며, 이 기능을 통해 필터의 기능이 어느곳에 필요한지 알아낼 수 있다. • Spy를 사용하여 구현한 부분이 적합한 기능을 할 수 있는 위치에 삽입되었는지 시각적으로 알 수 있다. • SampleGrabber Filter 삽입 후 Spy 프로그램 실행 화면

  50. Spy of SampleGrabber App • Screen Capture 후 BITMAP Image로 정지화면을 출력하기 위해서는 해당 Filter를 Video Render Filter 앞쪽으로 옮겨야 하며, Capture를 하기위한 Buffering을 하는 기능을 추가해야 한다. Filter Connection 사이에 추가 되어야 한다.

More Related