DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CBaseRenderer   [목차열람] [주소복사] [슬롯비우기]
CBaseRenderer 클래스
 
Microsoft DirectX 9.0

CBaseRenderer 클래스

CBaseRenderer 의 접속 처리

CBaseRenderer 클래스는, 렌더러 필터를 처리 하는 base class이다. CRendererInputPin 클래스에 의해 처리 되는 입력 핀을 1 개 지원 한다. 이 클래스를 사용하려면 ,CBaseRenderer 를 계승하는 상속 클래스를 선언한다. 상속 클래스에서는, 적어도 이하의 메서드를 처리 할 필요가 있다. 이러한 메서드는, base class내에서 순수 가상 함수로서 선언된다.

상태의 변화 및 동기의 문제를 처리하는 base class. 이 base class는, 샘플의 렌더링의 스케줄도 실시한다. 다만, 품질 컨트롤을 위한 수단은 처리 하지 않는다. 이 base class는, 각종의 "핸들러" 메서드도 선언한다. 이것들은, 스트리밍 처리에 있어서의 각각 고유의 단계에서, 필터가 호출하는 메서드이다. base class에서는 아무것도 실행하지 않지만, 상속 클래스로 오버라이드(override) 할 수 있다. 후의 일람에서는, 이러한 메서드가 「Public 메서드: 핸들러」로서 정리하고 있다.

CBaseRenderer::OnReceiveFirstSample 핸들러에는 조금 설명이 필요할 것이다. 필터가 이 메서드를 호출하는 것은, 포즈중에 샘플을 받았을 경우이다. 이 상황은, 그래프가 정지로부터 포즈에 바뀌었을 때인가, 포즈중에 그래프가 시크 되었을 때에 발생할 가능성이 있다. 비디오 렌더러는, 보통, 이 샘플을 사용해 정지 프레임을 표시한다. 포즈로부터 실행중에 바뀌면 필터는,CBaseRenderer::DoRenderSample 메서드에 스트림내의 최초의 샘플과같은샘플을 보낸다.

CBaseRenderer 클래스는,CRendererPosPassThru 개체를 통해 IMediaSeeking 인터페이스와 IMediaPosition 인터페이스를 공개한다. 또, 모든 시크 요구를 업 스트림에 있는 다음의 필터에 건네준다.

스케줄링

업 스트림 필터가 입력 핀의 IMemInputPin::Receive 메서드를 호출해 샘플을 건네주면 핀은 그 호출을 필터의 CBaseRenderer::Receive 메서드에 건네준다. 필터는, 샘플을 드롭 하는지, 즉시 렌더링 하는지, 또는 렌더링을 스케줄 한다.

샘플에 타임 스탬프가 없는 경우, 또는 기준 클럭을 이용할 수 없는 경우, 필터는 샘플을 즉시 렌더링 한다. 그 이외의 경우, 필터는 CBaseRenderer::ShouldDrawSampleNow 메서드를 호출해, 실행해야 할 처리를 판단한다. 디폴트에서는, 타임 스탬프에 근거해 샘플이 스케줄 된다. 상속 클래스에서는,ShouldDrawSampleNow 을 오버라이드(override) 해, 품질 컨트롤을 지원 할 수 있다.

샘플을 스케줄 하기 위해서, 필터는, 아드바이즈 요구를 생성 하는 IReferenceClock::AdviseTime 메서드를 호출한다. 이 결과, 스케줄 된 시간이 되는지, 또는 필터 상태가 변화할 때까지,Receive 메서드가 블록 한다. 이 블록에 의해, 업 스트림 필터는, 현재의 샘플이 렌더링 될 때까지, 다음 샘플을 건네줄 수가 없게 된다.

업 스트림 필터가 IPin::EndOfStream 메서드를 호출해 엔드 오브 스트림을 통지 하면, 필터는, 필터 그래프 매니저에 EC_COMPLETE 이벤트를 송신한다. 필터는, 현재의 샘플의 종료 타임까지 대기하고 나서, 이 이벤트를 송신한다.

요건

헤더 : Renbase.h 로 선언해, Streams.h 를 인클루드 한다.

