62
HUFS MCLAB 1 Mar, 2006 What is Direct Show ? 2006. 3. 14 ( 화 ) 화 화 화 [email protected]

What is Direct Show ?

  • Upload
    dougal

  • View
    125

  • Download
    0

Embed Size (px)

DESCRIPTION

What is Direct Show ?. 2006. 3. 14 ( 화 ) 한 민 규 [email protected]. Contents. DirectShow Overview DirectShow Filter Type Support various hardwares DirectShow Function Setup DirectShow SDK Microsoft Component Model 정지영상 캡쳐 프로그램 Appendix A. WDM. Overview. Introduction. - PowerPoint PPT Presentation

Citation preview

Page 1: What is Direct Show ?

HUFS MCLAB 1 Mar, 2006

What is Direct Show ?

2006. 3. 14 ( 화 )한 민 규

[email protected]

Page 2: What is Direct Show ?

HUFS MCLAB 2 Mar, 2006

Contents

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

Page 3: What is Direct Show ?

HUFS MCLAB 3 Mar, 2006

Overview

Page 4: What is Direct Show ?

HUFS MCLAB 4 Mar, 2006

Introduction

MS 에서 제공하는 DirectX 패키지는 DirectX 프로그램을 실행하기 위한 ‘ run-time environment’ 와 DirectX 프로그램을 개발하기 위한 SDK 로 구성됨 .

DirectX 기술에는 윈도우 멀티미디어를 다루는 기술은 DirectShow 가 포함되어 있음 .

DirectX 실행환경은 대부분 윈도우에 기본적으로 설치되어 있음 . 윈도우 미디어 플레이어는 DirectShow 를 포함한 DirectX

기술을 사용하는 대표적인 프로그램 .

Page 5: What is Direct Show ?

HUFS MCLAB 5 Mar, 2006

Direct Show History & Flows

Year Version/Package Intro.

Quartz 액티브 무비의 초기 코드명

1996.07 Active Movie 1.0vfw 기술을 대체한 새로운 멀티미디어 소프트웨어 . 오디어 뿐만 아니라 MPEG-1, AVI, 퀵타임 비디오까지 재생할 수 있는 액티브

1997.03Active Movie 2.0(Direct Show 2.0)

다이렉트 X 의 명명 규칙에 따라 일관된 계획으로 재구성

1997.08 Direct show 5.0 제한적인 비디오와 오디오의 캡처 , 저장 , 편집 기능외에 DVD 재생 기능까지 지원

1997.12 Direct show 5.1 일부 버그 수정

1998.09 Direct show 6.0MPEG-2 지원 기능 추가 (MPEG-2 spliter, 디코더는 없음 ), 상당수의 버그 수정 , 약간의 기능 향상

2000.11 Direct show 8.0Direct Show 가 다이렉트 X 패키지에 포함되면서 다이렉트 X 미디어 구조는 사라짐 . DES(DirectShow Editing Service) 추가 , 그래프에디터에 그래프스파이 기능 추가

Direct show 8.1윈도우 XP 에 포함됨 . VMR(Video Mixing Renderer) 필터가오버 레이 믹서 필터와 비디오 렌더 필터를 대치

Page 6: What is Direct Show ?

HUFS MCLAB 6 Mar, 2006

About Direct 9.0

Direct 9.0 Beta 3.0▲ 인터넷 스트리밍 서비스를 위한 Direct show 의 새로운 버전인 Video mi

xing Render 가 포함됨 Video mixing Render 란 ?

완전한 비디오 품질과 기능을 창들로 구성된 다중 비디오 창을 지원

▲ 보다 다양한 디지털 컨텐츠를 즐길 수 있음▲ Characteristics

Support Windows98, ME, 2000, XP 단 , Windows 95 및 Windows NT 는 미지원

▲ 가장 최근 버전 DirectX 9.0c(2004.08) 추후 보안 및 코드취약성 업데이트 중

Page 7: What is Direct Show ?

HUFS MCLAB 7 Mar, 2006

DirectShow System Overview

Directshow Framework

Abstract Layer

Hardware Layer

