[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
クラスは CBaseRenderer 、レンダラー フィルターを実装するための基本クラスです。
これは、CRendererInputPin クラスによって実装される 1 つの入力ピンをサポートします。 このクラスを使用するには、 を継承する派生クラスを宣言します CBaseRenderer。 少なくとも、派生クラスは、基底クラスで純粋仮想として宣言されている次のメソッドを実装する必要があります。
- CBaseRenderer::CheckMediaType: 提案されたメディアの種類を受け入れるか拒否します。 フィルターは、ピン接続プロセス中にこのメソッドを呼び出します。
- CBaseRenderer::D oRenderSample: サンプルをレンダリングします。 フィルターは、実行中に受け取るすべてのサンプルに対してこのメソッドを呼び出します。
基底クラスは、状態の変更と同期の問題を処理します。 また、レンダリング用のサンプルもスケジュールしますが、品質管理メジャーは実装されていません。 基底クラスでは、いくつかの "ハンドラー" メソッドも宣言されます。 これらは、ストリーミング プロセス内の特定のポイントでフィルターが呼び出すメソッドです。 基底クラスでは何も行いませんが、派生クラスはオーバーライドできます。 次の表では、Public Methods: Handlers という見出しの下に一覧表示されています。
CBaseRenderer::OnReceiveFirstSample ハンドラーは、特別なメンションに値します。 フィルターは、フィルターが一時停止中にサンプルを受け取った場合にこのメソッドを呼び出します。 これは、グラフが停止から一時停止に切り替わる場合、または一時停止中にグラフがシークされた場合に発生する可能性があります。 ビデオ レンダラーは通常、サンプルを使用して静止フレームを表示します。 フィルターが一時停止から実行中に切り替わると、ストリームの最初のサンプルと同じサンプル が CBaseRenderer::D oRenderSample メソッドに送信されます。
クラスはCBaseRenderer、CRendererPosPassThru オブジェクトを介して 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 | 指定した識別子を持つピンを取得します。 |
要件
| 要件 | 値 |
|---|---|
| ヘッダー |
|
| ライブラリ |
|