라이브러리 : Strmbase.lib (리테일 빌드) 또는 Strmbasd.lib (디버그 빌드).

프로텍트 멤버 변수  
m_bAbort 렌더링을 정지해, 이후의 샘플을 거부할지 어떨지를 나타내는 플래그.
m_bEOS 엔드 오브 스트림에 이르고 있는지를 나타내는 플래그.
m_bEOSDelivered 필터가 EC_COMPLETE 이벤트를 발행했는지 어떠했는지를 나타내는 플래그.
m_bInReceive 필터가 Receive 호출의 처리중인지 아닌지를 나타내는 플래그.
m_bRepaintStatus 재드로잉(Drawing) 이벤트를 유효 또는 무효로 하는 플래그.
m_bStreaming 필터가 데이터의 스트리밍중인지 아닌지를 나타내는 플래그.
m_dwAdvise 렌더링을 스케줄 하는 바다거북 겨이삭띠의 식별자.
m_EndOfStreamTimer EC_COMPLETE 통지의 스케줄에 사용되는 바다거북 겨이삭띠의 식별자.
m_evComplete 상태의 처리이 완료했을 때에 통지되는 이벤트.
m_InterfaceLock 필터 상태의 잠금.
m_ObjectCreationLock 필터 내부의 개체의 생성을 보호하기 위한 잠금.
m_pInputPin 필터의 입력 핀의 포인터.
m_pMediaSample 현재의 미디어 샘플의 포인터.
m_pPosition 업 스트림에 시크 커멘드를 건네주는 헬퍼-개체.
m_pQSink 품질 컨트롤 메시지를 받아들이는 개체의 포인터.
m_RendererLock 스트리밍의 잠금.
m_RenderEvent 렌더링의 스케줄에 사용되는 이벤트.
m_SignalTime 현재의 샘플 위에의 종료 타임.
m_ThreadSignal 스트리밍 thread를 릴리즈 하기 위해서 사용되는 이벤트.
퍼블릭 메서드  
CancelNotification 렌더링을 스케줄 하는 바다거북 겨이삭띠를 캔슬한다. 가상.
CBaseRenderer 생성자 메서드.
~CBaseRenderer 소멸자 메서드.
GetMediaPositionInterface 필터의 IMediaPositionIMediaSeeking 인터페이스 포인터를 얻어온다. 가상.
GetPin 핀을 얻어온다. 가상.
GetPinCount 핀의 수를 얻어온다. 가상.
GetSampleTimes 샘플로부터 타임 스탬프를 얻어온다. 가상.
OnDisplayChange 필터 그래프 매니저에 EC_DISPLAY_CHANGED 이벤트를 송신한다.
PrepareReceive 샘플을 렌더링 할 준비를 한다. 가상.
Receive 스트림내의 다음의 미디어 샘플을 얻어온다. 가상.
Render 샘플을 렌더링 한다. 가상.
ScheduleSample 샘플의 렌더링을 스케줄 한다. 가상.
SendNotifyWindow 업 스트림 필터에 비디오 윈도우의 핸들을 통지한다.
SendRepaint 필터 그래프 매니저에 재드로잉(Drawing) 이벤트를 송신한다.
SetMediaType 핀의 미디어 타입을 설정할 경우에 호출된다. 가상.
SignalTimerFired 렌더링의 스케줄에 사용되는 타이머 식별자를 클리어 한다.
SourceThreadCanWait 스트리밍 thread를 보관 유지 또는 릴리즈 한다. 가상.
WaitForReceiveToComplete CBaseRenderer::Receive 메서드가 완료할 때까지 대기한다.
WaitForRenderTime 현재의 샘플의 프레젠테이션 타임을 대기한다. 가상.
Public 메서드 : 악 세사  
ClearPendingSample 현재의 샘플을 릴리즈 한다. 가상.
GetCurrentSample 현재의 샘플을 얻어온다. 가상.
GetRealState 필터 상태를 얻어온다.
GetRenderEvent 렌더링을 스케줄 하는 이벤트를 얻어온다.
HaveCurrentSample 필터에 샘플이 있을지 어떨지를 판단한다. 가상.
IsEndOfStream 엔드 오브 스트림 통지가 수신되었는지 어떠했는지를 문의한다.
IsEndOfStreamDelivered EC_COMPLETE 이벤트가 필터 그래프 매니저에 전달되었는지 어떠했는지를 문의한다.
IsStreaming 필터가 데이터의 스트리밍중인지 아닌지를 문의한다.
SetAbortSignal 렌더링을 정지한 이후의 샘플을 거부할지 어떨지를 나타내는 플래그를 설정한다.
SetRepaintStatus 재드로잉(Drawing) 이벤트를 유효 또는 무효로 한다.
Public 메서드 : 상태 변경 관련  
Active 상태가 포즈 또는 실행에 바뀌었을 때 호출된다. 가상.
BeginFlush 플래시 처리를 시작 한다. 가상.
BreakConnect 접속으로부터 입력 핀을 릴리즈 한다. 가상.
CheckReady 상태의 처리이 완료하고 있을지 어떨지를 문의한다.
CompleteConnect 입력 핀으로부터 다른 핀에의 접속을 완료한다. 가상.
CompleteStateChange 포즈 상태에의 처리이 완료하고 있을지 어떨지를 판단한다. 가상.
EndFlush 플래시 처리를 종료한다. 가상.
Inactive 상태가 정지에 바뀌었을 때 호출된다. 가상.
NotReady 상태의 처리이 아직 완료하고 있지 않는 것을 통지한다.
Ready 상태의 처리이 완료하고 있는 것을 통지한다.
StartStreaming 필터가 실행 상태에 바뀌었을 때에, 스트리밍을 시작 한다. 가상.
StopStreaming 필터가 실행 상태 이외에 바뀌었을 때에, 스트리밍을 정지한다. 가상.
Public 메서드 : 엔드 오브 스트림 관련  
EndOfStream 입력 핀이 엔드 오브 스트림 통지를 수신한 것을 필터에 알린다. 가상.
NotifyEndOfStream 필터 그래프 매니저에 EC_COMPLETE 이벤트를 송신한다.
ResetEndOfStream 엔드 오브 스트림 관련 플래그를 리셋 한다.
ResetEndOfStreamTimer EC_COMPLETE 통지를 스케줄 하는 타이머를 캔슬한다. 가상.
SendEndOfStream 엔드 오브 스트림에 이르고 있는 경우에, 필터 그래프 매니저의 EC_COMPLETE 이벤트를 스케줄 한다. 가상.
TimerCallback 엔드 오브 스트림용의 바다거북 겨이삭띠로 사용하는 콜백 메서드.
Public 메서드 : 핸들러  
OnReceiveFirstSample 포즈중에 필터가 샘플을 수신했을 때 호출된다. 가상.
OnRenderEnd 샘플이 렌더링 된 다음에 호출된다. 가상.
OnRenderStart 렌더링이 시작 되려고 하고 있을 때 호출된다. 가상.
OnStartStreaming 필터가 스트리밍을 시작 할 경우에 호출된다. 가상.
OnStopStreaming 필터가 스트리밍을 정지할 경우에 호출된다. 가상.
OnWaitEnd 필터가 샘플의 프레젠테이션 타임의 대기를 시작 할 경우에 호출된다. 가상.
OnWaitStart 필터가 샘플의 프레젠테이션 타임의 대기를 종료할 경우에 호출된다. 가상.
PrepareRender 필터가 샘플을 렌더링 하기 전에 호출된다. 가상.
ShouldDrawSampleNow 샘플의 렌더링을 스케줄 하는 방법을 판단한다. 가상.
순수 가상 메서드  
CheckMediaType 특정의 미디어 타입을 필터가 받아들일지 어떨지를 확인한다.
DoRenderSample 샘플을 렌더링 한다.
IMediaFilter 메서드  
GetState 필터 상태 (실행, 정지, 포즈)를 얻어온다.
Pause 필터를 포즈 한다.
Run 필터를 실행한다.
Stop 필터를 정지한다.
IBaseFilter 메서드  
FindPin 지정한 식별자로 핀을 얻어온다.

↑TOP