Microsoft DirectX 8.0

CBaseRenderer クラス

CBaseRenderer クラスの階層

レンダリング フィルタを実装するための基底クラス。CRendererInputPin クラスによって実装される入力ピンを 1 つサポートする。

宣言 : Renbase.h

このクラスを使用するには、CBaseRenderer を継承する派生クラスを宣言する。派生クラスでは、少なくとも以下のメソッドを実装する必要がある。これらのメソッドは、基底クラス内で純粋仮想関数として宣言される。

状態の変化および同期の問題を処理する基底クラス。この基底クラスは、サンプルのレンダリングのスケジュールも行う。ただし、品質コントロールのための手段は実装しない。

この基底クラスは、各種の "ハンドラ" メソッドも宣言する。これらは、ストリーミング処理におけるそれぞれ固有の段階で、フィルタが呼び出すメソッドである。基底クラスでは何もしないが、派生クラスでオーバーライドできる。後の一覧では、これらのメソッドが「Public メソッド : ハンドラ」としてまとめられている。

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

スケジューリング

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

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

サンプルをスケジュールするため、フィルタは、アドバイズ要求を作成する IReferenceClock::AdviseTime メソッドを呼び出す。この結果、スケジュールされた時間になるか、またはフィルタの状態が変化するまで、Receive メソッドがブロックする。ブロックすると、アップストリーム フィルタは、現在のサンプルがレンダリングされるまで、次のサンプルを渡すことができなくなる。

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

プロテクト メンバ変数
m_bAbortレンダリングを停止して、以降のサンプルを拒否するかどうかを示すフラグ。
m_bEOSエンドオブストリームに達しているかどうかを示すフラグ。
m_bEOSDeliveredフィルタが EC_COMPLETE イベントを発行したかどうかを示すフラグ。
m_bInReceiveフィルタが Receive 呼び出しの処理中かどうかを示すフラグ。
m_bRepaintStatus再描画イベントを有効または無効にするフラグ。
m_bStreamingフィルタがデータのストリーミング中かどうかを示すフラグ。
m_dwAdviseレンダリングをスケジュールするタイマ イベントの識別子。
m_EndOfStreamTimerEC_COMPLETE 通知のスケジュールに使用されるタイマ イベントの識別子。
m_evComplete状態の移行が完了したときに通知済になるイベント。
m_InterfaceLockフィルタ状態のロック。
m_pInputPinフィルタの入力ピンへのポインタ。
m_pMediaSample現在のメディア サンプルへのポインタ。
m_pPositionアップストリームにシーク コマンドを渡すためのヘルパー オブジェクト。
m_pQSink品質コントロール メッセージを受け取るオブジェクトへのポインタ。
m_RendererLockストリーミングのロック。
m_RenderEventレンダリングのスケジュールに使用されるイベント。
m_SignalTime現在のサンプル上の終了タイム。
m_ThreadSignalストリーミング スレッドを解放するために使用されるイベント。
Public メソッド
CancelNotificationレンダリングをスケジュールするタイマ イベントをキャンセルする。仮想。
CBaseRendererコンストラクタ メソッド。
~CBaseRendererデストラクタ メソッド。
GetMediaPositionInterfaceフィルタの IMediaPosition および IMediaSeeking インターフェイス ポインタを取得する。仮想。
GetPinピンを取得する。仮想。
GetPinCountピンの数を取得する。仮想。
GetSampleTimesサンプルからタイム スタンプを取得する。仮想。
OnDisplayChangeフィルタ グラフ マネージャに EC_DISPLAY_CHANGED イベントを発行する。
PrepareReceiveサンプルをレンダリングする準備をする。仮想。
Receiveストリームの次のメディア サンプルを取得する。仮想。
Renderサンプルをレンダリングする。仮想。
ScheduleSampleサンプルのレンダリングをスケジュールする。仮想。
SendNotifyWindowアップストリーム フィルタにビデオ ウィンドウのハンドルを通知する。
SendRepaintフィルタ グラフ マネージャに再描画イベントを送信する。
SetMediaTypeピンのメディア タイプを設定するときに呼び出される。仮想。
SignalTimerFiredレンダリングのスケジュールに使用されるタイマ識別子をクリアする。
SourceThreadCanWaitストリーミング スレッドを保持または解放する。仮想。
WaitForReceiveToCompleteReceive メソッドが完了するまで待機する。
WaitForRenderTime現在のサンプルのプレゼンテーション時間を待機する。仮想。
Public メソッド : アクセサ
ClearPendingSample現在のサンプルを解放する。仮想。
GetCurrentSample現在のサンプルを取得する。仮想。
GetRealStateフィルタの状態を取得する。
GetRenderEventレンダリングをスケジュールするイベントを取得する。
HaveCurrentSampleフィルタにサンプルがあるかどうかを判断する。仮想。
IsEndOfStreamエンドオブストリーム通知が受信されたかどうかを照会する。
IsEndOfStreamDeliveredEC_COMPLETE イベントがフィルタ グラフ マネージャに配信されたかどうかを照会する。
IsStreamingフィルタがデータのストリーミング中かどうかを照会する。
SetAbortSignalレンダリングを停止して以降のサンプルを拒否するかどうかを示す、中止フラグを設定する。
SetRepaintStatus再描画イベントを有効または無効にする。
Public メソッド : 状態変更関連
Active状態がポーズまたは実行に切り替わるときに呼び出される。仮想。
BeginFlushフラッシュ処理を開始する。仮想。
BreakConnect接続から入力ピンを解放する。仮想。
CheckReady状態の移行が完了しているかどうかを照会する。
CompleteConnect入力ピンからほかのピンへの接続を完了する。仮想。
CompleteStateChangeポーズ状態への移行が完了しているかどうかを判断する。仮想。
EndFlushフラッシュ処理を終了する。仮想。
Inactive状態が停止に切り替わるときに呼び出される。仮想。
NotReady状態の移行がまだ完了していないことを通知する。
Ready状態の移行が完了していることを通知する。
StartStreamingフィルタが実行状態に切り替わるときに、ストリーミングを開始する。仮想。
StopStreamingフィルタが実行状態以外に切り替わるときに、ストリーミングを停止する。仮想。
Public メソッド : エンドオブストリーム関連
EndOfStream入力ピンがエンドオブストリーム通知を受信したことをフィルタに知らせる。仮想。
NotifyEndOfStreamフィルタ グラフ マネージャに EC_COMPLETE イベントを送信する。
ResetEndOfStreamエンドオブストリーム関連フラグをリセットする。
ResetEndOfStreamTimerEC_COMPLETE 通知をスケジュールするタイマをキャンセルする。仮想。
SendEndOfStreamエンドオブストリームに達している場合に、フィルタ グラフ マネージャへの EC_COMPLETE イベントをスケジュールする。仮想。
TimerCallbackエンドオブストリーム用のタイマ イベントで使用するコールバック メソッド。
Public メソッド : ハンドラ
OnReceiveFirstSampleポーズ中にフィルタがサンプルを受信するときに呼び出される。仮想。
OnRenderEndサンプルがレンダリングされた後で呼び出される。仮想。
OnRenderStartレンダリングが開始されようとしているときに呼び出される。仮想。
OnStartStreamingフィルタがストリーミングを開始するときに呼び出される。仮想。
OnStopStreamingフィルタがストリーミングを停止するときに呼び出される。仮想。
OnWaitEndフィルタがサンプルのプレゼンテーション時間の待機を終了するときに呼び出される。仮想。
OnWaitStartフィルタがサンプルのプレゼンテーション時間の待機を開始するときに呼び出される。仮想。
PrepareRenderフィルタがサンプルをレンダリングする前に呼び出される。仮想。
ShouldDrawSampleNowサンプルのレンダリングをスケジュールする方法を判断する。仮想。
Pure Virtual メソッド
CheckMediaType特定のメディア タイプをフィルタが受け入れるかどうかを確認する。
DoRenderSampleサンプルをレンダリングする。
IMediaFilter メソッド
GetStateフィルタの状態 (実行、停止、ポーズ) を取得する。
Pauseフィルタをポーズする。
Runフィルタを実行する。
Stopフィルタを停止する。
IBaseFilter メソッド
FindPin指定された識別子を持つピンを取得する。

