CCmdQueue クラス
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
クラスはCCmdQueue
、CDeferredCommand オブジェクトとメンバー関数のキューを提供し、状態を追加、削除、チェックし、キューに登録されたコマンドを呼び出す基本クラスです。
CCmdQueue
オブジェクトは、IQueueCommand メソッドを実装するオブジェクトの一部です。 フィルター グラフ マネージャーは IQueueCommand メソッドを 実装して、アプリケーションがフィルター グラフにコマンドをキューに登録できるようにします。
IQueueCommand インターフェイスを実装するフィルターは、このクラスを直接使用します。
CDeferredCommand オブジェクトを使用する場合は、キューがこのクラスから派生している必要があります。
同期には、粗いモードと正確なモードの 2 つがあります。 粗いモードでは、アプリケーションは指定された時刻が到着するまで待機し、コマンドを実行します。 正確なモードでは、アプリケーションは、その時点で表示されるサンプルで処理が開始されるまで待機し、コマンドを実行します。 フィルターは、実装するフィルターを決定します。 フィルター グラフ マネージャーは、フィルター グラフ マネージャーでキューに登録されているコマンドに対して、常に粗いモードを実装します。
粗い同期が必要な場合は、コマンドが発生するまで待ってから実行する必要があります。 これを行うには、 CCmdQueue::GetDueCommand を呼び出します。 待機する必要がある場合は、 CCmdQueue::GetDueHandle からイベント ハンドルを取得し、これが通知されたら CCmdQueue::GetDueCommand を 呼び出します。 ストリーム時間 は、 CCmdQueue::Run メンバー関数と CCmdQueue::EndRun メンバー関数の呼び出しの間でのみ進みます。 ハンドルが設定されている場合、コマンドの準備ができているという保証はありません。 イベントが通知されるたびに、 GetDueCommand メンバー関数を呼び出します (おそらく、タイムアウトは 0 です)。これは、準備が整っていない場合にE_ABORTを返すことができます。
正確な同期が必要な場合 は、CCmdQueue::GetCommandDueFor メンバー関数を呼び出し、処理しようとしているサンプルをパラメーターとして渡します。 これにより、次が返されます。
- ストリーム時間の前後に発生するストリーム時間コマンド。
- ストリーム時刻のプレゼンテーションの直前または前に発生するプレゼンテーション時コマンド。 これは 、CCmdQueue::Run メンバー関数と CCmdQueue::EndRun メンバー関数の間でのみ行います。この関数の外側では、ストリーム時間からプレゼンテーション時間へのマッピングが不明であるためです。
- プレゼンテーション時のコマンドは、現在期限です。
一時停止モード中に処理される可能性があるサンプルの正確な同期が必要な場合は、ストリーム時間コマンドを使用する必要があります。
いずれの場合も、コマンドは呼び出されるか取り消されるまでキューに残ります。 イベント ハンドルの設定とリセットは、このキュー オブジェクトによって完全に管理されます。
プロテクト データ メンバー | 説明 |
---|---|
m_bRunning | 実行中の状態のフラグ。 実行時に TRUE を 設定します。 |
m_dwAdvise | 参照クロックから識別子をアドバイスします (未処理のアドバイスがない場合は 0)。 |
m_evDue | コマンドの期限を設定します。 |
m_listPresentation | プレゼンテーション時にキューに登録されたコマンドを格納します。 |
m_listStream | ストリーム時間にキューに登録されたコマンドを格納します。 |
m_Lock | リストへのアクセスを保護します。 |
m_pClock | 現在の参照クロック。 |
m_StreamTimeOffset | m_bRunningが TRUE の場合のストリーム時間オフセットを格納します。 |
m_StreamTimeOffset | m_bRunningが TRUE の場合のストリーム時間オフセットを格納します。 |
メンバー関数 | 説明 |
CCmdQueue | CCmdQueue オブジェクトを構築します。 |
CheckTime | 特定の時刻が期限かどうかを判断します。 |
GetDueHandle | 通知されるイベント ハンドルを取得します。 |
オーバーライド可能なメンバー関数 | 説明 |
EndRun | 停止モードまたは一時停止モードに切り替えます。 |
GetCommandDueFor | 指定した時刻にスケジュールされた遅延コマンドを取得します。 |
GetDueCommand | 次のコマンドへのポインターを取得します。 |
挿入 | CDeferredCommand オブジェクトをキューに追加します。 |
[新規作成] | 実行するコマンドを初期化し、新しい CDeferredCommand オブジェクトを 返します。 |
[削除] | キューから CDeferredCommand オブジェクトを削除します。 |
[実行] | 実行モードに切り替えます。 |
SetSyncSource | タイミングに使用するクロックを設定します。 |
SetTimeAdvise | 参照クロックを使用してタイマー イベントを設定します。 |