Microsoft DirectX 8.0 |
CBaseVideoRenderer 基底クラスは、ビデオ レンダラ フィルタを構築するために使用される。
m_bDrawLateFrames フレームがドロップされないことを通知するフラグ。デバッグ専用。これは同期を破棄する。 m_bSupplierHandlingQuality TRUE は品質 コントロール メッセージが処理されることを示す。これによって、レンダラはフレーム自体がドロップするまで待機し、サプライヤがフレームをドロップした直後に次のフレームを表示することができる。 m_cFramesDrawn ストリーミングが開始された後に描画されたフレームの合計数。 m_cFramesDropped ストリーミングが開始された後、レンダラでドロップされた累積フレーム数。フレームは、レンダラが認識せずに、アップストリームでもドロップできる。 m_idDecision ShouldDrawSampleNow の決定コードの MSR_id。 m_idDuration フレームの時間幅の MSR_id。 m_idFrameAccuracy フレームが遅延した時間のパフォーマンス ログ識別子 (ミリ秒単位)。 m_idFrameAvg 同期および品質 コントロールで使用される平均フレーム時間のパフォーマンス ログ識別子。 m_idQualityRate 要求された品質 レートの MSR_id。 m_idQualityTime 要求された品質 タイムの MSR_id。 m_idRenderAvg 記録された平均レンダラ時間のパフォーマンス ログ識別子。 m_idSchLateTime スケジュール時のフレームの遅延を示す MSR_id。 m_idSendQuality 通知のタイミングの MSR_id (使用されない)。 m_idTimeStamp フレームのタイム スタンプの MSR_id。 m_idWait 記録された待機時間のパフォーマンス ログ識別子 (使用されない)。 m_idWaitReal 実際の待機時間のパフォーマンス ログ識別子。 m_iSumFrameTime フレーム間の時間の合計。プロパティ ページで必要になる。 m_iSumSqAcc プロパティ ページで必要な精度 (ミリ秒単位) の 2 乗の合計。 m_iSumSqFrameTime フレーム間の時間の 2 乗の合計。プロパティ ページで必要になる。 m_iTotAcc プロパティ ページで必要な精度 (ミリ秒単位) の合計。 m_nNormal スケジュールされた時間に描画される連続するフレームの数。負の数は、フレームがレンダラによってドロップされたことを示す。 m_trDuration 最後のフレームの時間幅 (開始タイムと終了タイムの差)。 m_trEarliness フレームがドロップされた場合に、どれくらい早くフレームを再生できるか。 m_trFrame 最後に記録されたフレーム間の時間。統計的測定で使用される。 m_trFrameAvg 基準タイムの単位でのフレーム間の平均時間。 m_trLastDraw 前のフレームの時間。フレーム間の時間の参照で使用される。 m_trLate 現在のフレームが遅延する時間。統計的測定で使用される。 m_trRenderAvg フレームがビットブロック転送を実行するためにかかる時間。 m_trRenderLast 最後のフレームのビットブロック転送の時間。 m_trRenderLast ビットブロック転送を開始する時間。m_trRenderLast を取得するために使用される。 m_trThrottle 各フレームをレンダリングした後に挿入する時間。通常、オーディオの品質を向上させたときに使用され、これを行うためにビデオのパフォーマンスを低下させる必要がある。 m_trWaitAvg 基準タイムの単位での平均待機時間。 m_tStreamingStart プロパティ ページの統計で使用される。現在のストリーミング処理の開始タイム、または現在ストリーミングが行われていない場合は前のストリーミング処理の開始タイムを表す。
CBaseVideoRenderer CBaseVideoRenderer オブジェクトを作成する。 GetStdDev フレームごとの統計として、各フレームの予定時間と実際にレンダリングされた時間との標準偏差を予測する。 PreparePerformanceData 現在のフレームの m_trLate および m_trFrame の値を設定する。 ThrottleWait 各フレームの後に待機時間を挿入する。
JoinFilterGraph フィルタがフィルタ グラフから削除されたときに、EC_WINDOW_DESTROYED イベント通知を送信する。 OnDirectRender 同期および品質 コントロールを制御するタイミング情報を収集する。 OnRenderEnd 品質 コントロールおよび同期の情報を記録する。 OnRenderStart 品質 コントロールおよび同期の情報を記録する。 OnStartStreaming ストリーミングを制御するすべての時間をリセットする。 OnStopStreaming プロパティ ページのレポート用に時間を修正するために、ストリーミングの最後に呼び出される。 OnWaitEnd 待機時間の終了時に呼び出される。パフォーマンス ログ専用。 OnWaitStart 待機していた時間と待機していなかった時間を更新する。パフォーマンス ログ専用。 RecordFrameLateness レンダリングがどの程度遅れずに行われたかを記録し、プロパティ ページの統計情報を収集する。 ResetStreamingTimes ストリーミングを制御するすべての時間をリセットする。 ScheduleSample クロックを使用してアドバイズ リンクを設定する。 SendQuality サプライヤが品質に関して実行する処理を示す品質 メッセージを送信する。 ShouldDrawSampleNow クロックを使用してタイマのアドバイズ リンクを設定せずに、ビデオを予定どおりに描画するかどうかを判断する。
get_AvgFrameRate ストリーミングが開始された後の平均フレーム レートを、100 秒あたりのフレーム数単位で取得する。 get_AvgSyncOffset 各フレームの予定時間と実際にレンダリングされた時間の間の平均時間をミリ秒単位で取得する。これは、ストリーミングが開始された後、すべてのフレームに適用される。 get_DevSyncOffset ストリーミングが開始された後のすべてのフレームについて、各フレームの予定時間と実際にレンダリングされた時間の間のミリ秒単位の時間の標準偏差を取得する。 get_FramesDrawn ストリーミングの開始後に描画されたフレーム数を取得する。 get_FramesDroppedInRenderer レンダラによってドロップされたフレーム数を取得する。フレームはアップストリームでもドロップできる。 get_Jitter 各フレームと次のフレームの間のミリ秒単位の時間について標準偏差を取得する。これは、ストリーミングが開始された後、すべてのフレームに適用される。
実装される INonDelegatingUnknown メソッド
NonDelegatingQueryInterface ほかのインターフェイス、特にプロパティ ページへのアクセスを提供する。
Notify 品質の変更が要求されたことを受信者に通知する。 SetSink 品質 メッセージを受け取る IQualityControl オブジェクトを設定する。
CBaseVideoRenderer オブジェクトを作成する。
構文
CBaseVideoRenderer( REFCLSID RenderClass, TCHAR *pName, LPUNKNOWN pUnk, HRESULT *phr );
パラメータ
- RenderClass
- このレンダラのクラス識別子。
- pName
- デバッグのために使用される記述へのポインタ。
- pUnk
- 集成された所有者オブジェクトへのポインタ。
- phr
- HRESULT 値へのポインタ。
戻り値
戻り値なし。
到達した平均フレーム レートを計算して取得する。
構文
HRESULT get_AvgFrameRate( int *piAvgFrameRate );
パラメータ
- piAvgFrameRate
- ストリーミング開始後の 1 秒あたりのフレーム数へのポインタ。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、IQualProp::get_AvgFrameRate メソッドを実装する。
ストリーミングが開始された後のすべてのフレームについて、各フレームの予定時間と実際にレンダリングされた時間の間のミリ秒単位の時間の平均を取得する。
構文
HRESULT get_AvgSyncOffset( int *piAvg );
パラメータ
- piAvg
- 以前に記述された時間の平均へのポインタ。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、IQualProp::get_AvgSyncOffset メソッドを実装する。
ストリーミングが開始された後のすべてのフレームについて、各フレームの予定時間と実際にレンダリングされた時間の間のミリ秒単位の時間の標準偏差を取得する。
構文
HRESULT get_DevSyncOffset( int *piDev );
パラメータ
- piDev
- 以前に記述された時間の標準偏差へのポインタ。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、IQualProp::get_DevSyncOffset メソッドを実装する。
ストリーミングの開始後に描画されたフレーム数を示す、m_cFramesDrawn メンバ変数を取得する。
構文
HRESULT get_FramesDrawn( int *pcFramesDrawn );
パラメータ
- pcFramesDrawn
- 描画されたフレームの数へのポインタ。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、IQualProp::get_FramesDrawn メソッドを実装する。
レンダラによってドロップされたフレーム数を取得する。
構文
HRESULT get_FramesDroppedInRenderer( int *pcFramesDropped );
パラメータ
- pcFramesDropped
- ドロップされたフレームの数へのポインタ。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、IQualProp::get_FramesDroppedInRenderer メソッドを実装する。この方法で、プロパティ ページはスケジューラからのデータを取得できる。フレームは、レンダラが認識せずに、アップストリームでもドロップできる。
ストリーミング開始後のすべてのフレームについて、各フレームと次のフレームの間のミリ秒単位の時間について標準偏差を取得する。
構文
HRESULT get_Jitter( int *piJitter );
パラメータ
- piJitter
- フレーム間の時間の標準偏差へのポインタ (ミリ秒単位)。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、IQualProp::get_Jitter メソッドを実装する。
フレームごとの統計として、各フレームの予定時間と実際にレンダリングされた時間との標準偏差を予測する。
構文
HRESULT GetStdDev( int nSamples, int *piResult, LONGLONG llSumSq, LONGLONG iTot );
パラメータ
- nSamples
- ビデオ レンダラによって受信されたビデオ サンプルの数を格納する整数値。
- piResult
- 標準偏差を格納する整数値へのポインタ。
- llSumSq
- レンダリングされたすべてのビデオ サンプルのミリ秒単位の標準偏差を表す値。この値が小さいほど、レンダリングは一貫性がある。
- iTot
- レンダリングされたすべてのビデオ サンプルについて、スタンプの時間とレンダリングされた時間とのミリ秒単位の平均値を表す値。
戻り値
NOERROR を返す。
フィルタがフィルタ グラフから削除されたときに、EC_WINDOW_DESTROYED イベント通知を送信する。
構文
HRESULT JoinFilterGraph( IBaseFilterGraph *pGraph, LPCWSTR pName );
パラメータ
- pGraph
- 結合するフィルタ グラフへのポインタ。
- pName
- [in, string] 追加されるフィルタの名前へのポインタ。
戻り値
戻り値なし。
注意
このメンバ関数は、CBaseFilter::JoinFilterGraph メンバ関数をオーバーライドする。この関数が、フィルタがフィルタ グラフを離れたことがフィルタに通知されていると判断した場合 (pGraph が Null で、m_pGraph が Null ではない)、EC_WINDOW_DESTROYED イベント通知を送信して、リソース マネージャがレンダラをフォーカス オブジェクトとして保持しないようにする。
インターフェイスを返し、参照カウントをインクリメントする。
構文
HRESULT NonDelegatingQueryInterface( REFIID riid, VOID **ppv );
パラメータ
- riid
- 参照識別子。
- ppv
- インターフェイスへのポインタのアドレス。
戻り値
ppv が無効な場合は、E_POINTER を返す。クエリが成功した場合は NOERROR、失敗した場合は E_NOINTERFACE を返す。
品質の変更が要求されたことを示す通知を受信する。
構文
HRESULT Notify( IBaseFilter *pSelf, Quality q );
パラメータ
- pSelf
- [in] 品質通知を送信しているフィルタへのポインタ。
- q
- [in] 品質通知構造体。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、ビデオ レンダラについて IQualityControl::Notify メソッドを実装する。このメンバ関数は、品質を削減しなければならない場合に、通常フィルタ グラフ マネージャによって呼び出される。これは、オーディオの再生品質を、ビデオの再生品質を低下させなければならない程度まで向上させた場合に行われる。
Notify は、m_trThrottle データ メンバを、ThrottleWait によってフレーム間に挿入される遅延値に設定する。
同期および品質 コントロールを制御するタイミング情報を収集する。
構文
virtual void OnDirectRender( IMediaSample *pMediaSample );
パラメータ
- pMediaSample
- メディア サンプルへのポインタ。
戻り値
HRESULT 値を返す。
注意
OnRenderStart および OnRenderEnd の代わりに、このメンバ関数を呼び出す。これは、Microsoft® DirectDraw® ビデオ レンダラによって使用される。
割り込みによってレンダリング時間が異なる場合に、スムージングを実行する。
構文
void OnRenderEnd( IMediaSample *pMediaSample );
パラメータ
- pMediaSample
- メディア サンプルへのポインタ。
戻り値
戻り値なし。
注意
このメンバ関数は、イメージを描画した直後に呼び出す必要がある。
このメンバ関数は、CBaseRenderer::OnRenderEnd をオーバーライドする。
レンダリングの情報を設定する。
構文
void OnRenderStart( IMediaSample *pMediaSample );
パラメータ
- pMediaSample
- メディア サンプルへのポインタ。
戻り値
戻り値なし。
注意
このメンバ関数は、システムから現在のクロック タイムを取得し、描画が完了したしたときに使用されるメンバ変数に格納する。この関数は、パフォーマンス ログの記録も実行する。このメンバ関数は、描画が開始される直前に呼び出す必要がある。
このメンバ関数は、CBaseRenderer::OnRenderStart をオーバーライドする。
ストリーミングを制御するすべての時間をリセットする。
構文
HRESULT OnStartStreaming(void);
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、CBaseRenderer::OnStartStreaming をオーバーライドする。
プロパティ ページのレポート用に時間を修正するために、ストリーミングの最後に呼び出される。
構文
HRESULT OnStopStreaming(void);
戻り値
HRESULT 値を返す。
注意
このメンバ関数は 2 回呼び出される。1 回はポーズしたときで、もう 1 回は実際に停止したときである。
このメンバ関数は、CBaseRenderer::OnStopStreaming をオーバーライドする。
待機時間の終了時に呼び出される。
構文
void OnWaitEnd(void);
戻り値
戻り値なし。
注意
このメンバ関数は、パフォーマンス ログの記録のみ実行する。このメンバ関数は、スレッドがウィンドウ内で起動したとき、または次のサンプルのレンダリングが予定されている時間に呼び出される。結果的に、このメンバ関数を使用して、同期を制御する情報を収集できる。
待機していた時間と待機していなかった時間を更新する。
構文
void OnWaitStart(void);
戻り値
戻り値なし。
注意
このメンバ関数は、レンダリング イベントの待機を開始したときに呼び出される。このメンバ関数は、パフォーマンス測定のためにのみ使用される。
現在のフレームの m_trLate および m_trFrame の値を設定する。
構文
void PreparePerformanceData( int trLate, int trFrame );
パラメータ
- trLate
- 基準タイムの単位で、サンプルが予定時間からどの程度遅延するかを示す値。
- trFrame
- 基準タイムの単位でのフレーム間の時間。
戻り値
戻り値なし。
注意
このメンバ関数は、m_trLate を trLate の値に、m_trFrame を trFrame の値に設定する。
CBaseVideoRenderer::RecordFrameLateness メンバ関数が、CBaseVideoRenderer::OnRenderStart または CBaseVideoRenderer::OnDirectRender のいずれかから呼び出されると、統計情報を更新するために m_trLate および m_trFrame の値を渡す。PreparePerformanceData は、これらのデータ メンバ値を設定するために CBaseVideoRenderer::OnWaitEnd から呼び出される。
レンダリングがどの程度遅れずに行われたかを記録し、プロパティ ページの統計情報を収集する。
構文
virtual void RecordFrameLateness( int trLate, int trFrame );
パラメータ
- trLate
- 基準タイムの単位で、サンプルが予定時間からどの程度遅延するかを示す値。
- trFrame
- 基準タイムの単位でのフレーム間の時間。
戻り値
戻り値なし。
ストリーミングを制御するすべての時間をリセットする。
構文
virtual HRESULT ResetStreamingTimes(void);
戻り値
HRESULT 値を返す。
注意
この時間は、フレームが最初はドロップされず、最初のフレームが描画されるようにするために設定される。
描画およびドロップされたサンプル数を保持する主な処理を実行する基底クラスをオーバーライドする。IQualProp の実装によって使用される。
構文
BOOL ScheduleSample( IMediaSample *pMediaSample );
パラメータ
- pMediaSample
- メディア サンプルへのポインタ。
戻り値
サンプルがスケジュールされている場合は TRUE を返す。それ以外の場合は FALSE を返す。
サプライヤが品質に関して実行する処理を示す品質 メッセージを送信する。
構文
virtual HRESULT SendQuality( REFERENCE_TIME trLate, REFERENCE_TIME trRealStream );
パラメータ
- trLate
- フレームが遅延する時間。
- trRealStream
- 現在のストリーム タイム。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、品質管理を制御するために、品質 コントロール メッセージをアップストリームに送信する。品質 メッセージの性質 (つまり、サンプル数を増加させるか、減少させるか) は、この派生クラスでの品質管理の実装で決まる。「CBaseVideoRenderer::ShouldDrawSampleNow」を参照すること。
品質 メッセージを受け取る IQualityControl オブジェクトを設定する。
構文
HRESULT SetSink( IQualityControl *piqc );
パラメータ
- piqc
- 通知の送信先の IQualityControl オブジェクトへのポインタ。
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、ビデオ レンダラについて IQualityControl::SetSink メソッドを実装する。
クロックを使用してタイマのアドバイズ リンクを設定せずに、ビデオを描画するかどうかを判断する。
構文
virtual HRESULT ShouldDrawSampleNow( IMediaSample *pMediaSample, REFERENCE_TIME *ptrStart, REFERENCE_TIME *ptrEnd );
パラメータ
- pMediaSample
- このサンプルの IMediaSample インターフェイスへのポインタ。
- ptrStart
- レンダリングを開始する時間へのポインタ。
- ptrEnd
- レンダリングを終了する時間へのポインタ。
戻り値
HRESULT 値を返す。待機せずに、直ちに描画する場合は S_OK を返す。時間 ptrStart に描画する場合は S_FALSE を返す。サンプルを描画しない場合はエラーを返し、そのサンプルをスキップして時間を節約する。
注意
このメンバ関数は、CBaseRenderer::ShouldDrawSampleNow をオーバーライドする。
各フレームの後に待機時間を挿入する。
構文
void ThrottleWait(void);
戻り値
戻り値なし。
注意
このメンバ関数は、m_trThrottle データ メンバから取得された時間待機する。