Page 8: What is Direct Show ?

HUFS MCLAB 8 Mar, 2006

Background of DirectShow(1)

DirectShow 의 모체는 비디오 캡쳐의 주요 기술인 VfW(Video for Windows). 비디어 캡쳐 기술은 처음에 단순히 비디오 편집을 위해 입력된 영상을

파일에 저장하는 것을 목적으로 하였지만 , PC 에서 멀티미디어에 대한 요구가 점점 늘어나면서 단순 저장보다는 화상회의 같은 다양한 애플리케이션 형태로 발전함 .

MS 는 벤더들이 독자적으로 확장한 VfW 기술을 흡수하고 흩어져 있는 각종 멀티미디어 기술을 통합하는 기술을 발표 => DirectShow

Page 9: What is Direct Show ?

HUFS MCLAB 9 Mar, 2006

Background of DirectShow(2)

특징 세부내용

데이터 처리 멀티미디어 데이터는 대용량일 뿐 아니라 신속히 처리해야 하는 데이터이다

동기 문제 비디오와 오디오 , 그리고 부가 데이터 간의 동기 문제를 처리해야 한다

다양한 입력 로컬 , 네트워크 , 지상 / 위성 / 케이블 TV, 비디오 카메라 , 사운드 카드 등 다양한 입력을 처리해야 한다 .

다양한 포맷 AVI, ASF/WMV, MPEG, DVD, MJPEG, MP3, WAV 등 다양한 포맷을 처리할 수 있어야 한다

다양한 출력 비디오 카드와 사운드 카드 , 로컬 , 네트워크 등 다양한 출력을 처리해야 한다

하드웨어장치 하드웨어 존재 유무를 감지하여 하드웨어가 존재한다면 최대한 하드웨어를 활용할 수 있어야 한다

멀티미디어 데이터 특징

Page 10: What is Direct Show ?

HUFS MCLAB 10 Mar, 2006

Background of DirectShow(3)

특징 해결 방안

데이터 처리 DirectDraw 와 DirectSound 를 사용하여 데이터 처리의 효율성을 극대화한다

동기 문제 멀티미디어 데이터를 타임 스탬프를 사용한 멀티미디어 샘플로 포장하여 동기 문제를 처리한다

다양한 입 . 출력 및 포맷‘ 필터 (filter)’ 라고 불리는 컴포넌트 구조로 다양한 입력 , 다양한 포맷 , 그리고 다양한 출력 문제를 해결 할 수 있다 . 다양한 상황에 대해서도 적절히 컴포넌트를 조합함으로써 문제를 해결 할 수 있다

다양한 하드웨어 장치역시 컴포넌트 구조로 kernel-mode 를 대표하는 필터를 사용하거나 DirectShow 와 DirectSound 의 하드웨어 추상화 방식을 활용한다

멀티미디어 데이터의 처리방안

Page 11: What is Direct Show ?

HUFS MCLAB 11 Mar, 2006

Component Architecture of DirectShow (1) DirectShow 는 ‘필터 (filter)’ 라는 구조의 컴포넌트를 도입하고 이들을

조합하여 다양한 멀티미디어 환경에 대응할 수 있도록 설계됨 . 필터는 MS 의 COM(Component Object Model) 기술을 기반으로 제작되며 ,

이에 따라 생성된 객체 (object) 는 독립된 COM 객체로 취급됨 . DirectShow 자체는 사용자 모드 기술이므로 ‘ DirectShow 가 보여주는

필터는 모두 사용자 모드의 필터’ 로 커널 모드의 하드웨어를 DirectShow 에서 사용하기 위해서는 특별한 형태의 사용자 모드 필터가 필요하다 .

커널 모드의 하드웨어와 통신할 수 있는 특별한 DirectShow 필터는 “ Hardware Wrapper Filter”

Page 12: What is Direct Show ?

HUFS MCLAB 12 Mar, 2006

Component Architecture of DirectShow(2)

DirectShow 는 필터를 조합하여 미디어를 재생 . 필터 그래프 (Filter Graph) 는 필터들을 적절한 순서대로 조합하여 생성한 결과 .

