次の方法で共有


COutputQueue クラス

COutputQueue

COutputQueue クラスは、メディア サンプルを出力するキューを実装する。

このクラスによって出力ピンはサンプルを非同期に出力することができる。サンプルはキューに置かれ、ワーカー スレッドはそれを入力ピンに出力する。キューは新しいセグメント、エンドオブストリーム通知、またはフラッシュ処理を示すコントロール メッセージも保持する。

このクラスを使うには、フィルタの出力ピンごとに COutputQueue オブジェクトを作成すること。コンストラクタ メソッドでその出力ピンに接続する入力ピンを指定すること。このクラスの使用中は、出力ピンは直接入力ピンを呼び出すことができない。代わりに、次の表に示すように COutputQueue の対応するメソッドを呼び出す。

Pin メソッド COutputQueue メソッド
IPin::BeginFlush BeginFlush
IPin::EndFlush EndFlush
IPin::EndOfStream EOS
IPin::NewSegment NewSegment
IMemInputPin::Receive Receive
IMemInputPin::ReceiveMultiple ReceiveMultiple

オプションとして 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 オブジェクトがキューからサンプルを削除したかどうかを通知するイベントを指定する。