CBaseRenderer 클래스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
CBaseRenderer
클래스는 렌더러 필터를 구현하기 위한 기본 클래스입니다.
CRendererInputPin 클래스에 의해 구현된 하나의 입력 핀을 지원합니다. 이 클래스를 사용하려면 를 상속하는 파생 클래스를 선언합니다 CBaseRenderer
. 최소한 파생 클래스는 기본 클래스에서 순수 가상으로 선언된 다음 메서드를 구현해야 합니다.
- CBaseRenderer::CheckMediaType: 제안된 미디어 형식을 수락하거나 거부합니다. 필터는 핀 연결 프로세스 중에 이 메서드를 호출합니다.
- CBaseRenderer::D oRenderSample: 샘플을 렌더링합니다. 필터는 실행하는 동안 수신하는 모든 샘플에 대해 이 메서드를 호출합니다.
기본 클래스는 상태 변경 및 동기화 문제를 처리합니다. 또한 품질 제어 측정값을 구현하지는 않지만 렌더링 샘플을 예약합니다. 또한 기본 클래스는 여러 "처리기" 메서드를 선언합니다. 이러한 메서드는 필터가 스트리밍 프로세스의 특정 지점에서 호출하는 메서드입니다. 기본 클래스에서는 아무 작업도 수행하지 않지만 파생 클래스는 재정의할 수 있습니다. 다음 표에서는 공용 메서드: 처리기 제목 아래에 나열됩니다.
CBaseRenderer::OnReceiveFirstSample 처리기는 특별한 멘션 받을 자격이 있습니다. 필터가 일시 중지되는 동안 샘플을 받으면 필터가 이 메서드를 호출합니다. 그래프가 중지됨에서 일시 중지됨으로 전환되거나 일시 중지된 상태에서 그래프를 찾는 경우에 발생할 수 있습니다. 비디오 렌더러에서는 일반적으로 샘플을 사용하여 스틸 프레임을 표시합니다. 필터가 일시 중지에서 실행으로 전환되면 스트림의 첫 번째 샘플인 CBaseRenderer::D oRenderSample 메서드에 동일한 샘플을 보냅니다.
클래스는 CBaseRenderer
CRendererPosPassThru 개체를 통해 IMediaSeeking 및 IMediaPosition 인터페이스를 노출합니다. 모든 검색 요청을 다음 필터 업스트림 전달합니다.
일정 계획
업스트림 필터가 입력 핀의 IMemInputPin::Receive 메서드를 호출하여 샘플을 전달하면 핀은 이 호출을 필터의 CBaseRenderer::Receive 메서드로 전달합니다. 필터는 샘플을 삭제하거나, 즉시 렌더링하거나, 렌더링을 위해 예약합니다.
샘플에 타임스탬프를 사용하지 않거나 참조 클록을 사용할 수 없는 경우 필터는 샘플을 즉시 렌더링합니다. 그렇지 않으면 필터는 CBaseRenderer::ShouldDrawSampleNow 메서드를 호출하여 수행할 작업을 결정합니다. 기본적으로 샘플은 타임스탬프를 기반으로 예약됩니다. 파생 클래스는 품질 관리를 지원하도록 ShouldDrawSampleNow 를 재정의할 수 있습니다.
샘플을 예약하기 위해 필터는 IReferenceClock::AdviseTime 메서드를 호출하여 조언 요청을 만듭니다. 그런 다음 Receive 메서드는 예약된 시간까지 또는 필터 상태가 변경될 때까지 차단합니다. 차단을 사용하면 현재 샘플이 렌더링될 때까지 업스트림 필터가 더 많은 샘플을 제공하지 않습니다.
업스트림 필터가 IPin::EndOfStream 메서드를 호출하여 스트림의 끝을 알리면 필터는 필터 그래프 관리자에 EC_COMPLETE 이벤트를 보냅니다. 필터는 이벤트를 보내기 전에 현재 샘플의 중지 시간을 기다립니다.
보호된 멤버 변수 | Description |
---|---|
m_bAbort | 렌더링을 중지하고 추가 샘플을 거부할지 여부를 나타내는 플래그입니다. |
m_bEOS | 스트림의 끝에 도달했는지 여부를 나타내는 플래그입니다. |
m_bEOSDelivered | 필터가 EC_COMPLETE 이벤트를 게시했는지 여부를 나타내는 플래그입니다. |
m_bInReceive | 필터가 Receive 호출을 처리하는지 여부를 나타내는 플래그입니다. |
m_bRepaintStatus | 다시 그리기 이벤트를 사용하거나 사용하지 않도록 설정하는 플래그입니다. |
m_bStreaming | 필터가 데이터를 스트리밍하는지 여부를 나타내는 플래그입니다. |
m_dwAdvise | 렌더링을 예약하는 타이머 이벤트의 식별자입니다. |
m_EndOfStreamTimer | EC_COMPLETE 알림을 예약하기 위한 타이머 이벤트 식별자입니다. |
m_evComplete | 상태 전환이 완료될 때 신호를 받은 이벤트입니다. |
m_InterfaceLock | 필터 상태 잠금입니다. |
m_ObjectCreationLock | 잠금을 사용하여 필터 내에서 개체 만들기를 보호합니다. |
m_pInputPin | 필터의 입력 핀에 대한 포인터입니다. |
m_pMediaSample | 현재 미디어 샘플에 대한 포인터입니다. |
m_pPosition | seek 명령 업스트림 전달할 도우미 개체입니다. |
m_pQSink | 품질 제어 메시지를 받는 개체에 대한 포인터입니다. |
m_RendererLock | 스트리밍 잠금. |
m_RenderEvent | 렌더링을 예약하는 데 사용되는 이벤트입니다. |
m_SignalTime | 현재 샘플에서 시간을 중지합니다. |
m_ThreadSignal | 스트리밍 스레드를 해제하는 데 사용되는 이벤트입니다. |
Public 메서드 | Description |
CancelNotification | 렌더링을 예약하는 타이머 이벤트를 취소합니다. 가상. |
CBaseRenderer | 생성자 메서드입니다. |
~CBaseRenderer | 소멸자 메서드입니다. |
GetMediaPositionInterface | 필터의 IMediaPosition 및 IMediaSeeking 인터페이스 포인터를 검색합니다. 가상. |
GetPin | 핀을 검색합니다. 가상. |
GetPinCount | 핀 수를 검색합니다. 가상. |
GetSampleTimes | 샘플에서 타임스탬프를 검색합니다. 가상. |
OnDisplayChange | 필터 그래프 관리자에 EC_DISPLAY_CHANGED 이벤트를 게시합니다. |
PrepareReceive | 샘플을 렌더링할 준비를 합니다. 가상. |
수신 | 스트림에서 다음 미디어 샘플을 받습니다. 가상. |
렌더링 | 샘플을 렌더링합니다. 가상. |
ScheduleSample | 렌더링 샘플을 예약합니다. 가상. |
SendNotifyWindow | 비디오 창 핸들의 업스트림 필터에 알립니다. |
SendRepaint | 필터 그래프 관리자에 다시 그리기 이벤트를 보냅니다. |
SetMediaType | 핀의 미디어 유형이 설정되면 호출됩니다. 가상. |
SignalTimerFired | 렌더링을 예약하는 데 사용되는 타이머 식별자를 지웁니다. |
SourceThreadCanWait | 스트리밍 스레드를 보유하거나 해제합니다. 가상. |
WaitForReceiveToComplete | CBaseRenderer::Receive 메서드가 완료될 때까지 기다립니다. |
WaitForRenderTime | 현재 샘플의 프레젠테이션 시간을 기다립니다. 가상. |
Public 메서드: 접근자 메서드 | Description |
ClearPendingSample | 현재 샘플을 릴리스합니다. 가상. |
GetCurrentSample | 현재 샘플을 검색합니다. 가상. |
GetRealState | 필터 상태를 검색합니다. |
GetRenderEvent | 렌더링을 예약하는 이벤트를 검색합니다. |
HaveCurrentSample | 필터에 샘플이 있는지 여부를 확인합니다. 가상. |
IsEndOfStream | 스트림 종료 알림이 수신되었는지 여부를 쿼리합니다. |
IsEndOfStreamDelivered | EC_COMPLETE 이벤트가 필터 그래프 관리자에 전달되었는지 여부를 쿼리합니다. |
IsStreaming | 필터가 데이터를 스트리밍하는지 여부를 쿼리합니다. |
SetAbortSignal | 렌더링을 중지하고 추가 샘플을 거부할지 여부를 나타내는 플래그를 설정합니다. |
SetRepaintStatus | 다시 그리기 이벤트를 사용하거나 사용하지 않도록 설정합니다. |
공용 메서드: State-Change 메서드 | Description |
활성 | 상태가 일시 중지되거나 실행 중으로 전환될 때 호출됩니다. 가상. |
BeginFlush | 플러시 작업을 시작합니다. 가상. |
BreakConnect | 연결에서 입력 핀을 해제합니다. 가상. |
CheckReady | 상태 전환이 완료되었는지 여부를 쿼리합니다. |
CompleteConnect | 다른 핀에 대한 입력 핀의 연결을 완료합니다. 가상. |
CompleteStateChange | 일시 중지된 상태로의 전환이 완료되었는지 여부를 확인합니다. 가상. |
EndFlush | 플러시 작업을 종료합니다. 가상. |
비활성 | 상태가 중지됨으로 전환될 때 호출됩니다. 가상. |
NotReady | 상태 전환이 아직 완료되지 않았다는 신호입니다. |
준비 | 상태 전환이 완료되었음을 알 수 있습니다. |
StartStreaming | 필터가 실행 중 상태로 전환되면 스트리밍을 시작합니다. 가상. |
StopStreaming | 필터가 실행 중 상태에서 전환되면 스트리밍을 중지합니다. 가상. |
공용 메서드: 스트림 끝 메서드 | Description |
EndOfStream | 입력 핀이 스트림 종료 알림을 수신했음을 필터에 알림 가상. |
NotifyEndOfStream | 필터 그래프 관리자에 EC_COMPLETE 이벤트를 게시합니다. |
ResetEndOfStream | 스트림 끝 플래그를 다시 설정합니다. |
ResetEndOfStreamTimer | EC_COMPLETE 알림을 예약하는 타이머를 취소합니다. 가상. |
SendEndOfStream | 스트림의 끝에 도달한 경우 필터 그래프 관리자에 대한 EC_COMPLETE 이벤트를 예약합니다. 가상. |
TimerCallback | 스트림 종료 타이머 이벤트에 대한 콜백 메서드입니다. |
공용 메서드: 처리기 | Description |
OnReceiveFirstSample | 일시 중지된 동안 필터가 샘플을 수신할 때 호출됩니다. 가상. |
OnRenderEnd | 샘플이 렌더링된 후 호출됩니다. 가상. |
OnRenderStart | 렌더링을 시작하려고 할 때 호출됩니다. 가상. |
OnStartStreaming | 필터가 스트리밍을 시작할 때 호출됩니다. 가상. |
OnStopStreaming | 필터가 스트리밍을 중지할 때 호출됩니다. 가상. |
OnWaitEnd | 필터가 완료되면 샘플의 프레젠테이션 시간을 기다리는 동안 호출됩니다. 가상. |
OnWaitStart | 필터가 샘플의 프레젠테이션 시간을 대기하기 시작할 때 호출됩니다. 가상. |
PrepareRender | 필터가 샘플을 렌더링하기 전에 호출됩니다. 가상. |
ShouldDrawSampleNow | 샘플이 렌더링을 예약하는 방법을 결정합니다. 가상. |
순수 가상 메서드 | Description |
CheckMediaType | 필터가 특정 미디어 형식을 허용하는지 여부를 확인합니다. |
DoRenderSample | 샘플을 렌더링합니다. |
IMediaFilter 메서드 | Description |
GetState | 필터의 상태(실행 중, 중지됨 또는 일시 중지됨)를 검색합니다. |
일시 중지 | 필터를 일시 중지합니다. |
실행 | 필터를 실행합니다. |
Stop | 필터를 중지합니다. |
IBaseFilter 메서드 | Description |
FindPin | 지정된 식별자를 사용하여 핀을 검색합니다. |
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|