DirectShow 의 미디어 재생 기능에 있어서 최소 단위의 시스템이 바로 필터라는 컴포넌트 단위 .

필터는 종류별로 묶어 분류하고 이에 GUID(Globally Unique Identifier) 를 붙여서 구별한 것 .

DirectShow 의 필터는 입력값으로 들어온 데이터 스트림을 사용자가 필요한 대로 가공 , 변경하여 출력 .

Page 13: What is Direct Show ?

HUFS MCLAB 13 Mar, 2006

DirectShow GraphEditor Filter Type

Page 14: What is Direct Show ?

HUFS MCLAB 14 Mar, 2006

Source Filter

필터그래프의 성격을 결정하는 중요한 필터 . 사용자 모드의 파일 시스템이나 인터넷 입력 , 커널 모드의 다양한

하드웨어 입력 , CD롬이나 DVD롬 등의 입력을 처리 . 얼마나 다양한 입력을 처리할 수 있느냐는 얼마나 많은 소스 필터를

보유하는지에 따라 .

소스 필터 변환 필터 렌더 필터

인터넷 인터넷

스트림클래스

파일 시스템

TV 튜너 아날로그비디오

크로스바WDM 캡쳐

장치사운드 카드

DirectShow

기존의 VFW캡쳐 장치

사용자 모드

커널 모드

Page 15: What is Direct Show ?

HUFS MCLAB 15 Mar, 2006

Transform Filter

소스 필터로부터 입력된 데이터를 다양한 형태로 변화시키는 역할 . 적용될 수 있는 영역은 멀티미디어 데이터 압축 및 해제 , 형식 변

환 , 데이터 수정 등 . 얼마나 다양한 포맷을 처리할 수 있느냐는 얼마나 많은 변환 필터를

보유하는냐에 따라 .

DirectShow코덱 필터

하드웨어코덱 장치

소스 필터 변환 필터 렌더 필터

DirectShow기존의 VFWVCM/ACM

코덱

스트림클래스

WDM 코덱장치

사용자 모드

커널 모드

Page 16: What is Direct Show ?

HUFS MCLAB 16 Mar, 2006

Render Filter

최종 출력을 어떤 형태로 처리할것인지 결정짓는 필터 최종 출력을 파일로 저장할 수도 있고 화면에 출력할 수도 있고 또는 네트워크에 있는 다른 소스 필터로 최종 출력을 전송할 수도 있다 .

인터넷 인터넷

파일 시스템

사운드 카드

소스 필터 변환 필터 렌더 필터

DirectShow

스트림클래스

WDM 캡쳐장치

사용자 모드

커널 모드

비디오 카드

DirectDraw DirectSound

Page 17: What is Direct Show ?

HUFS MCLAB 17 Mar, 2006

Support various hardwares

Page 18: What is Direct Show ?

HUFS MCLAB 18 Mar, 2006

Support various hardwares

Directshow 는 UserMode 이기 때문에 UserMode 의 Filter만을 사용할 수 있다 . Kernel Mode 의 Hardware 와 통신할 수 있는 특별한 Directshow Filter 가 필요하다 .

Hardware Wrapper Filter KsProxy Filter

DirectShowKsProxy

Filter

Stream Class

WDM 장치미니 드라이버

User Mode

Kernel Mode

Page 19: What is Direct Show ?

HUFS MCLAB 19 Mar, 2006

DirectShow control

DirectShow 는 다수의 컴포넌트 객체가 서로 상호 작용하여 동작하는 구조로 이루어져 있기 때문에 Single-Thread 로는 동작하기 어려우며 대개 Multi-Thread 로 동작하게 된다 . Multi-Thread 환경에서의 Deadlock 를 피하기 위해 모든 제어 동작을 항상 “ upstream order” 로만 수행하도록 규정함 .

제어를 담당하는 컴포넌트는 “ Filter graph manager”. Filter graph manager 가 filter graph 의 제어를 독점하면

DirectShow 의 작동 원칙을 일일이 설명할 필요가 없을 뿐만 아니라 잘못 사용함으로써 발생할 수 있는 치명적인 오류를 방지함 .

