次の方法で共有


CBaseRenderer クラス

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

cbaserenderer クラス階層

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

  • CBaseRenderer::CheckMediaType: 提案されたメディアの種類を受け入れるか拒否します。 フィルターは、ピン接続プロセス中にこのメソッドを呼び出します。
  • CBaseRenderer::D oRenderSample: サンプルをレンダリングします。 フィルターは、実行中に受け取るすべてのサンプルに対してこのメソッドを呼び出します。

基底クラスは、状態の変更と同期の問題を処理します。 また、レンダリング用のサンプルもスケジュールしますが、品質管理メジャーは実装されていません。 基底クラスでは、いくつかの "ハンドラー" メソッドも宣言されます。 これらは、ストリーミング プロセス内の特定のポイントでフィルターが呼び出すメソッドです。 基底クラスでは何も行いませんが、派生クラスはオーバーライドできます。 次の表では、Public Methods: Handlers という見出しの下に一覧表示されています。

CBaseRenderer::OnReceiveFirstSample ハンドラーは、特別なメンションに値します。 フィルターは、フィルターが一時停止中にサンプルを受け取った場合にこのメソッドを呼び出します。 これは、グラフが停止から一時停止に切り替わる場合、または一時停止中にグラフがシークされた場合に発生する可能性があります。 ビデオ レンダラーは通常、サンプルを使用して静止フレームを表示します。 フィルターが一時停止から実行中に切り替わると、ストリームの最初のサンプルと同じサンプル が CBaseRenderer::D oRenderSample メソッドに送信されます。

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

スケジュール設定

アップストリーム フィルターが入力ピンの IMemInputPin::Receive メソッドを呼び出してサンプルを配信すると、ピンはこの呼び出しをフィルターの CBaseRenderer::Receive メソッドに渡します。 フィルターは、サンプルを削除するか、すぐにレンダリングするか、レンダリングのスケジュールを設定します。

サンプルにタイム スタンプがない場合、または使用可能な参照クロックがない場合、フィルターはサンプルをすぐにレンダリングします。 それ以外の場合、フィルターは CBaseRenderer::ShouldDrawSampleNow メソッドを呼び出して、何を行うかを決定します。 既定では、サンプルはタイム スタンプに基づいてスケジュールされます。 派生クラスは、品質管理をサポートするために ShouldDrawSampleNow をオーバーライドできます。

サンプルをスケジュールするために、フィルターは IReferenceClock::AdviseTime メソッドを呼び出して、アドバイズ要求を作成します。 Receive メソッドは、スケジュールされた時刻まで、またはフィルターが状態を変更するまでブロックします。 ブロックすると、アップストリーム フィルターは、現在のサンプルがレンダリングされるまで、より多くのサンプルを配信できなくなります。

アップストリーム フィルターが IPin::EndOfStream メソッドを呼び出してストリームの終了を通知すると、フィルターはフィルター グラフ マネージャーに EC_COMPLETE イベントを送信します。 フィルターは、イベントを送信する前に、現在のサンプルの停止時間を待機します。

