Microsoft DirectX 8.0 |
ソース フィルタ実装の基底クラス。
宣言: Source.h
CSource から派生したフィルタには、CSourceStream クラスから派生した 1 つまたは複数の出力ピンが含まれる。それぞれの出力ピンは、メディア サンプルをダウンストリームにプッシュするワーカー スレッドを作成する。出力ピンを実装するには、次の操作を行う。
フィルタを実装するには、次の操作を行う。
複数のスレッド間でフィルタの状態を同期するには、CSource::pStateLock メソッドを呼び出す。このメソッドは、フィルタ状態のクリティカル セクションへのポインタを返す。CAutoLock クラスを使って、クリティカル セクションを保持する。次に示すように、ピンからはピンの CBasePin.m_pFilter メンバ変数から pStateLock にアクセスできる。
CAutoLock lock(m_pFilter->pStateLock());
注 : CSource クラスは、データ フローのプッシュ モデルをサポートするように設計されている。このクラスは、ファイル リーダー フィルタの作成には推奨されない。ファイル リーダーは、IAsyncReader インターフェイスを介して、プル モデルをサポートする必要がある。詳細については、「フィルタ開発者が使用するデータ フロー」を参照すること。
プロテクト メンバ変数 | |
---|---|
m_iPins | フィルタ上のピン数。 |
m_paStreams | ピンの配列。 |
m_cStateLock | フィルタの状態を保護するクリティカル セクション オブジェクト。 |
Public メソッド | |
CSource | コンストラクタ メソッド。 |
~CSource | デストラクタ メソッド。 |
GetPinCount | フィルタ上のピン数を取得する。 |
GetPin | ピンを取得する。 |
pStateLock | フィルタのクリティカル セクション オブジェクトへのポインタを取得する。 |
AddPin | フィルタに新しい出力ピンを追加する。 |
RemovePin | フィルタから指定されたピンを取り除く。 |
FindPinNumber | フィルタ上から、指定された数のピンを取得する。 |
IBaseFilter Methods | |
FindPin | 指定された識別子を持つピンを取得する。 |
フィルタ上のピン数。
構文
int m_iPins;
ピンの配列。
構文
CSourceStream **m_paStreams;
フィルタの状態を保護するクリティカル セクション オブジェクト。pStateLock ヘルパー メソッドは、このメンバ変数へのポインタを返す。
構文
CCritSec m_cStateLock;
新しい出力ピンをフィルタに追加する。
構文
HRESULT AddPin( CSourceStream *pStream );
パラメータ
- pStream
- ピンを実装する CSourceStream オブジェクトへのポインタ。
戻り値
次の表に示されるいずれかの HRESULT 値を返す。
S_OK 成功。 E_OUTOFMEMORY メモリ不足。
注意
CSourceStream コンストラクタはこのメソッドを呼び出し、出力ピンをフィルタに追加する。
コンストラクタ メソッド。
構文
CSource( TCHAR *pName, LPUNKNOWN lpunk, CLSID clsid );
パラメータ
- pName
- オブジェクトの名前が含まれた文字列へのポインタ。詳細については、「CBaseObject」を参照すること。
- lpunk
- このオブジェクトの所有者へのポインタ。このオブジェクトが集成された場合は、派生クラスの CreateInstance 関数に渡された集成オブジェクトの IUnknown インターフェイスに、ポインタを渡す。それ以外の場合は、このパラメータに NULL を設定する。
- clsid
- フィルタのクラス識別子。
デストラクタ メソッド。
構文
~CSource(void);
指定された識別子を持つピンを取得する。IBaseFilter::FindPin メソッドを実装する。
構文
HRESULT FindPin( LPCWSTR Id, IPin **ppPin );
パラメータ
- Id
- ピンを識別する、NULL で終了する文字列へのポインタ。
- ppPin
- ピンの IPin インターフェイスへのポインタを受け取る変数のアドレス。メソッドが失敗すると、*ppPin は NULL に設定される。
戻り値
次の表に示されるいずれかの HRESULT 値を返す。
S_OK 成功。 E_POINTER NULL ポインタ引数。 VFW_E_NOT_FOUND この識別子を持つピンは見つからなかった。
注意
最初のピンは、"1"、2 つ目のピンは "2"、以後同様である。詳細については、「CSourceStream::QueryId」を参照すること。
フィルタ上のピンを指定する。
構文
int FindPinNumber( IPin *iPin );
パラメータ
- iPin
- ピンの IPin インターフェイスへのポインタ。
戻り値
ピン番号を返す。フィルタ上にピンが見つからなかった場合は -1 を返す。最初のピンの番号は 0 である。
ピンを取得する。純粋仮想メソッド CBaseFilter::GetPin を実装する。
構文
CBasePin *GetPin( int n );
パラメータ
- n
- 指定されたピンの数。
戻り値
ピンを実装する CBasePin オブジェクトへのポインタを返す。インデックスが範囲外の場合は NULL を返す。
フィルタ上のピンの数を取得する。純粋仮想メソッド CBaseFilter::GetPinCount を実装する。
構文
int GetPinCount(void);
戻り値
フィルタ上のピンの数を返す。
フィルタのクリティカル セクション オブジェクトへのポインタを取得する。
構文
CCritSec* pStateLock(void);
戻り値
m_cStateLock メンバ変数へのポインタを返す。
フィルタから指定されたピンを取り除く。このメソッドはピンを削除しない。
構文
HRESULT RemovePin( CSourceStream *pStream );
パラメータ
- pStream
- ピンを実装する CSourceStream オブジェクトへのポインタ。
戻り値
次の表に示されるいずれかの HRESULT 値を返す。
S_OK 成功。 S_FALSE フィルタには、このピンは含まれていない。
注意
CSourceStream デストラクタはこのメソッドを呼び出し、フィルタから出力ピンを取り除く。