CBaseRenderer 類別

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

cbaserenderer 類別階層

類別 CBaseRenderer 是實作轉譯器篩選的基類。 它支援一個輸入針腳,由 CRendererInputPin 類別實作。 若要使用此類別,請宣告繼承 的 CBaseRenderer 衍生類別。 衍生類別至少必須實作下列方法,這些方法會在基類中宣告為純虛擬:

基類會處理狀態變更和同步處理問題。 它也會排程範例進行轉譯,但不會實作任何品質控制措施。 基類也會宣告數個「處理常式」方法。 這些是篩選準則在串流進程中特定點呼叫的方法。 它們不會在基類中執行任何動作,但衍生類別可以覆寫它們。 在下清單格中,它們列在 [公用方法:處理常式] 標題之下。

CBaseRenderer::OnReceiveFirstSample處理常式值得特別提及。 如果篩選在篩選暫停時收到範例,則篩選準則會呼叫此方法。 如果圖形從停止切換為暫停,或是在暫停時搜尋圖表,就會發生這種情況。 視訊轉譯器通常會使用範例來顯示仍然的畫面。 當篩選從暫停切換為執行時,它會將相同的範例傳送至 CBaseRenderer::D oRenderSample 方法,作為資料流程中的第一個範例。

類別 CBaseRenderer 會透過CRendererPosPassThru物件公開IMediaSeekingIMediaPosition介面。 它會將所有搜尋要求傳遞至下一個篩選上游。

排程

當上游篩選呼叫輸入針腳的 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 指出篩選準則是否正在處理 接收 呼叫的旗標。
m_bRepaintStatus 啟用或停用重新繪製事件的旗標。
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 用來釋放串流執行緒的事件。
公用方法 Description
CancelNotification 取消排程轉譯的計時器事件。 虛擬。
CBaseRenderer 建構函式方法。
~CBaseRenderer 解構函式方法。
GetMediaPositionInterface 擷取篩選準則的 IMediaPositionIMediaSeeking 介面指標。 虛擬。
GetPin 擷取針腳。 虛擬。
GetPinCount 擷取針腳數目。 虛擬。
GetSampleTimes 從範例擷取時間戳記。 虛擬。
OnDisplayChange EC_DISPLAY_CHANGED 事件張貼至篩選圖表管理員。
PrepareReceive 準備呈現範例。 虛擬。
接收 接收資料流程中的下一個媒體範例。 虛擬。
轉譯 轉譯範例。 虛擬。
ScheduleSample 排程用於轉譯的範例。 虛擬。
SendNotifyWindow 通知視訊視窗控制碼的上游篩選。
SendRepaint 將重新繪製事件傳送至篩選圖形管理員。
SetMediaType 設定針腳的媒體類型時呼叫。 虛擬。
SignalTimerFired 清除用來排程轉譯的計時器識別碼。
SourceThreadCanWait 保留或釋放串流執行緒。 虛擬。
WaitForReceiveToComplete 等候 CBaseRenderer::Receive 方法完成。
WaitForRenderTime 等候目前範例的簡報時間。 虛擬。
公用方法:存取子方法 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 擷取篩選 (執行、停止或暫停) 的狀態。
暫停 暫停篩選。
執行 執行篩選。
停止 停止篩選。
IBaseFilter 方法 Description
FindPin 擷取具有指定識別碼的針腳。

規格需求

需求
標頭
Renbase.h (包含 Streams.h)
程式庫
Strmbase.lib (零售組建) ;
Strmbasd.lib (偵錯組建)