What is direct show
This presentation is the property of its rightful owner.
Sponsored Links
1 / 62

What is Direct Show ? PowerPoint PPT Presentation


  • 231 Views
  • Uploaded on
  • Presentation posted in: General

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.

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


What is direct show

What is Direct Show ?

2006. 3. 14 (화)

한 민 규

[email protected]


Contents

Contents

  • DirectShow Overview

  • DirectShow Filter Type

  • Support various hardwares

  • DirectShow Function

  • Setup DirectShow SDK

  • Microsoft Component Model

  • 정지영상 캡쳐 프로그램

  • Appendix A. WDM


Overview

Overview


Introduction

Introduction

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

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

  • DirectX 실행환경은 대부분 윈도우에 기본적으로 설치되어 있음.

  • 윈도우 미디어 플레이어는 DirectShow를 포함한 DirectX 기술을 사용하는 대표적인 프로그램.


Direct show history flows

Direct Show History & Flows


About direct 9 0

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)

      • 추후 보안 및 코드취약성 업데이트 중


Directshow system overview

DirectShow System Overview

  • Directshow Framework

Abstract Layer

Hardware Layer


Background of directshow 1

Background of DirectShow(1)

  • DirectShow 의 모체는 비디오 캡쳐의 주요 기술인 VfW(Video for Windows).

  • 비디어 캡쳐 기술은 처음에 단순히 비디오 편집을 위해 입력된 영상을 파일에 저장하는 것을 목적으로 하였지만, PC에서 멀티미디어에 대한 요구가 점점 늘어나면서 단순 저장보다는 화상회의 같은 다양한 애플리케이션 형태로 발전함.

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


Background of directshow 2

Background of DirectShow(2)

  • 멀티미디어 데이터 특징


Background of directshow 3

Background of DirectShow(3)

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


Component architecture of directshow 1

Component Architecture of DirectShow (1)

  • DirectShow는 ‘필터(filter)’ 라는 구조의 컴포넌트를 도입하고 이들을 조합하여 다양한 멀티미디어 환경에 대응할 수 있도록 설계됨.

  • 필터는 MS의 COM(Component Object Model) 기술을 기반으로 제작되며, 이에 따라 생성된 객체(object)는 독립된 COM 객체로 취급됨.

  • DirectShow 자체는 사용자 모드 기술이므로 ‘DirectShow 가 보여주는 필터는 모두 사용자 모드의 필터’ 로 커널 모드의 하드웨어를 DirectShow 에서 사용하기 위해서는 특별한 형태의 사용자 모드 필터가 필요하다.

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


Component architecture of directshow 2

Component Architecture of DirectShow(2)

  • DirectShow는 필터를 조합하여 미디어를 재생.

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

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

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

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


Directshow grapheditor filter type

DirectShow GraphEditor Filter Type


Source filter

인터넷

DirectShow

소스 필터

변환 필터

렌더 필터

파일 시스템

사용자 모드

커널 모드

스트림

클래스

TV 튜너

기존의 VFW

캡쳐 장치

아날로그

비디오

크로스바

사운드 카드

WDM 캡쳐

장치

Source Filter

  • 필터그래프의 성격을 결정하는 중요한 필터.

  • 사용자 모드의 파일 시스템이나 인터넷 입력, 커널 모드의 다양한 하드웨어 입력, CD롬이나 DVD롬 등의 입력을 처리.

  • 얼마나 다양한 입력을 처리할 수 있느냐는 얼마나 많은 소스 필터를 보유하는지에 따라.


Transform filter

Transform Filter

  • 소스 필터로부터 입력된 데이터를 다양한 형태로 변화시키는 역할.

  • 적용될 수 있는 영역은 멀티미디어 데이터 압축 및 해제, 형식 변환, 데이터 수정 등.

  • 얼마나 다양한 포맷을 처리할 수 있느냐는 얼마나 많은 변환 필터를 보유하는냐에 따라.

DirectShow

DirectShow

코덱 필터

기존의 VFW

VCM/ACM

코덱

소스 필터

변환 필터

렌더 필터

사용자 모드

커널 모드

스트림

클래스

하드웨어

코덱 장치

