미디어/필터

렌더 필터 - DirectShow

jjryu 2009. 2. 26. 00:34
미디어 검색 처리가 진행되려면 렌더 필터가 반드시 IMediaSeeking를 구현해야 한다.

기본 렌더 필터
CBaseRenderer
.CheckMediaType()    // virtural
입력 핀에 연결될 미디어형을 검사

on DoRenderSample
OnPaint
on Pause
on BreakConnect

.EndOfStream()
필터그래프매니저에 EC_COMPLETE 이벤트를 전달
IMediaSeeking    // CRendererPosPassThru
위 쪽 필터로 전달

IVideoWindow

CRendererInputPin -> CBaseInputPin
.EndOfStream()

CBaseControlWindow
IVideoWindow

.SetControlWindowPin()
.GetClassWindowStyles()    // virtual
OnReceiveMessage
OnClose

simple 렌더 필터
CBaseFilter
on Stop
call CRendererPosPassThru::ResetMediaTime()
on Pause
on Run
on EndOfStream
call CRendererPosPassThru::EOS()

IFileSinkFilter
.SetFileName()
.GetCurFile()

on Receive

on EndFlush
call CRendererPosPassThru::ResetMediaTime()

CRendererPosPassThru
IMediaSeeking    // virtual

CRenderedInputPin -> CBaseInputPin
.CheckMediaType()    // virtual
미디어 타입을 결정
.EndOfStream()

IMediaSample
.GetPointer()
.GetSize()
.SetActualDataLength()
.GetActualDataLength()
.SetTime()
.SetSyncPoint()
검색의 기본 단위
.SetDiscontinuity()
불연속성

CRendererPosPassThru
.ResetMediaTime()
.RegisterMediaTime()
.EOS()