Page 20: What is Direct Show ?

HUFS MCLAB 20 Mar, 2006

DirectShow Function

Page 21: What is Direct Show ?

HUFS MCLAB 21 Mar, 2006

Filter Graph Manager (1)

필터그래프 매니저의 역할 설 명

필터그래프 조작 / 구성필터 추가 및 삭제 , 열거 등 필터 관련 작업과 이들 필터 간의 연결 , 연결 해제 , 그리고 렌더링 등 필터 그래프 구성에 대한 동작을 지원한다 .

필터그래프 제어 필터그래프 재생 , 일시정지 , 정지 등 제어 동작과 그밖에 필요한 동작을 지원한다 .

상태 / 제어 정보 분배필터그래프에서 발생한 상태 변화 및 제어를 필터그래프의 필터들에 골고루 분배하는 역할을 수행한다 . 모든 필터가 아닌 관련 필터에만 분배하는 경우도 있다 .

Role of Filter Graph Manager

Page 22: What is Direct Show ?

HUFS MCLAB 22 Mar, 2006

Filter Graph Manager (2)

필터 그래프에 제어 명령이 내려지면 해당 필터에 명령을 전달하고 상태를 주시한다 . 이벤트 등을 통해 상태 변화가 전달되면 다시 필요한 필터에 상태 변화를 전달하고 필요한 작업을 수행하도록 한다 .

Filter Graph Manager distributes State/Control information

필터 그래프 매니저분배작업

Page 23: What is Direct Show ?

HUFS MCLAB 23 Mar, 2006

Data flows of DirectShow (1)

DirectShow 에서는 제어와 데이터 흐름이 분리 멀티미디어 데이터가 흐를 수 있는 전용물길을 만들어 주고 제어를 분리하여 필요할 때만 물길에 영향을 미칠 수 있게 함으로써 효율적으로 처리

제어는 필터그래프 매니저에서 담당하며 멀티미디어 데이터는 필터그래프 내에서만 흐른다 .

필터그래프매니저는 이러한 데이터 흐름을 제어할 뿐이지 스트림이 흘러가는 방향을 변경할 수는 없다 .

멀티미디어 스트림의 path 가 정해짐에 따라 굳이 데이터를 복사하여 전달할 필요 없이 직접 전달할 수 있음 . Buffer share

멀티미디어 스트림

필터그래프 제어필터그래프매니저

Page 24: What is Direct Show ?

HUFS MCLAB 24 Mar, 2006

Data flows of DirectShow(2)

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

Page 25: What is Direct Show ?

HUFS MCLAB 25 Mar, 2006

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

Page 26: What is Direct Show ?

HUFS MCLAB 26 Mar, 2006

Thinking of Development

Graph Editor & Directshow

FilterGraph Manager & Directshow Application

User Directshow Filter

ComponentFilter Graph

ManagerGraph Editor

User Directshow FilterComponent

Filter Graph Manager

Page 27: What is Direct Show ?

HUFS MCLAB 27 Mar, 2006

Setup DirectShow SDK

Page 28: What is Direct Show ?

HUFS MCLAB 28 Mar, 2006

Configuration of DirectX SDK Path

비주얼 C++통합 환경에서 Tool>Option 메뉴를 누르면 옵션 대화상자가 나타난다 .

위의 두 그림과 같이 Directions 탭의 ‘ Include files’, ‘Library files’ 와 관련된 설정에 반드시 DirectX SDK 경로가 포함되어 있어야 한다 .

Page 29: What is Direct Show ?

HUFS MCLAB 29 Mar, 2006

The thing of Need for development

DirectShow Application 을 개발할 때는 DirectShow base class 를 사용하는것이 권장 되지 않음 .▲ strmbase.lib 파일을 사용하는 경우는 매우 드물지만 필터 개발에는 꼭 필요한

라이브러리다 .▲ Directshow App 개발에 필요한 파일

▲ “StdFax.h” 파일에 #include <dshow.h>▲ Strmiids.lib 파일은 위저드 실행시 자동 첨부됨 .

항목 필요한 파일 사용 범위

