次の方法で共有


CBaseRenderer クラス

CBaseRenderer の接続処理

CBaseRenderer クラスは、レンダラ フィルタを実装する基底クラスである。CRendererInputPin クラスによって実装される入力ピンを 1 つサポートする。このクラスを使うには、CBaseRenderer を継承する派生クラスを宣言する。派生クラスでは、少なくとも以下のメソッドを実装する必要がある。これらのメソッドは、基底クラス内で純粋仮想関数として宣言される。

  • CBaseRenderer::CheckMediaType: 指定されたメディア タイプを受け入れるか拒否する。フィルタは、ピン接続の処理中にこのメソッドを呼び出す。
  • CBaseRenderer::DoRenderSample: サンプルをレンダリングする。フィルタは、実行中に受け取るそれぞれのサンプルについて、このメソッドを呼び出す。

状態の変化および同期の問題を処理する基底クラス。この基底クラスは、サンプルのレンダリングのスケジュールも行う。ただし、品質コントロールのための手段は実装しない。この基底クラスは、各種の "ハンドラ" メソッドも宣言する。これらは、ストリーミング処理におけるそれぞれ固有の段階で、フィルタが呼び出すメソッドである。基底クラスでは何も実行しないが、派生クラスでオーバーライドできる。後の一覧では、これらのメソッドが「Public メソッド: ハンドラ」としてまとめられている。

CBaseRenderer::OnReceiveFirstSample ハンドラには少し説明が必要だろう。フィルタがこのメソッドを呼び出すのは、ポーズ中にサンプルを受け取った場合である。この状況は、グラフが停止からポーズに切り替わったときか、ポーズ中にグラフがシークされたときに発生する可能性がある。ビデオ レンダラは、通常、このサンプルを使って静止フレームを表示する。ポーズから実行中に切り替わると、フィルタは、CBaseRenderer::DoRenderSample メソッドにストリーム内の最初のサンプルと同じサンプルを送る。

CBaseRenderer クラスは、CRendererPosPassThru オブジェクトを通して IMediaSeeking インターフェイスと IMediaPosition インターフェイスを公開する。また、すべてのシーク要求をアップストリームにある次のフィルタに渡す。

スケジューリング

アップストリーム フィルタが入力ピンの IMemInputPin::Receive メソッドを呼び出してサンプルを渡すと、ピンはその呼び出しをフィルタの CBaseRenderer::Receive メソッドに渡す。フィルタは、サンプルをドロップするか、直ちにレンダリングするか、またはレンダリングをスケジュールする。

サンプルにタイム スタンプがない場合、または基準クロックが利用できない場合、フィルタはサンプルを直ちにレンダリングする。それ以外の場合、フィルタは CBaseRenderer::ShouldDrawSampleNow メソッドを呼び出して、実行すべき処理を判断する。デフォルトでは、タイム スタンプに基づいてサンプルがスケジュールされる。派生クラスでは、ShouldDrawSampleNow をオーバーライドして、品質コントロールをサポートできる。

サンプルをスケジュールするために、フィルタは、アドバイズ要求を作成する 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 再描画イベントを有効または無効にするフラグ。
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 ストリーミング スレッドを解放するために使われるイベント。
パブリック メソッド  
CancelNotification レンダリングをスケジュールするタイマ イベントをキャンセルする。仮想。
CBaseRenderer コンストラクタ メソッド。
~CBaseRenderer デストラクタ メソッド。
GetMediaPositionInterface フィルタの IMediaPosition および IMediaSeeking インターフェイス ポインタを取得する。仮想。
GetPin ピンを取得する。仮想。
GetPinCount ピンの数を取得する。仮想。
GetSampleTimes サンプルからタイム スタンプを取得する。仮想。
OnDisplayChange フィルタ グラフ マネージャに EC_DISPLAY_CHANGED イベントを送信する。
PrepareReceive サンプルをレンダリングする準備をする。仮想。
Receive ストリーム内の次のメディア サンプルを取得する。仮想。
Render サンプルをレンダリングする。仮想。
ScheduleSample サンプルのレンダリングをスケジュールする。仮想。
SendNotifyWindow アップストリーム フィルタにビデオ ウィンドウのハンドルを通知する。
SendRepaint フィルタ グラフ マネージャに再描画イベントを送信する。
SetMediaType ピンのメディア タイプを設定するときに呼び出される。仮想。
SignalTimerFired レンダリングのスケジュールに使われるタイマ識別子をクリアする。
SourceThreadCanWait ストリーミング スレッドを保持または解放する。仮想。
WaitForReceiveToComplete CBaseRenderer::Receive メソッドが完了するまで待機する。
WaitForRenderTime 現在のサンプルのプレゼンテーション タイムを待機する。仮想。
Public メソッド : アクセサ  
ClearPendingSample 現在のサンプルを解放する。仮想。
GetCurrentSample 現在のサンプルを取得する。仮想。
GetRealState フィルタの状態を取得する。
GetRenderEvent レンダリングをスケジュールするイベントを取得する。
HaveCurrentSample フィルタにサンプルがあるかどうかを判断する。仮想。
IsEndOfStream エンドオブストリーム通知が受信されたかどうかを問い合わせる。
IsEndOfStreamDelivered EC_COMPLETE イベントがフィルタ グラフ マネージャに配信されたかどうかを問い合わせる。
IsStreaming フィルタがデータのストリーミング中かどうかを問い合わせる。
SetAbortSignal レンダリングを停止して以降のサンプルを拒否するかどうかを示すフラグを設定する。
SetRepaintStatus 再描画イベントを有効または無効にする。
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 指定した識別子でピンを取得する。