DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CBaseRenderer [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
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 | 필터의 IMediaPosition 및 IMediaSeeking 인터페이스 포인터를 얻어온다. 가상. |
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 | 지정한 식별자로 핀을 얻어온다. |