CSource クラス
CSource クラスは、ソース フィルタを実装するための基底クラスである。CSource から派生したフィルタには、CSourceStream クラスから派生した 1 つまたは複数の出力ピンが含まれる。それぞれの出力ピンは、メディア サンプルをダウンストリームにプッシュするワーカー スレッドを作成する。
出力ピンを実装するには、以下を実行する。
- CSourceStream からクラスを派生する。
- CSourceStream::GetMediaType メソッドをオーバーライドし、可能な場合はピンのメディア タイプを検証する CSourceStream::CheckMediaType メソッドもオーバーライドする。
- ピンのバッファ条件を返す CBaseOutputPin::DecideBufferSize メソッドを実装する。
- メディア サンプル バッファにデータを格納する CSourceStream::FillBuffer メソッドを実装する。
フィルタを実装するには、以下を実行する。
- CSource からクラスを派生する。
- コンストラクタで、CSourceStream から派生した 1 つまたは複数のピンを作成する。ピンは、コンストラクタ メソッドで自動的にフィルタに追加され、デストラクタ メソッドで削除される。
複数のスレッド間でフィルタの状態を同期するには、CSource::pStateLock メソッドを呼び出す。このメソッドは、フィルタ状態のクリティカル セクションへのポインタを返す。CAutoLock クラスを使って、クリティカル セクションを保持する。次に示すように、ピンからはピンの CBasePin::m_pFilter メンバ変数から pStateLock にアクセスできる。
CAutoLock lock(m_pFilter->pStateLock());
注 CSource クラスは、データ フローのプッシュ モデルをサポートするように設計されている。このクラスは、ファイル リーダー フィルタの作成には推奨しない。ファイル リーダーは、IAsyncReader インターフェイスを介して、プル モデルをサポートする必要がある。詳細については、「フィルタ開発者が使うデータ フロー」を参照すること。
要件
ヘッダー : Source.h 内で宣言し、Streams.h をインクルードする。
ライブラリ : Strmbase.lib (リテール ビルド) または Strmbasd.lib (デバッグ ビルド) を使う。
プロテクト メンバ変数 | |
m_iPins | フィルタのピンの数。 |
m_paStreams | ピンの配列。 |
m_cStateLock | フィルタの状態を保護するクリティカル セクション オブジェクト。 |
パブリック メソッド | |
CSource | コンストラクタ メソッド。 |
~CSource | デストラクタ メソッド。 |
GetPinCount | フィルタ上のピンの数を取得する。 |
GetPin | ピンを取得する。 |
pStateLock | フィルタのクリティカル セクション オブジェクトへのポインタを取得する。 |
AddPin | フィルタに新しい出力ピンを追加する。 |
RemovePin | フィルタから指定されたピンを取り除く。 |
FindPinNumber | フィルタ上から、指定された数のピンを取得する。 |
IBaseFilter メソッド | |
FindPin | 指定した識別子でピンを取得する。 |