헤더 파일 dshow.h 모든 DirectShow Application

라이브러리 파일

strmiids.libCLSID 와 IID 정의 포함 모든 DirectShow Application

quartz.lib AMGetErrorText() 함수를 사용하는 경우

strmbase.lib DirectShow base class 를 사용하는 경우

Page 30: What is Direct Show ?

HUFS MCLAB 30 Mar, 2006

Make Application

Page 31: What is Direct Show ?

HUFS MCLAB 31 Mar, 2006

Make Application

ClassView list

Page 32: What is Direct Show ?

HUFS MCLAB 32 Mar, 2006

Use Component lib

Com lib loading

Com lib unloading

Page 33: What is Direct Show ?

HUFS MCLAB 33 Mar, 2006

Component Operation Flow

Component Operation Flow

Page 34: What is Direct Show ?

HUFS MCLAB 34 Mar, 2006

Component Creation(OnFileOpen())

Page 35: What is Direct Show ?

HUFS MCLAB 35 Mar, 2006

Microsoft Component Model

Page 36: What is Direct Show ?

HUFS MCLAB 36 Mar, 2006

IUnknown Interface

Struct Iunknown{

virtual HRESULT QeuryInterface(IID &iid, void **ppvObj) = 0; virtual ULONG AddRef() = 0;

virtual ULONG Release() = 0;

}

QueryInterface( )

AddRef( )

Release( )

pIUnknownpfnQueryInterface

pfnAddRef

pfnRelease

Virtual Function Pointer Table

Implement

Object

IUnknown

Compenet

Page 37: What is Direct Show ?

HUFS MCLAB 37 Mar, 2006

Support Multiple Interfaces struct Iaddition : public Iunknown{

virtual HRESULT Add(int vlaue) = 0;virtual int GetResult() = 0;

}

QueryInterface( )

AddRef( )

Release( )

pIUnknownpfnQueryInterface

pfnAddRef

pfnRelease

Virtual Function Pointer Table

Implement

QueryInterface( )AddRef( )

Release( )

Add( )

GetResult( )

pfnQueryInterface

pfnAddRef

pfnRelease

pfnAdd

pfnGetResult

pIAddition

Component

IUnknown

IAddition

Page 38: What is Direct Show ?

HUFS MCLAB 38 Mar, 2006

Query Interface

pUnknown 을 가지고 있다면 Component 의 다른 Interface 를 참조할 수 있다 .▲ pUnknownQueryInterface(IID_Iaddition, &pAdd);▲ pAddQueryInterface(IID_Iunknown, &pUnknown);

Page 39: What is Direct Show ?

HUFS MCLAB 39 Mar, 2006

Make Multimedia Player Project

Page 40: What is Direct Show ?

HUFS MCLAB 40 Mar, 2006

Mplyaer App & Example of Com SmartPoint

<stdafx.h>

Page 41: What is Direct Show ?

HUFS MCLAB 41 Mar, 2006

Com 을 이용한 Filtergraph 사용 (1)OnFileOpen( ) : Com Object(FilterGraph Manager Component) 생성 및 wFilelName 의 MM 파일을 Rendering 할 수 있게 Filtergraph Manager 에게 요청한다 .

OnPlayClip( ) : QueryInterface() 를 수행하여 IID_ImediaControl 인터페이스의 포인터를 받아오며 , FilterGraph 에 필터를 동작시킨다 .(연결된 스트림을 동작시킨다는 의미 )

Page 42: What is Direct Show ?

HUFS MCLAB 42 Mar, 2006

Com 을 이용한 Filtergraph 사용 (2)OnPauseClip( ) : QueryInterface() 를 수행하여 IID_ImediaControl 인터페이스의 포인터를 받아오며 , FilterGraph 에 스트림을 잠시 Pause시키는 function 을 수행시킨다 .

OnStopClip( ) : FilterGraph 에 흐르던 스트림을 모두 정지시킨다 .( 필터 기능을 다 정지 시킨다 .)

Page 43: What is Direct Show ?

HUFS MCLAB 43 Mar, 2006

COM SmartPoint(1)

