COutputQueue クラス
COutputQueue クラスは、メディア サンプルを出力するキューを実装する。
このクラスによって出力ピンはサンプルを非同期に出力することができる。サンプルはキューに置かれ、ワーカー スレッドはそれを入力ピンに出力する。キューは新しいセグメント、エンドオブストリーム通知、またはフラッシュ処理を示すコントロール メッセージも保持する。
このクラスを使うには、フィルタの出力ピンごとに COutputQueue オブジェクトを作成すること。コンストラクタ メソッドでその出力ピンに接続する入力ピンを指定すること。このクラスの使用中は、出力ピンは直接入力ピンを呼び出すことができない。代わりに、次の表に示すように COutputQueue の対応するメソッドを呼び出す。
オプションとして COutputQueue オブジェクトを構成して、ワーカー スレッドを使わずに同期を取ってサンプルを出力することができる。オブジェクトは実行時に、入力ピンの状態を基にワーカー スレッドを使うかどうかを決めることもできる。詳細については、「COutputQueue::COutputQueue」を参照すること。
要件
ヘッダー: Outputq.h で宣言し、Streams.h をインクルードする。
ライブラリ: Strmbase.lib (リテール ビルド) または Strmbasd.lib (デバッグ ビルド)。
プロテクト メンバ変数 | |
m_pPin | 入力ピンの IPin インターフェイスへのポインタ。 |
m_pInputPin | 入力ピンの IMemInputPin インターフェイスへのポインタ。 |
m_bBatchExact | オブジェクトが正確なバッチでサンプルを出力するかどうかを指定するフラグ。 |
m_lBatchSize | バッチ サイズ。 |
m_List | メディア サンプル キュー。 |
m_hSem | セマフォのハンドル。サンプルを待つスレッドが使う。 |
m_evFlushComplete | フラッシュ処理が終了したときにそれを通知するイベント。 |
m_hThread | ワーカー スレッドのハンドル。 |
m_ppSamples | COutputQueue::m_lBatchSize サイズのサンプルの配列。 |
m_nBatched | 現在バッチ化されて処理を待っているサンプルの数。 |
m_lWaiting | スレッドがサンプルを待っているときゼロ以外の値を持つフラグ。 |
m_bFlushing | オブジェクトがフラッシュ処理を実行中かどうかを指定するフラグ。 |
m_bTerminate | スレッドが終了すべきかどうかを指定するフラグ。 |
m_bSendAnyway | バッチ処理をオーバーライドするフラグ。 |
m_hr | オブジェクトがサンプルを受け入れるかどうかを示す HRESULT 値。 |
m_hEventPop | オブジェクトがキューからサンプルを削除するたびに通知されるイベント。 |
プロテクト メソッド | |
InitialThreadProc | スレッドが作成されたとき、COutputQueue::ThreadProc メソッドを呼び出す。 |
ThreadProc | サンプルをキューから取得し、それを入力ピンに出力する。 |
IsQueued | オブジェクトがワーカー スレッドを使ってサンプルを出力しているかどうかを確認する。 |
QueueSample | メディア サンプルまたはコントロール メッセージをキューに入れる。 |
IsSpecialSample | キューに入れられたデータがコントロール メッセージかどうかを確認する。 |
FreeSamples | すべてのペンディング状態のサンプルを解放する。 |
NotifyThread | キューにデータが入っていることをスレッドに通知する。 |
パブリック メソッド | |
COutputQueue | コンストラクタ メソッド。 |
~COutputQueue | デストラクタ メソッド。 |
BeginFlush | フラッシュ処理を開始する。 |
EndFlush | フラッシュ処理を終了する。 |
EOS | 入力ピンにエンドオブストリーム呼び出しを出力する。 |
SendAnyway | ペンディング状態のすべてのサンプルを出力する。 |
NewSegment | 入力ピンに新しいセグメントを出力する。 |
Receive | 入力ピンにメディア サンプルを出力する。 |
ReceiveMultiple | メディア サンプルのバッチを入力ピンに出力する。 |
Reset | オブジェクトをリセットし、再びデータを受け取れるようにする。 |
IsIdle | オブジェクトがデータを待っているかどうかを確認する。 |
SetPopEvent | オブジェクトがキューからサンプルを削除したかどうかを通知するイベントを指定する。 |