CBaseRenderer.m_bAbort

CBaseRenderer クラス

レンダリングを停止して、以降のサンプルを拒否するかどうかを示すフラグ。

構文

BOOL m_bAbort;

CBaseRenderer.m_bEOS

CBaseRenderer クラス

エンドオブストリームに達しているかどうかを示すフラグ。

構文

BOOL m_bEOS;

CBaseRenderer.m_bEOSDelivered

CBaseRenderer クラス

フィルタが EC_COMPLETE イベントを発行したかどうかを示すフラグ。

構文

BOOL m_bEOSDelivered;

CBaseRenderer.m_bInReceive

CBaseRenderer クラス

フィルタが Receive 呼び出しの処理中かどうかを示すフラグ。

構文

BOOL m_bInReceive;

CBaseRenderer.m_bRepaintStatus

CBaseRenderer クラス

再描画イベントを有効または無効にするフラグ。

構文

BOOL m_bRepaintStatus;

CBaseRenderer.m_bStreaming

CBaseRenderer クラス

フィルタがデータのストリーミング中かどうかを示すフラグ。

構文

BOOL m_bStreaming;

CBaseRenderer.m_dwAdvise

CBaseRenderer クラス

レンダリングをスケジュールするタイマ イベントの識別子。

構文

DWORD_PTR m_dwAdvise;

CBaseRenderer.m_EndOfStreamTimer

CBaseRenderer クラス

EC_COMPLETE 通知のスケジュールに使用されるタイマ イベントの識別子。

構文

UINT m_EndOfStreamTimer;

CBaseRenderer.m_evComplete

CBaseRenderer クラス

状態の移行が完了したときに通知済になるイベント。

構文

CAMEvent m_evComplete;

CBaseRenderer.m_InterfaceLock

CBaseRenderer クラス

フィルタ状態のロック。

構文

CCritSec m_InterfaceLock;

CBaseRenderer.m_pInputPin

CBaseRenderer クラス

フィルタの入力ピンへのポインタ。

構文

CRendererInputPin *m_pInputPin;

CBaseRenderer.m_pMediaSample

CBaseRenderer クラス

現在のメディア サンプルへのポインタ。

構文

IMediaSample *m_pMediaSample;

CBaseRenderer.m_pPosition

CBaseRenderer クラス

アップストリームにシーク コマンドを渡すためのヘルパー オブジェクト。

構文

CRendererPosPassThru *m_pPosition;

CBaseRenderer.m_pQSink

CBaseRenderer クラス

品質コントロール メッセージを受け取るオブジェクトへのポインタ。

構文

IQualityControl *m_pQSink;

注意

基底クラスでは品質コントロールを実装しない。このメンバ変数のデフォルト値は NULL である。

CBaseRenderer.m_RendererLock

CBaseRenderer クラス

ストリーミングのロック。

構文

CCritSec m_RendererLock;

CBaseRenderer.m_RenderEvent

CBaseRenderer クラス

レンダリングのスケジュールに使用されるイベント。

構文

CAMEvent m_RenderEvent;

CBaseRenderer.m_SignalTime

CBaseRenderer クラス

現在のサンプル上の終了タイム。

構文

REFERENCE_TIME m_SignalTime;

CBaseRenderer.m_ThreadSignal

CBaseRenderer クラス

ストリーミング スレッドを解放するために使用されるイベント。

構文

CAMEvent m_ThreadSignal;

CBaseRenderer::Active

CBaseRenderer クラス

状態がポーズまたは実行に切り替わるときに呼び出される。

構文

virtual HRESULT Active(void);

戻り値

S_OK を返す。

注意

入力ピンは、ピン自体の CRendererInputPin::Active メソッドからこのメソッドを呼び出す。このメソッドは基底クラスでは何もしない。

CBaseRenderer::BeginFlush

CBaseRenderer クラス

フラッシュ処理を開始する。

構文

virtual HRESULT BeginFlush(void);

戻り値

S_OK を返す。

注意

フィルタの入力ピンは、IPin::BeginFlush メソッドの呼び出しを受け取ると、このメソッドを呼び出す。フィルタは、ストリーミング スレッドを解放し、レンダリングのために保持しているサンプルをすべて解放する。