COM 기술에 가장 많이 사용되는 것이 Interface 의 비활성화에 해당하는 IUnknown::Release() 함수다 .▲ Release() 는 Local or Remote Server 에서의 Component Object 의

사용을 마치고 해제하는 역할을 한다 .▲ Smart pointer : Memory Overflow 를 automatic 하게 방지하기 위해서

제안된 인터페이스 .( 일종의 macro 라 볼 수 있다 .)

Page 44: What is Direct Show ?

HUFS MCLAB 44 Mar, 2006

Com SmartPoint(2)

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

Page 45: What is Direct Show ?

HUFS MCLAB 45 Mar, 2006

Event Processing

미디어의 재싱이 모두 끝나면 어떻게 알 수 있을까 ? 재생 중에 발생하는 오류를 어떻게 모니터링 할 수 있을까 ? IMediaEventEx Interface

Application

FilterGraph Manager

Graph Editor

Event

Event

Really?

Page 46: What is Direct Show ?

HUFS MCLAB 46 Mar, 2006

Event Handling

Graph Editor

FilterGraph Manager

Application

Message Queue

Event Buffering

Event

Window Message NotifyRequest Event Get Event

Video stream

Audio stream

Page 47: What is Direct Show ?

HUFS MCLAB 47 Mar, 2006

정지영상 캡쳐 프로그램

Page 48: What is Direct Show ?

HUFS MCLAB 48 Mar, 2006

정지영상 샘플 추출

<Project Execution>

Page 49: What is Direct Show ?

HUFS MCLAB 49 Mar, 2006

GraphEditor Spy Example

GraphEditor 의 Spy 기능은 현재 실행되는 멀티미디어 파일에 대한 스트림정보를 정열하여 사용하고 있는 필터에 대한 정보를 한눈에 보여줄 수 있으며 , 이 기능을 통해 필터의 기능이 어느곳에 필요한지 알아낼 수 있다 .

Spy 를 사용하여 구현한 부분이 적합한 기능을 할 수 있는 위치에 삽입되었는지 시각적으로 알 수 있다 .

SampleGrabber Filter 삽입 후 Spy 프로그램 실행 화면

Page 50: What is Direct Show ?

HUFS MCLAB 50 Mar, 2006

Spy of SampleGrabber App

Screen Capture 후 BITMAP Image 로 정지화면을 출력하기 위해서는 해당 Filter 를 Video Render Filter 앞쪽으로 옮겨야 하며 , Capture 를 하기위한 Buffering 을 하는 기능을 추가해야 한다 .

Filter Connection 사이에 추가 되어야 한다 .

Page 51: What is Direct Show ?

HUFS MCLAB 51 Mar, 2006

Implementation(2) - OnFileOpen

Rendering Filter 앞에 추가하기 위해서는 Rendering Filter 의 Input Pin 에서 제공하는 Media Major Type 과 SubType 에 맞춰줘야 한다 .<OnFileOpen()>

Page 52: What is Direct Show ?

HUFS MCLAB 52 Mar, 2006

Implementation(2) – CaptureScreen()

각 Filter 는 스트림을 잠시 담고 있는 Buffer 를 참조 하고 있다 . 그 버퍼의 크기를 알아내고 , Sample 을 추출하기 위한 Buffer 를 그 크기로 맞춘 후 Buffer 를 Copy 한다 .< CaptureScreen()>

스트림 버퍼 (FilterGraph Manager 가사용하는 Real Buffer)

Buffer Copy

Image(Bitmap) 으로 저장

Page 53: What is Direct Show ?

HUFS MCLAB 53 Mar, 2006

Implementaion(3) KeyProc()

해당 APP 는 PrintScreen Key 를 누른 후 동영상의 정지영상 (이미지 ) 를 캡쳐하여 비트맵으로 저장한다 .

Virtual Key Matching

Page 54: What is Direct Show ?

HUFS MCLAB 54 Mar, 2006

Result

Capture Screen 실행 후 Bitmap 으로 저장된 화면

Page 55: What is Direct Show ?

HUFS MCLAB 55 Mar, 2006