WDM 코덱

장치


Render filter

인터넷

DirectShow

소스 필터

변환 필터

렌더 필터

파일 시스템

사용자 모드

커널 모드

스트림

클래스

DirectDraw

DirectSound

WDM 캡쳐

장치

비디오 카드

사운드 카드

Render Filter

  • 최종 출력을 어떤 형태로 처리할것인지 결정짓는 필터

  • 최종 출력을 파일로 저장할 수도 있고 화면에 출력할 수도 있고 또는 네트워크에 있는 다른 소스 필터로 최종 출력을 전송할 수도 있다.


Support various hardwares

Support various hardwares


Support various hardwares1

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 장치미니 드라이버


Directshow control

DirectShow control

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

  • 제어를 담당하는 컴포넌트는 “Filter graph manager”.

  • Filter graph manager가 filter graph의 제어를 독점하면 DirectShow의 작동 원칙을 일일이 설명할 필요가 없을 뿐만 아니라 잘못 사용함으로써 발생할 수 있는 치명적인 오류를 방지함.


Directshow function

DirectShow Function


Filter graph manager 1

Filter Graph Manager (1)

  • Role of Filter Graph Manager


Filter graph manager 2

Filter Graph Manager (2)

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

  • Filter Graph Manager distributes State/Control information

필터 그래프 매니저

분배작업


Data flows of directshow 1

필터그래프매니저

필터그래프 제어

멀티미디어 스트림

Data flows of DirectShow (1)

  • DirectShow에서는 제어와 데이터 흐름이 분리

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

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

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

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


Data flows of directshow 2

Data flows of DirectShow(2)

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

    • 많은 리소스와 CPU 성능을 절약할 수 있음.


Data flows of directshow 3

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


Thinking of development

Thinking of Development

  • Graph Editor & Directshow

  • FilterGraph Manager & Directshow Application

Directshow FilterComponent

Filter Graph Manager

Graph Editor

User

Directshow FilterComponent

Filter Graph Manager

User


Setup directshow sdk

Setup DirectShow SDK


Configuration of directx sdk path

Configuration of DirectX SDK Path

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

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


The thing of need for development

The thing of Need for development

  • DirectShow Application을 개발할 때는 DirectShow base class를 사용하는것이 권장 되지 않음.

    • strmbase.lib 파일을 사용하는 경우는 매우 드물지만 필터 개발에는 꼭 필요한 라이브러리다.

    • Directshow App 개발에 필요한 파일

    • “StdFax.h” 파일에 #include <dshow.h>

    • Strmiids.lib 파일은 위저드 실행시 자동 첨부됨.


Make application

Make Application


Make application1

Make Application

ClassView list


Use component lib

Use Component lib

Com lib loading

Com lib unloading


Component operation flow

Component Operation Flow

  • Component Operation Flow


Component creation onfileopen

Component Creation(OnFileOpen())


Microsoft component model

Microsoft Component Model


Iunknown interface

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


Support multiple interfaces

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


Query interface

Query Interface

  • pUnknown을 가지고 있다면 Component의 다른 Interface를 참조할 수 있다.

    • pUnknownQueryInterface(IID_Iaddition, &pAdd);

    • pAddQueryInterface(IID_Iunknown, &pUnknown);


Make multimedia player project

Make Multimedia Player Project


Mplyaer app example of com smartpoint

Mplyaer App & Example of Com SmartPoint

<stdafx.h>


Com filtergraph 1

Com을 이용한 Filtergraph 사용(1)

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

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


Com filtergraph 2

Com을 이용한 Filtergraph 사용(2)

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

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


Com smartpoint 1

COM SmartPoint(1)

  • COM 기술에 가장 많이 사용되는 것이 Interface의 비활성화에 해당하는 IUnknown::Release() 함수다.

    • Release()는 Local or Remote Server에서의 Component Object의 사용을 마치고 해제하는 역할을 한다.

    • Smart pointer : Memory Overflow를 automatic하게 방지하기 위해서 제안된 인터페이스.(일종의 macro 라 볼 수 있다.)


Com smartpoint 2