CBaseRenderer::BreakConnect

CBaseRenderer クラス

接続から入力ピンを解放する

構文

virtual HRESULT BreakConnect(void);

戻り値

次の一覧に含まれるいずれかの HRESULT 値を返す。

S_FALSEピンが接続されていない。
S_OK成功。
VFW_E_NOT_STOPPEDフィルタがまだアクティブである。

注意

フィルタの入力ピンは、ピン自体の BreakConnect メソッド内部からこのメソッドを呼び出す (詳細については「CBasePin::BreakConnect」を参照)。フィルタは、エンドオブストリーム関連フラグのリセットなどの内部的な定番処理をいくつか実行する。

CBaseRenderer::CancelNotification

CBaseRenderer クラス

レンダリングをスケジュールするタイマ イベントをキャンセルする。

構文

virtual HRESULT CancelNotification(void);

戻り値

次の一覧に含まれるいずれかの HRESULT 値を返す。

S_FALSE保留されているタイマ イベントがない。
S_OK成功。

注意

フィルタはストリーミングを停止するときにこのメソッドを呼び出す。メソッドは、スケジュールされているレンダリングをすべてキャンセルする。

CBaseRenderer::CBaseRenderer

CBaseRenderer クラス

コンストラクタ メソッド。

構文

CBaseRenderer(
    REFCLSID RenderClass,
    TCHAR *pName,
    LPUNKNOWN pUnk,
    HRESULT *phr
);

パラメータ

RenderClass
レンダラのクラス識別子。
pName
デバッグ目的で使用する、フィルタの名前を含む文字列へのポインタ。
pUnk
このオブジェクトの所有者へのポインタ。オブジェクトが集成されている場合は、集成オブジェクトの IUnknown インターフェイスにポインタを渡す。それ以外の場合は、このパラメータを NULL に設定する。
phr
HRESULT 変数へのポインタ。(無視される)

CBaseRenderer::~CBaseRenderer

CBaseRenderer クラス

デストラクタ メソッド。

構文

~CBaseRenderer(void);

CBaseRenderer::CheckMediaType

CBaseRenderer クラス

特定のメディア タイプをフィルタが受け入れるかどうかを確認する。

構文

virtual HRESULT CheckMediaType(
    const CMediaType *pmt
) PURE;

パラメータ

pmt
提案されたメディア タイプを含む CMediaType オブジェクトへのポインタ。

戻り値

提案されたメディア タイプが受け入れられるなら S_OK を返す。そうでなければ S_FALSE かエラー コードを返す。

注意

入力ピンは、ピン自体の CBasePin::CheckMediaType メソッドからこのメソッドを呼び出す。派生クラスではこのメソッドを実装する必要がある。

CBaseRenderer::CheckReady

CBaseRenderer クラス

状態の移行が完了しているかどうかを照会する。

構文

BOOL CheckReady(void);

戻り値

状態の移行が完了している場合は TRUE を返し、フィルタがまだ新しい状態に移行中の場合は FALSE を返す。

参照

NotReadyReady

CBaseRenderer::ClearPendingSample

CBaseRenderer クラス

現在のサンプルを解放する。

構文

virtual HRESULT ClearPendingSample(void);

戻り値

S_OK を返す。

CBaseRenderer::CompleteConnect

CBaseRenderer クラス

入力ピンからほかのピンへの接続を完了する。

構文

virtual HRESULT CompleteConnect(
    IPin *pReceivePin
);

パラメータ

pReceivePin
出力ピンの IPin インターフェイスへのポインタ。

戻り値

S_OK を返す。

注意

フィルタの入力ピンは、ピン接続を完了するために呼び出される、ピン自体の CompleteConnect メソッド内部からこのメソッドを呼び出す (詳細については「CBasePin::CompleteConnect」を参照)。フィルタは、SetRepaintStatus メソッドを呼び出して EC_REPAINT イベントを有効にする。

CBaseRenderer::CompleteStateChange

CBaseRenderer クラス

ポーズ状態への移行が完了しているかどうかを判断する。

構文

virtual HRESULT CompleteStateChange(
    FILTER_STATE OldState
);

パラメータ

OldState
移行の前の状態。

戻り値

移行が完了している場合は、S_OK を返す。それ以外の場合は、S_FALSE を返す。

注意

Pause メソッドは、このメソッドを呼び出して、移行状態を更新する。通常、ポーズ状態への移行は、フィルタがサンプルを受け取るまで完了しない。ただし、たとえばフィルタが接続されていない場合や、エンドオブストリームに達している場合などには、移行が直ちに完了する。このメソッドは、各種の条件を確認したうえで、Ready メソッドまたは NotReady メソッドを呼び出して、移行状態を更新する。

CBaseRenderer::DoRenderSample

CBaseRenderer クラス

サンプルをレンダリングする。

構文

virtual HRESULT DoRenderSample(
    IMediaSample *pMediaSample
) PURE;

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。

注意

派生クラスではこのメソッドを実装する必要がある。メソッドの動作は、実装されるフィルタの種類によってまったく異なる。たとえばビデオ レンダラであれば、サンプルに含まれるビデオ イメージを描画する。

CBaseRenderer::EndFlush

CBaseRenderer クラス

フラッシュ処理を終了する。

構文

virtual HRESULT EndFlush(void);

戻り値

S_OK を返す。

注意

フィルタの入力ピンは、IPin::EndFlush メソッドの呼び出しを受け取ると、このメソッドを呼び出す。

CBaseRenderer::EndOfStream

CBaseRenderer クラス

入力ピンがエンドオブストリーム通知を受信したことをフィルタに知らせる。

構文

HRESULT EndOfStream(void);

戻り値

S_OK を返す。

注意

フィルタの入力ピンは、エンドオブストリーム通知を受信すると、このメソッドを呼び出す。

このメソッドは、m_bEOS フラグを TRUE に設定し、SendEndOfStream メソッドを呼び出して EC_COMPLETE イベントをスケジュールする。フィルタがポーズ中にサンプルを待機している場合、このメソッドは状態の移行を完了する。

CBaseRenderer::FindPin

CBaseRenderer クラス

指定された識別子を持つピンを取得する。

構文