Appendix. A WDM

Windows Driver Model 을 의미한다 .

좀 더 정확히는 Win32 Driver Model 이라고 할 수 있다 .

WDM방식이란 ,

윈도우환경에서 디바이스드라이버를 작성하는 방법을 획일화한것임 .

이 방법으로 디바이스드라이버를 작성하면 , 윈도우의 확장버젼이 나오더라도 ,

쉽게 이 디바이스드라이버코드를 그대로 사용할 수 있는 장점이 있다 .

기존에 윈도 드라이버는 윈도 98용 따로 , 윈도 NT용 따로 이런식으로

운영체제별로 제 각각 개발해야했는데 , 이런 불편을 줄이고

하나의 규격화된 드라이버로 각각의 운영체제에서 모두 사용 가능하도록 하자는

취지로 만들어진 개발 모델임 .

WDM 드라이버가 적용되는 운영체제는 윈도 ME 이상 .

( 윈도 98SE 도 지원하는 경우도 있다 .)

Page 56: What is Direct Show ?

HUFS MCLAB 56 Mar, 2006

DShow Filter Insert

Page 57: What is Direct Show ?

HUFS MCLAB 57 Mar, 2006

DirectShow Basic ( Filter Connection : Connect)

FilterGraph Manager

input output input output

IBaseFilter::EnumPins

IEnumPins(Interface Point)

IBaseFilter::EnumPins

input output input output

FilterGraph Manager

Next() Next()

IEnumPins Interface 를 통해 Next() 를 Call CBaseFilter::GetPin() 을 Call 한다 . IPin Interface 를 Return 받는다 .

Page 58: What is Direct Show ?

HUFS MCLAB 58 Mar, 2006

DirectShow Basic ( Filter Connection : Connect)

input output input output

FilterGraph Manager

IPin IPin

Pin Interface

input output input output

FilterGraph Manager

InputPin::IPin

IPin Interface Pointer 를 통해 IPin::Connect() 함수를 호출한다 .

CBasePin::Connect(Input::Ipin, MediaType(=NULL))

OutputPin::IPin

CBasePin::AgreeMediaType() Call

Page 59: What is Direct Show ?

HUFS MCLAB 59 Mar, 2006

DirectShow Basic (Filter Connection : Media Negotiation)

IPin::Connect() 함수가 호출되었을 때 미디어형이 입력되지 않았다면 미디어형 열거 과정을 거쳐야 한다 .

미디어형이 명시되었다면 바로 연결을 시도한다 .

input output input output

CBasePin::AgreeMediaType()

1. CBasePin::AgreeMediaType() Call

2. Create Mediatype enumerator

3. Return IEnumMediaType Interface

4. CBasePin::TryMediaTypes Call(Mediatype enumerator 가 제시하는 MediaType 에 대해 가능성을 시도해 보는 함수이다 .)

Page 60: What is Direct Show ?

HUFS MCLAB 60 Mar, 2006

DirectShow Basic (Filter Connection : Media Negotiation)

input output input output

CBasePin::TryMediaTypes()

Mediatype enumerator

IEnumMediaType::Next() Call

Next() Iput Pint 의 GetMediaType() Call

AM_MEDIA_TYPE

AttemptConnection()

input output input output

CBasePin::AttemptConnection() Output Pin 에 CBasePin::CheckConnect() Call 하여 Pin 의 방향성을 확인

CheckConnect()

CheckMediaType()

CBasePin::CompleteConnect() Call Start Buffer Negotiation

ReceiveConnection()Output Pin 의 IPin Interface 를 넘겨준다 .

Page 61: What is Direct Show ?

HUFS MCLAB 61 Mar, 2006

Push Mode vs Pull Mode

Push Mode

Pull Mode

SourceFilter

TransformFilter

Thread

Thread

Page 62: What is Direct Show ?

HUFS MCLAB 62 Mar, 2006

Internal RenderFile

Renderfile 은 모든 스트리밍에 대한 Mediatype 을 NULL로 셋팅함으로써 Pin 에대한 협상과 버퍼협상에 관련된 수행 메서드들을 감추고 있다 .