Com SmartPoint(2)

  • CComQIPter 은 QueryInterface() 와 Release()를 해줄 수 있는 Class임을 알 수 있다.

  • 소멸자에서 Component의 Object가 소멸될 때해제시켜 줄 수 있는 것을 알 수 있다.


Event processing

Event Processing

  • 미디어의 재싱이 모두 끝나면 어떻게 알 수 있을까?

  • 재생 중에 발생하는 오류를 어떻게 모니터링 할 수 있을까?

     IMediaEventEx Interface

Application

Event

FilterGraph Manager

Really?

Event

Graph Editor


Event handling

Event Handling

Application

Window Message Notify

Request Event

Get Event

Event Buffering

FilterGraph Manager

Message Queue

Event

Graph Editor

Video stream

Audio stream


What is direct show

정지영상 캡쳐 프로그램


What is direct show

정지영상 샘플 추출

<Project Execution>


Grapheditor spy example

GraphEditor Spy Example

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

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

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


Spy of samplegrabber app

Spy of SampleGrabber App

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

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


Implementation 2 onfileopen

Implementation(2) - OnFileOpen

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

<OnFileOpen()>


Implementation 2 capturescreen

Implementation(2) – CaptureScreen()

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

< CaptureScreen()>

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

Buffer Copy

Image(Bitmap)으로 저장


Implementaion 3 keyproc

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

Implementaion(3) KeyProc()

Virtual Key Matching


Result

Result

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


Appendix a

Appendix. A

  • WDM Windows Driver Model 을 의미한다.좀 더 정확히는 Win32 Driver Model 이라고 할 수 있다.WDM방식이란, 윈도우환경에서 디바이스드라이버를 작성하는 방법을 획일화한것임.이 방법으로 디바이스드라이버를 작성하면, 윈도우의 확장버젼이 나오더라도, 쉽게 이 디바이스드라이버코드를 그대로 사용할 수 있는 장점이 있다.기존에 윈도 드라이버는 윈도98용 따로, 윈도NT용 따로 이런식으로 운영체제별로 제 각각 개발해야했는데, 이런 불편을 줄이고 하나의 규격화된 드라이버로 각각의 운영체제에서 모두 사용 가능하도록 하자는 취지로 만들어진 개발 모델임.WDM 드라이버가 적용되는 운영체제는 윈도ME 이상.(윈도98SE도 지원하는 경우도 있다.)


Dshow filter insert

DShow Filter Insert


Directshow basic filter connection connect

DirectShow Basic ( Filter Connection : Connect)

FilterGraph Manager

IBaseFilter::EnumPins

IBaseFilter::EnumPins

IEnumPins(Interface Point)

input

output

input

output

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

FilterGraph Manager

Next()

Next()

input

output

input

output


Directshow basic filter connection connect1

DirectShow Basic ( Filter Connection : Connect)

Pin Interface

FilterGraph Manager

IPin

IPin

input

output

input

output

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

OutputPin::IPin

InputPin::IPin

FilterGraph Manager

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

input

output

input

output

CBasePin::AgreeMediaType() Call


Directshow basic filter connection media n egotiation

DirectShow Basic (Filter Connection : Media Negotiation)

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

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

CBasePin::AgreeMediaType()

1. CBasePin::AgreeMediaType() Call

input

output

input

output

3. Return IEnumMediaType Interface

4. CBasePin::TryMediaTypes Call

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

2. Create Mediatype enumerator


Directshow basic filter connection media n egotiation1

DirectShow Basic (Filter Connection : Media Negotiation)

CBasePin::TryMediaTypes()

IEnumMediaType::Next() Call

Iput Pint의 GetMediaType() Call

Next()

input

output

input

output

AM_MEDIA_TYPE

AttemptConnection()

Mediatype enumerator

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

CheckConnect()

CheckMediaType()

input

output

input

output

ReceiveConnection()

Output Pin의 IPin Interface를 넘겨준다.

CBasePin::CompleteConnect() Call  Start Buffer Negotiation


Push mode vs pull mode

Push Mode vs Pull Mode

  • Push Mode

  • Pull Mode

SourceFilter

Thread

Transform

Filter

Thread


Internal renderfile

Internal RenderFile

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


  • Login