保護されたメンバー変数 説明
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 ストリーミング スレッドを解放するために使用されるイベント。
パブリック メソッド 説明
CancelNotification レンダリングをスケジュールするタイマー イベントを取り消します。 仮想。
CBaseRenderer コンストラクター メソッド。
~CBaseRenderer デストラクター メソッド。
GetMediaPositionInterface フィルターの IMediaPosition および IMediaSeeking インターフェイス ポインターを取得します。 仮想。
GetPin ピンを取得します。 仮想。
GetPinCount ピンの数を取得します。 仮想。
GetSampleTimes サンプルからタイム スタンプを取得します。 仮想。
OnDisplayChange フィルター グラフ マネージャーに EC_DISPLAY_CHANGED イベントを投稿します。
PrepareReceive サンプルをレンダリングする準備をします。 仮想。
受信 ストリーム内の次のメディア サンプルを受け取ります。 仮想。
レンダー サンプルをレンダリングします。 仮想。
ScheduleSample レンダリング用のサンプルをスケジュールします。 仮想。
SendNotifyWindow ビデオ ウィンドウ ハンドルのアップストリーム フィルターに通知します。
SendRepaint フィルター グラフ マネージャーに再描画イベントを送信します。
SetMediaType ピンのメディアの種類が設定されている場合に呼び出されます。 仮想。
SignalTimerFired レンダリングのスケジュール設定に使用するタイマー識別子をクリアします。
SourceThreadCanWait ストリーミング スレッドを保持または解放します。 仮想。
WaitForReceiveToComplete CBaseRenderer::Receive メソッドが完了するまで待機します。
WaitForRenderTime 現在のサンプルのプレゼンテーション時間を待機します。 仮想。
パブリック メソッド: アクセサー メソッド 説明
ClearPendingSample 現在のサンプルをリリースします。 仮想。
GetCurrentSample 現在のサンプルを取得します。 仮想。
GetRealState フィルターの状態を取得します。
GetRenderEvent レンダリングをスケジュールするイベントを取得します。
HaveCurrentSample フィルターにサンプルがあるかどうかを判断します。 仮想。
IsEndOfStream ストリームの終了通知が受信されたかどうかを照会します。
IsEndOfStreamDelivered EC_COMPLETE イベントがフィルター グラフ マネージャーに配信されたかどうかを照会します。
IsStreaming フィルターがデータをストリーミングしているかどうかをクエリします。
SetAbortSignal レンダリングを停止し、それ以降のサンプルを拒否するかどうかを示すフラグを設定します。
SetRepaintStatus 再描画イベントを有効または無効にします。
パブリック メソッド: State-Change メソッド 説明
アクティブ 状態が一時停止または実行中に切り替えたときに呼び出されます。 仮想。
BeginFlush フラッシュ操作を開始します。 仮想。
BreakConnect 接続から入力ピンを解放します。 仮想。
CheckReady 状態遷移が完了したかどうかを照会します。
CompleteConnect 入力ピンの別のピンへの接続を完了します。 仮想。
CompleteStateChange 一時停止状態への移行が完了したかどうかを判断します。 仮想。
EndFlush フラッシュ操作を終了します。 仮想。
非アクティブ 状態が停止に切り替えたときに呼び出されます。 仮想。
NotReady 状態遷移がまだ完了していないことを通知します。
準備 状態遷移が完了したことを通知します。
StartStreaming フィルターが実行中の状態に切り替わるときにストリーミングを開始します。 仮想。
StopStreaming フィルターが実行中の状態から切り替わると、ストリーミングを停止します。 仮想。
パブリック メソッド: ストリームの終了メソッド 説明
EndOfStream 入力ピンがストリームの終了通知を受信したことをフィルターに通知します。 仮想。
NotifyEndOfStream フィルター グラフ マネージャーに EC_COMPLETE イベントを投稿します。
ResetEndOfStream ストリームの終了フラグをリセットします。
ResetEndOfStreamTimer EC_COMPLETE通知をスケジュールするタイマーを取り消します。 仮想。
SendEndOfStream ストリームの終了に達した場合は、フィルター グラフ マネージャーのEC_COMPLETE イベントをスケジュールします。 仮想。
TimerCallback ストリームの終了タイマー イベントのコールバック メソッド。
パブリック メソッド: ハンドラー 説明
OnReceiveFirstSample フィルターが一時停止中にサンプルを受信したときに呼び出されます。 仮想。
OnRenderEnd サンプルがレンダリングされた後に呼び出されます。 仮想。
OnRenderStart レンダリングが開始されるときに呼び出されます。 仮想。
OnStartStreaming フィルターがストリーミングを開始したときに呼び出されます。 仮想。
OnStopStreaming フィルターがストリーミングを停止したときに呼び出されます。 仮想。
OnWaitEnd サンプルのプレゼンテーション時間を待機してフィルターが完了したときに呼び出されます。 仮想。
OnWaitStart フィルターがサンプルのプレゼンテーション時間の待機を開始したときに呼び出されます。 仮想。
PrepareRender フィルターがサンプルをレンダリングする前に呼び出されます。 仮想。
ShouldDrawSampleNow レンダリング用にサンプルをスケジュールする方法を決定します。 仮想。
純粋仮想メソッド 説明
CheckMediaType フィルターが特定のメディアの種類を受け入れるかどうかを判断します。
DoRenderSample サンプルをレンダリングします。
IMediaFilter メソッド 説明
GetState フィルターの状態 (実行中、停止、または一時停止) を取得します。
一時 停止 フィルターを一時停止します。
[実行] フィルタを実行します。
停止 フィルターを停止します。
IBaseFilter メソッド 説明
FindPin 指定した識別子を持つピンを取得します。

要件

要件
ヘッダー
Renbase.h (Streams.h を含む)
ライブラリ
Strmbase.lib (製品版ビルド);
Strmbasd.lib (デバッグ ビルド)