HRESULT FindPin(
    LPCWSTR Id,
    IPin **ppPin
);

パラメータ

Id
ピンを識別する定数、NULL で終わる Unicode 文字列のポインタ。L"In" でなければならない。
ppPin
ピンの IPin インターフェイスへのポインタを受け取る変数のアドレス。メソッドが失敗すると、*ppPin は NULL にセットされる。

戻り値

次の一覧に含まれるいずれかの HRESULT 値を返す。

S_OK成功。
E_POINTERNULL ポインタ引数。
VFW_E_NOT_FOUND見つからなかった。

注意

このメソッドは、CBaseFilter::FindPin メソッドをオーバーライドする。フィルタの唯一のピン (入力ピン) には、In という名前が付いている。

CBaseRenderer::GetCurrentSample

CBaseRenderer クラス

現在のサンプルを取得する。

構文

virtual IMediaSample *GetCurrentSample(void);

戻り値

サンプルの IMediaSample インターフェイスへのポインタを返し、サンプルがない場合は NULL を返す。

注意

戻り値が NULL 以外の場合、IMediaSample ポインタは未処理の参照カウントを持つ。この参照カウントは必ず解放すること。

CBaseRenderer::GetMediaPositionInterface

CBaseRenderer クラス

フィルタの IMediaPosition および IMediaSeeking インターフェイス ポインタを取得する。

構文

virtual HRESULT GetMediaPositionInterface(
    REFIID riid,
    void **ppv
);

パラメータ

riid
インターフェイスの参照識別子。
ppv
インターフェイス ポインタを受け取る変数のアドレス。

戻り値

HRESULT 値を返す。可能な値は次の一覧のとおり。

S_OK成功。
E_OUTOFMEMORYメモリ不足。
E_NOINTERFACEインターフェイスがサポートされていない。

注意

フィルタは、アップストリームへの受け渡しをする CRendererPosPassThru オブジェクトに、すべてのシーク コマンドを委任する。このメソッドは、CRendererPosPassThru オブジェクトがまだ存在しなければ作成し、要求されたインターフェイスをそのオブジェクトに照会する。

m_pPosition メンバ変数には、CRendererPosPassThru オブジェクトへのポインタが格納される。

CBaseRenderer::GetPin

CBaseRenderer クラス

ピンを取得する。

構文

virtual CBasePin *GetPin(
    int n
);

パラメータ

n
指定されたピンの数。0 でなければならない。

戻り値

m_pInputPin ポインタを返す。

注意

このメソッドは、CBaseFilter クラス内の純粋仮想メソッド CBaseFilter::GetPin を実装する。このフィルタは、ピンを 1 つだけ (入力ピン) サポートする。このメソッドは、初めて呼び出されたときに、新しい CRendererInputPin オブジェクトとしてこのピンを作成する。

CBaseRenderer::GetPinCount

CBaseRenderer クラス

ピンの数を取得する。

構文

virtual int GetPinCount(void);

戻り値

1 を返す。

注意

このメソッドは、CBaseFilter クラスの純粋仮想メソッド CBaseFilter::GetPinCount を実装する。

CBaseRenderer::GetRealState

CBaseRenderer クラス

フィルタの状態を取得する。

構文

FILTER_STATE GetRealState(void);

戻り値

CBaseFilter.m_State の値を返す。この値は FILTER_STATE 列挙型のメンバである。

注意

このメソッドは、GetState メソッドの代わりに内部的に使用できる、より簡単な手段である。

CBaseRenderer::GetRenderEvent

CBaseRenderer クラス

レンダリングをスケジュールするイベントを取得する。

構文

CAMEvent *GetRenderEvent(void);

戻り値

m_RenderEvent イベントへのポインタを返す。

CBaseRenderer::GetSampleTimes

CBaseRenderer クラス

サンプルからタイム スタンプを取得する。

構文

virtual HRESULT GetSampleTimes(
    IMediaSample *pMediaSample,
    REFERENCE_TIME *pStartTime,
    REFERENCE_TIME *pEndTime
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。
pStartTime
開始タイムを受け取る変数へのポインタ。
pEndTime
終了タイムを受け取る変数へのポインタ。

戻り値

HRESULT 値を返す。可能な値は次の一覧のとおり。

S_OKサンプルを直ちにレンダリングしなければならない。
S_FALSEタイム スタンプに基づいて、サンプルのレンダリングをスケジュールしなければならない。
E_FAILこのサンプルをレンダリングしてはならない。
VFW_E_START_TIME_AFTER_END不正なタイム スタンプ : 終了タイムが開始タイムより早い。

注意

フィルタは、このメソッドを呼び出すことにより、サンプルをどのように処理すべきかどうかを判断する。戻り値が S_OK の場合、フィルタは直ちにサンプルをレンダリングする。S_FALSE の場合は、タイム スタンプに基づいてサンプルのレンダリングをスケジュールする。エラー コードの場合は、サンプルを拒否する。

サンプルにタイム スタンプがない場合、またはフィルタに基準クロックがない場合、このメソッドは S_OK を返す。それ以外の場合、このメソッドは ShouldDrawSampleNow メソッドの値を返す。この場合、ShouldDrawSampleNow は必ず S_FALSE を返す。この動作は派生クラスでオーバーライドできる。たとえば、派生クラスが品質コントロールの管理を実装する場合は、サンプルをドロップするために E_FAIL を返すことができる。

CBaseRenderer::GetState

CBaseRenderer クラス

フィルタの状態 (実行、停止、ポーズ) を取得する。

構文

HRESULT GetState(
    DWORD dwMilliSecsTimeout,
    FILTER_STATE *State
);

パラメータ

dwMilliSecsTimeout
タイムアウト間隔 (ミリ秒単位)。
State
フィルタの状態を示す FILTER_STATE 列挙型のメンバを取得する変数のポインタ。

戻り値

次の一覧に含まれるいずれかの HRESULT 値を返す。

S_OK成功。
VFW_S_STATE_INTERMEDIATEフィルタ グラフは指定された状態に移行中。
E_POINTERNULL ポインタ引数。

注意

このメソッドは、CBaseFilter::GetState メソッドをオーバーライドする。レンダラがポーズしていると、状態の移行は、レンダリングするサンプルを受け取るまで完了しない。状態の移行が完了する前にタイムアウトすると、メソッドは VFW_S_STATE_INTERMEDIATE を返す。

CBaseRenderer::HaveCurrentSample

CBaseRenderer クラス

フィルタにサンプルがあるかどうかを判断する。

構文

virtual BOOL HaveCurrentSample(void);

戻り値

フィルタにサンプルがある場合は TRUE を返し、それ以外の場合は FALSE を返す。

CBaseRenderer::Inactive

CBaseRenderer クラス

状態が停止に切り替わるときに呼び出される。

構文

virtual HRESULT Inactive(void);

戻り値

S_OK を返す。

注意

入力ピンは、ピン自体の CRendererInputPin::Inactive メソッドからこのメソッドを呼び出す。フィルタは、ClearPendingSample メソッドを呼び出して最新のサンプルを解放する。

CBaseRenderer::IsEndOfStream

CBaseRenderer クラス

エンドオブストリーム通知が受信されたかどうかを照会する。

構文

BOOL IsEndOfStream(void);

戻り値

m_bEOS フラグを返す。

CBaseRenderer::IsEndOfStreamDelivered

CBaseRenderer クラス

EC_COMPLETE イベントがフィルタ グラフ マネージャに配信されたかどうかを照会する。

構文

BOOL IsEndOfStreamDelivered(void);

戻り値

m_bEOSDelivered フラグを返す。

CBaseRenderer::IsStreaming

CBaseRenderer クラス

フィルタがデータのストリーミング中かどうかを照会する。

構文

BOOL IsStreaming(void);

戻り値

m_bStreaming フラグを返す。

CBaseRenderer::NotReady

CBaseRenderer クラス

状態の移行がまだ完了していないことを通知する。

構文

void NotReady(void);

注意

このメソッドにより、GetState メソッドは VFW_S_STATE_INTERMEDIATE を返すようになる。この値は、フィルタが現在の状態へまだ移行中であることを示す。フィルタは、状態の移行が保留されるたびに、このメソッドを呼び出す。この状況は、フィルタがポーズしてから、サンプルを受け取るまでに発生する。

参照

CheckReadyReady

CBaseRenderer::NotifyEndOfStream

CBaseRenderer クラス

フィルタ グラフ マネージャに EC_COMPLETE イベントを送信する。

構文

void NotifyEndOfStream(void);

参照

EndOfStreamSendEndOfStream

CBaseRenderer::OnDisplayChange

CBaseRenderer クラス

フィルタ グラフ マネージャに EC_DISPLAY_CHANGED イベントを送信する。

構文

BOOL CBaseRenderer::OnDisplayChange(void);

戻り値

イベントが発行された場合は TRUE を返し、それ以外の場合は FALSE を返す。

注意

ビデオ レンダラは、WM_DISPLAYCHANGE メッセージへの応答として、このメソッドを呼び出さなければならない。入力ピンが接続されている場合、メソッドはフィルタ グラフ マネージャに EC_DISPLAY_CHANGED イベントを送信する。

CBaseRenderer::OnReceiveFirstSample

CBaseRenderer クラス

ポーズ中にフィルタがサンプルを受信するときに呼び出される。

構文

virtual void OnReceiveFirstSample(
    IMediaSample *pMediaSample
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

注意

Receive メソッドはこのメソッドを呼び出す。このメソッドは基底クラスでは何もしないが、派生クラスでオーバーライドできる。このメソッドは、主にビデオ レンダラでの使用を目的としている。ビデオ レンダラがポーズ中なら、通常は、最初のサンプルを静止画として表示する。

ポーズ中にグラフをシークした場合にも、このメソッドが呼び出される。

CBaseRenderer::OnRenderEnd

CBaseRenderer クラス

サンプルがレンダリングされた後で呼び出される。

構文

virtual void OnRenderEnd(
    IMediaSample *pMediaSample
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

注意

Render メソッドはこのメソッドを呼び出す。このメソッドは基底クラスでは何もしないが、たとえば品質コントロール データを収集するように、派生クラスでオーバーライドできる。

CBaseRenderer::OnRenderStart

CBaseRenderer クラス

レンダリングが開始されようとしているときに呼び出される。

構文

virtual void OnRenderStart(
    IMediaSample *pMediaSample
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

注意

Render メソッドはこのメソッドを呼び出す。このメソッドは基底クラスでは何もしないが、たとえば品質コントロール データを収集するように、派生クラスでオーバーライドできる。

CBaseRenderer::OnStartStreaming

CBaseRenderer クラス

フィルタがストリーミングを開始するときに呼び出される。

構文

virtual HRESULT OnStartStreaming(void);

戻り値

S_OK を返す。

注意

StartStreaming メソッドはこのメソッドを呼び出す。このメソッドは基底クラスでは何もしないが、派生クラスでオーバーライドできる。

CBaseRenderer::OnStopStreaming

CBaseRenderer クラス

フィルタがストリーミングを停止するときに呼び出される。

構文

virtual HRESULT OnStopStreaming(void);

戻り値

S_OK を返す。

注意

StopStreaming メソッドはこのメソッドを呼び出す。このメソッドは基底クラスでは何もしないが、派生クラスでオーバーライドできる。

CBaseRenderer::OnWaitEnd

CBaseRenderer クラス

フィルタがサンプルのプレゼンテーション時間の待機を終了するときに呼び出される。

構文

virtual void OnWaitEnd(void);

注意

WaitForRenderTime メソッドは、サンプルのプレゼンテーション時間の待機を終了したとき、このメソッドを呼び出す。このメソッドは基底クラスでは何もしないが、派生クラスでオーバーライドできる。

品質コントロールを実装する場合には、このメソッドと共に OnWaitStart メソッドをオーバーライドしてもよい。これらのメソッドを使用すると、フィルタのパフォーマンスを追跡できる。

CBaseRenderer::OnWaitStart

CBaseRenderer クラス

フィルタがサンプルのプレゼンテーション時間の待機を開始するときに呼び出される。

構文

virtual void OnWaitStart(void);

注意

WaitForRenderTime メソッドは、サンプルのプレゼンテーション時間の待機を開始するとき、このメソッドを呼び出す。このメソッドは基底クラスでは何もしないが、派生クラスでオーバーライドできる。

品質コントロールを実装する場合には、このメソッドと共に OnEndStart メソッドをオーバーライドしてもよい。これらのメソッドを使用すると、フィルタのパフォーマンスを追跡できる。

CBaseRenderer::Pause

CBaseRenderer クラス

フィルタをポーズする。

構文

HRESULT Pause(void);

戻り値

HRESULT 値を返す。可能な値は次の一覧のとおり。

S_OK移行は完了している。
S_FALSE移行は完了していない。

注意

このメソッドは、CBaseFilter::Pause メソッドをオーバーライドする。以下のステップを実行する。

CBaseRenderer::PrepareReceive

CBaseRenderer クラス

サンプルをレンダリングする準備をする。

構文

virtual HRESULT PrepareReceive(
    IMediaSample *pMediaSample
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。可能な値は次の一覧のとおり。

S_OK成功。
E_FAIL失敗。
E_UNEXPECTED予期せぬエラー。
VFW_E_SAMPLE_REJECTEDフィルタはこのサンプルをドロップする。

注意

フィルタは、サンプルをレンダリングする前に、Receive メソッド内からこのメソッドを呼び出す。フィルタが実行中の場合、このメソッドはサンプルのレンダリングをスケジュールする。

フィルタに既に保留されているサンプルがある場合、または既にエンドオブストリームに達している場合、メソッドは E_UNEXPECTED を返す。アップストリーム フィルタによるストリーミングの呼び出し順序が正しくない可能性がある。

スケジューリング アルゴリズムにより、サンプルをドロップしなければならないと判断される場合 (「ScheduleSample」参照)、メソッドは VFW_E_SAMPLE_REJECTED を返す。ただし、サンプルのドロップはエラーでないため、入力ピンの IMemInputPin::Receive メソッドは、このエラー コードをアップストリーム フィルタに渡さない。

CBaseRenderer::PrepareRender

CBaseRenderer クラス

フィルタがサンプルをレンダリングする前に呼び出される。

構文

virtual void PrepareRender(void);

注意

フィルタは、OnReceiveFirstSample メソッドまたは Render メソッドを呼び出す前に、このメソッドを呼び出す。PrepareRender は基底クラスでは何もしない。派生クラスでは、このメソッドをオーバーライドして、レンダリング前に必要な任意の処理を実行できる。たとえば、ビデオ レンダラであれば、このメソッドをオーバーライドしてパレットを実現してもよい。

CBaseRenderer::Ready

CBaseRenderer クラス

状態の移行が完了していることを通知する。

構文

void Ready(void);

注意

このメソッドにより、GetState メソッドは S_OK を返すようになる。この値は、フィルタが現在の状態への移行を完了していることを示す。フィルタは、状態の移行を完了するたびに、このメソッドを呼び出す。

参照

CheckReadyNotReady

CBaseRenderer::Receive

CBaseRenderer クラス

ストリーム内の次のメディア サンプルを取得する。

構文

virtual HRESULT Receive(
    IMediaSample *pMediaSample
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

成功なら S_OK を返し、それ以外の場合はエラーの原因を示す HRESULT 値を返す。

注意

入力ピンは、アップストリーム フィルタからサンプルを受け取るときに、このメソッドを呼び出す。

フィルタが実行中の場合、このメソッドは以下のステップを実行する。

  1. サンプルのレンダリングをスケジュールする (PrepareReceive)。
  2. スケジュールされた時間を待機する (WaitForRenderTime)。
  3. サンプルをレンダリングする (Render)。
  4. サンプルを解放する (ClearPendingSample)。

フィルタがポーズ中の場合、このメソッドは次のステップを実行する。

  1. サンプルが利用可能なことを派生クラスに通知する (OnReceiveFirstSample)。
  2. スケジュールされた時間を待機する。
  3. サンプルをレンダリングする。
  4. サンプルを解放する。

ポーズ中の場合、メソッドはステップ 2. でフィルタが実行状態に切り替わるまで待機する。この時点で、フィルタがサンプルをスケジュールする。

OnReceiveFirstSample メソッドは基底クラスでは何もしない。派生クラスではこのメソッドをオーバーライドできる。たとえば、ビデオ レンダラがポーズ中なら、通常は、最初のサンプルを静止画として表示する。

CBaseRenderer::Render

CBaseRenderer クラス

サンプルをレンダリングする。

構文

virtual HRESULT Render(
    IMediaSample *pMediaSample
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。可能な値は次の一覧のとおり。

S_FALSEフィルタが停止しているか、または pMediaSample が NULL。
S_OK成功。

注意

このメソッドは、実際の処理をする純粋仮想メソッド DoRenderSample を呼び出す。派生クラスでは DoRenderSample を実装する必要がある。

このメソッドは、DoRenderSample を呼び出す直前に OnRenderStart メソッドを呼び出す。また、直後には OnRenderEnd メソッドを呼び出す。派生クラスでは、必要に応じてこれらの 2 つのメソッドをオーバーライドできる。

CBaseRenderer::ResetEndOfStream

CBaseRenderer クラス

エンドオブストリーム関連フラグをリセットする。

構文

virtual HRESULT ResetEndOfStream(void);

戻り値

S_OK を返す。

注意

このメソッドは、直前のエンドオブストリーム状態をクリアする。その時点で、フィルタが新しいデータを受け取れるようになる。Stop および BeginFlush メソッドは、このメソッドを呼び出す。

CBaseRenderer::ResetEndOfStreamTimer

CBaseRenderer クラス

EC_COMPLETE 通知をスケジュールするタイマをキャンセルする。

構文

void ResetEndOfStreamTimer(void);

参照

SendEndOfStreamTimerCallback

CBaseRenderer::Run

CBaseRenderer クラス

フィルタを実行する。

構文

HRESULT Run(void);

戻り値

成功なら S_OK を返し、それ以外の場合はエラーの原因を示す HRESULT 値を返す。

注意

このメソッドは、CBaseFilter::Run メソッドをオーバーライドする。以下の処理を実行する。

フィルタが接続されていない場合は、直ちに EC_COMPLETE イベントを送信する。

CBaseRenderer::ScheduleSample

CBaseRenderer クラス

サンプルのレンダリングをスケジュールする。

構文

virtual BOOL ScheduleSample(
    IMediaSample *pMediaSample
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

サンプルがスケジュールされた場合は TRUE を返し、サンプルがドロップされた場合は FALSE を返す。

注意

このメソッドは、最初に、サンプルを直ちにレンダリングすべきか、後でレンダリングすべきか、またはドロップすべきかを判断する (このために GetSampleTimes メソッドを呼び出す)。直ちにレンダリングする場合、メソッドは m_RenderEvent イベントを通知する。後でレンダリングする場合には、スケジュールするために IReferenceClock::AdviseTime メソッドを呼び出す。

CBaseRenderer::SendEndOfStream

CBaseRenderer クラス

エンドオブストリームに達している場合に、フィルタ グラフ マネージャへの EC_COMPLETE イベントをスケジュールする。

構文

virtual HRESULT SendEndOfStream(void);

戻り値

HRESULT 値を返す。可能な値は次の一覧のとおり。

S_FALSEフィルタ グラフ マネージャはイベント通知を受け取っていない。
S_OK成功。

注意

現在のサンプルの終了タイムより前に、フィルタにエンドオブストリーム通知が届くことがある。この場合、フィルタは、フィルタ グラフ マネージャに EC_COMPLETE 通知を送信する前に、待機しなければならない。

したがって、以下のようになる。

タイマ用のコールバック メソッドは、TimerCallback である。EC_COMPLETE イベントを配信するため、フィルタは NotifyEndOfStream メソッドを呼び出す。

CBaseRenderer::SendNotifyWindow

CBaseRenderer クラス

アップストリーム フィルタにビデオ ウィンドウのハンドルを通知する。

構文

void SendNotifyWindow(
    IPin *pPin,
    HWND hwnd
);

パラメータ

pPin
アップストリーム フィルタの出力ピンの IPin インターフェイスへのポインタ。
hwnd
ビデオ ウィンドウのハンドル、または NULL。

戻り値

戻り値なし。

注意

アップストリーム フィルタの出力ピンIMediaEventSink インターフェイスをサポートする場合、このメソッドは、ウィンドウ ハンドルと共に EC_NOTIFY_WINDOW イベント コードをアップストリーム フィルタに送信する。

ビデオ レンダラは、レンダラ自体の CompleteConnect メソッドを、このメソッドを呼び出すようにオーバーライドできる。これは、アップストリーム フィルタにウィンドウ ハンドルを知らせるためのメカニズムである。この場合、BreakConnect メソッドもオーバーライドし、NULL ハンドルを指定して SendNotifyWindow を呼び出すようにする。


CBaseRenderer::SendRepaint

CBaseRenderer クラス

フィルタ グラフ マネージャに再描画イベントを送信する。

構文

void SendRepaint(void);

注意

このメソッドは、以下の条件が満たされる場合、フィルタ グラフ マネージャに EC_REPAINT イベントを送信する。

EC_REPAINT イベントの結果、グラフの状態に応じて、アップストリーム フィルタがサンプルを再送信するか、フィルタ グラフが現在位置までシークするか、またはフィルタ グラフ マネージャが一瞬ポーズする (「EC_REPAINT」を参照)。有効でない可能性があるため、このイベントはあまり使用しないほうがよい。ただし、ビデオ レンダラでは表示をリフレッシュしなければならないこともある。

CBaseRenderer::SetAbortSignal

CBaseRenderer クラス

レンダリングを停止して以降のサンプルを拒否するかどうかを示す、中止フラグを設定する。

構文

void SetAbortSignal(
    BOOL bAbort
);

パラメータ

bAbort
レンダリングを停止するかどうかを示すブール型の値。TRUE の場合、フィルタは以降のサンプルをレンダリングしない。

注意

このメソッドは m_bAbort フラグを設定する。

CBaseRenderer::SetMediaType

CBaseRenderer クラス

ピンのメディア タイプを設定するときに呼び出される。

構文

virtual HRESULT SetMediaType(
    const CMediaType *pmt
);

パラメータ

pmt
メディア タイプを指定する CMediaType オブジェクトへのポインタ。

戻り値

S_OK を返す。

注意

入力ピンは、ピン自体の CRendererInputPin::SetMediaType メソッドからこのメソッドを呼び出す。このメソッドは基底クラスでは何もしない。

CBaseRenderer::SetRepaintStatus

CBaseRenderer クラス

再描画イベントを有効または無効にする。

構文

void SetRepaintStatus(
    BOOL bRepaint
);

パラメータ

bRepaint
再描画イベントが有効になっているかどうかを示すブール型の値。TRUE の場合、フィルタは EC_REPAINT イベントをフィルタ グラフ マネージャに送信する。それ以外の場合は、EC_REPAINT イベントを送信しない。

注意

このメソッドは、フィルタ グラフ マネージャに EC_REPAINT イベントが溜まることを防ぐ。フィルタは、EC_REPAINT イベントを送信した後で、値 TRUE を指定してこのメソッドを呼び出す。次のデータを受け取るまで、フィルタは以降の EC_REPAINT イベントを送信しない。

CBaseRenderer::ShouldDrawSampleNow

CBaseRenderer クラス

サンプルのレンダリングをスケジュールする方法を判断する。

構文

virtual HRESULT ShouldDrawSampleNow(
    IMediaSample *pMediaSample,
    REFERENCE_TIME *pStartTime,
    REFERENCE_TIME *pEndTime
);

パラメータ

pMediaSample
サンプルの IMediaSample インターフェイスへのポインタ。
pStartTime
サンプルの開始タイムが格納された変数へのポインタ。
pEndTime
サンプルの終了タイムが格納された変数へのポインタ。

戻り値

S_FALSE を返す。派生クラスでこのメソッドをオーバーライドする場合には、次の一覧に含まれるいずれかの値を返す。

S_OKサンプルを直ちにレンダリングしなければならない。
S_FALSEタイム スタンプに基づいて、サンプルのレンダリングをスケジュールしなければならない。
エラー コードこのサンプルをレンダリングしてはならない。

注意

GetSampleTimes メソッドはこのメソッドを呼び出す。デフォルトでは、サンプルのレンダリングが、常にタイム スタンプに基づいてスケジュールされる。このメソッドは、たとえば品質コントロール データを収集するように、派生クラスでオーバーライドできる。

CBaseRenderer::SignalTimerFired

CBaseRenderer クラス

レンダリングのスケジュールに使用されるタイマ識別子をクリアする。

構文

virtual void SignalTimerFired(void);

注意

フィルタは、レンダリング タイマをアクティブにするとき (「WaitForRenderTime」を参照)、またはキャンセルするとき (「CancelNotification」を参照) に、このメソッドを呼び出す。メソッドは、m_dwAdvise メンバ変数を 0 にリセットする。

CBaseRenderer::SourceThreadCanWait

CBaseRenderer クラス

ストリーミング スレッドを保持または解放する。

構文

virtual HRESULT SourceThreadCanWait(
    BOOL bCanWait
);

パラメータ

bCanWait
ストリーミング スレッドを保持するかどうかを示すブール型の値。TRUE の場合、以降のサンプルをレンダリングするまでフィルタが待機する間、ストリーミング スレッドがブロックされる。FALSE の場合、ストリーミング スレッドは解放される。

戻り値

S_OK を返す。

注意

値 FALSE を指定した SourceThreadCanWait メソッドの呼び出しは、ブロックされた IMemInputPin::Receive 呼び出しからフィルタを強制的に復帰させる。フィルタが実行中の場合、現在のサンプルのプレゼンテーション時間まで、Receive の呼び出しをブロックする。フィルタがポーズ中の場合は、Receive の呼び出しを無期限にブロックする。この動作によって、ストリーム内のデータの流れを調整する。ただし、フィルタが停止中またはフラッシュ中の場合、ブロックは行わない。

ブロックは、m_RenderEventm_ThreadSignal の 2 つのイベントを待機する WaitForRenderTime メソッドが制御する。m_RenderEvent イベントは、プレゼンテーション時間になると通知済になる。m_ThreadSignal イベントは、値 FALSE で SourceThreadCanWait を呼び出すと通知済になる。このイベントは、値 TRUE で SourceThreadCanWait を呼び出すとリセットされる。

Stop および BeginFlush メソッドは値 FALSE で SourceThreadCanWait を呼び出す (ストリーミング スレッドを解放する)。PauseRun、および EndFlush メソッドは、値 TRUE で SourceThreadCanWait を呼び出す。

CBaseRenderer::StartStreaming

CBaseRenderer クラス

フィルタが実行状態に切り替わるときに、ストリーミングを開始する。

構文

virtual HRESULT StartStreaming(void);

戻り値

S_OK またはその他の HRESULT 値を返す。

注意

フィルタにサンプルがある場合、フィルタはそのサンプルのレンダリングをスケジュールする。それ以外の場合、保留されているエンドオブストリーム通知があれば、フィルタはフィルタ グラフ マネージャに EC_COMPLETE イベントを送信する。

このメソッドは OnStartStreaming メソッドを呼び出す。OnStartStreaming メソッドは基底クラスでは何もしないが、派生クラスでオーバーライドできる。

CBaseRenderer::Stop

CBaseRenderer クラス

フィルタを停止する。

構文

HRESULT Stop(void);

戻り値

S_OK を返す。

注意

このメソッドは CBaseFilter::Stop メソッドをオーバーライドする。以下の処理を実行する。

CBaseRenderer::StopStreaming

CBaseRenderer クラス

フィルタが実行状態以外に切り替わるときに、ストリーミングを停止する。

構文

virtual HRESULT StopStreaming(void);

戻り値

S_OK を返す。

注意

このメソッドは OnStopStreaming メソッドを呼び出す。OnStopStreaming メソッドは基底クラスでは何もしないが、派生クラスでオーバーライドできる。

CBaseRenderer::TimerCallback

CBaseRenderer クラス

エンドオブストリーム用のタイマ イベントで使用するコールバック メソッド。

構文

void TimerCallback(void);

注意

SendEndOfStream メソッドは、タイマ イベントを使って EC_COMPLETE 通知をスケジュールする。TimerCallback メソッドは、タイマ イベント用のコールバック関数である。TimerCallback メソッドがもう 1 度 SendEndOfStream を呼び出し、SendEndOfStream が EC_COMPLETE 通知を送信するか、またはほかのタイマを設定するかを判断する。

ResetEndOfStreamTimer メソッドは、タイマ イベントをキャンセルする。

CBaseRenderer::WaitForReceiveToComplete

CBaseRenderer クラス

Receive メソッドが完了するまで待機する。

構文

void WaitForReceiveToComplete(void);

注意

Stop および BeginFlush メソッドはこのメソッドを呼び出して、状態の変化と Receive メソッドの同期をとる。

つまり、このメソッドは、m_bInReceive フラグが FALSE になるまで待機する間に、メッセージをディスパッチする。このフラグは、PrepareReceive メソッド内で TRUE になり、Receive メソッドが PrepareRender メソッドを呼び出した後で FALSE に戻る。派生クラスでは、PrepareRender を使ってパレットを設定できる。PrepareRender の完了を待機すると、状態の変化が起きる前に、パレット変更メッセージが確実にディスパッチされる。この結果、デッドロックの危険性を回避できる。

CBaseRenderer::WaitForRenderTime

CBaseRenderer クラス

現在のサンプルのプレゼンテーション時間を待機する。

構文

virtual HRESULT WaitForRenderTime(void);

戻り値

以下のいずれかの HRESULT 値を返す。

S_OK成功。
VFW_E_STATE_CHANGEDプレゼンテーション時間になる前に、フィルタの状態が変化した。

注意

このメソッドは、以下のいずれかが起きるまで待機する。

プレゼンテーション時間になると、m_RenderEvent イベントが通知済になる。状態が変化すると、m_ThreadSignal イベントが通知済になる。このメソッドは、両方のイベントを待機する。派生クラスでは、必要に応じてこのメソッドをオーバーライドして、ほかのイベントを待機できる。

このメソッドは、待機を開始するとき OnWaitStart メソッドを呼び出し、待機を終了すると OnWaitEnd メソッドを呼び出す。どちらのメソッドも、基底クラスでは何もしないが、派生クラスでオーバーライドできる。