Microsoft DirectX 8.0 |
IMediaFilter インターフェイスを実装する基底クラス。PID、 それ以外では IBaseFilter インターフェイスをサポートせずに IMediaFilter をサポートする必要のあるオブジェクトについてはこのクラスを使用する。フィルタについてはこのクラスを使用してはならない。そのかわり、CBaseFilter あるいは CBaseFilter から派生した基底クラスを使用する。
宣言 : Amfilter.h
Protected メンバ変数 | |
---|---|
m_State | オブジェクトの現在の状態。 |
m_pClock | オブジェクトの基準クロックへのポインタ。 |
m_tStart | ストリーム タイム 0 に対応する基準タイム。 |
m_clsid | オブジェクトのクラス ID (CLSID)。 |
m_pLock | クリティカル セクションへのポインタ。 |
Public メソッド | |
CBaseMediaFilter | コンストラクタ メソッド。 |
~CBaseMediaFilter | デストラクタ メソッド。 仮想。 |
StreamTime | 現在のストリーム タイムを取得する。仮想。 |
IsActive | オブジェクトがアクティブかどうか(実行中かポーズか)確認する。 |
IPersist メソッド | |
GetClassID | クラス ID を取得する。 |
IMediaFilter メソッド | |
GetState | オブジェクトがアクティブかどうか(実行中か、停止か、ポーズか)を取得する。 |
SetSyncSource | オブジェクトの基準クロックを設定する。 |
GetSyncSource | オブジェクトが使用中の基準クロックを取得する。 |
Stop | オブジェクトを停止する。 |
Pause | オブジェクトをポーズする。 |
Run | オブジェクトを実行する。 |
オブジェクトの現在の状態。
構文
FILTER_STATE m_State;
オブジェクトの基準クロックへのポインタ。
構文
IReferenceClock *m_pClock;
ストリーム タイム 0 に対応する基準タイム。
構文
CRefTime m_tStart;
オブジェクトのクラス ID (CLSID)。
構文
CLSID m_clsid;
クリティカル セクションへのポインタ。
構文
CCritSec *m_pLock;
注意
基準クロックにアクセス(SetSyncSource や GetSyncSource)するときと、IsActive メソッドでは 、クリティカル セクションは状態移行中 (Run、Pause、Stop) に保持される。
コンストラクタ メソッド。
構文
CBaseMediaFilter( const TCHAR *pName, LPUNKNOWN pUnk, CCritSec *pLock, REFCLSID clsid );
パラメータ
注意
他のオブジェクトが CBaseMediaFilter を含む、あるいは集成しているなら、CCritSec ロックは CBaseMediaFilter オブジェクト外で起きている可能性がある。この場合、pLock のロックへのポインタを渡すこと。
それ以外では次のようにする :
- CBaseMediaFilter と CCritSec の両方を継承するクラスを派生させ、このポインタを渡す。
- CBaseMediaFilter と CCritSec メンバ変数を継承するクラスを派生させる。pLock については、その変数のアドレスを渡す。
デストラクタ メソッド。
構文
CBaseMediaFilter(void);
注意
削除する前に必ずオブジェクトを停止させること。
クラス ID を取得。IPersist::GetClassID メソッドの実装。
構文
HRESULT GetClassID( CLSID *pClsID );
パラメータ
- pClsID
- クラス ID を取得する変数のポインタ。
戻り値
S_OK か E_POINTER を返す。
オブジェクトがアクティブかどうか(実行中か、停止か、ポーズか)を取得する。 IMediaFilter::GetState メソッドの実装。
構文
HRESULT GetState( DWORD dwMilliSecsTimeout, FILTER_STATE *State );
パラメータ
- dwMilliSecsTimeout
- タイムアウト時間間隔、ミリ秒
- State
- オブジェクトの状態を示す FILTER_STATE 列挙型のメンバを取得する変数のポインタ。
戻り値
S_OK か E_POINTER を返す。
注意
基底クラスでは、すべての状態移行は同期され、dwMilliSecsTimeout パラメータは無視される。派生クラスが状態移行の同期を実行するなら、このメソッドをオーバーライドし、dwMilliSecsTimeout ミリ秒のタイムアウトで、状態移行を待つべきだ。
オブジェクトが使用中の基準クロックを取得。IMediaFilter::GetSyncSource メソッドの実装。
構文
HRESULT GetSyncSource( IReferenceClock **pClock );
パラメータ
- pClock
- クロックの IReferenceClock インターフェイスへのポインタを取得する変数のアドレス。
戻り値
S_OK か E_POINTER を返す。
注意
オブジェクトが基準クロックを使用していないなら、*pClock を NULL に設定する。メソッドが戻ったとき、*pClock が NULL 以外なら、IReferenceClock インターフェイスは参照カウントを残している。解放時には注意が必要である。
オブジェクトがアクティブかどうか(実行中かポーズか)確認する。
構文
BOOL IsActive(void);
戻り値
オブジェクトが実行中かポーズであれば、TRUE を返す。停止中であれば FALSE を返す。
オブジェクトをポーズする。IMediaFilter::Pause メソッドの実装。
構文
HRESULT Pause(void);
戻り値
S_OK を返す。
注意
基底クラスでは、このメソッドは m_State メンバ変数を State_Paused に設定するが、それ以外は何もしない。
オブジェクトを実行する。IMediaFilter::Run メソッドの実装。
構文
HRESULT Run( REFERENCE_TIME tStart );
パラメータ
- tStart
- ストリーム タイム 0 に対応した基準タイム。
戻り値
S_OK を返す。
注意
オブジェクトが停止していれば、このメソッドは CBaseMediaFilter::Pause メソッドを呼び出しオブジェクトをポーズする。次に m_State メンバ変数を State_Running に設定する。
ストリーム タイムは現在の基準タイム 引く tStart で計算される。タイム スタンプ ゼロのメディア サンプルは tStart タイムにレンダリングされるはずである。
オブジェクトの基準クロックを設定する。IMediaFilter::SetSyncSource メソッドの実装。
構文
HRESULT SetSyncSource( IReferenceClock *pClock );
パラメータ
- pClock
- クロックの IReferenceClock インターフェイスへのポインタ、あるいは NULL 。
戻り値
S_OK を返す。
オブジェクトを停止する。IMediaFilter::Stop メソッドの実装。
構文
HRESULT Stop(void);
戻り値
S_OK を返す。
注意
基底クラスでは、このメソッドは m_State メンバ変数を State_Stopped に設定するが、それ以外は何もしない。
現在のストリーム タイムを取得。
構文
virtual HRESULT StreamTime( CRefTime& rtStream );
パラメータ
- rtStream
- 現在のストリーム タイムを取得する CRefTime オブジェクトへの参照。
戻り値
HRESULT 値を返す。次の表は、可能な値を示している。
S_OK 成功。 VFW_E_NO_CLOCK 有効な基準クロックがない。
注意
ストリーム タイムは(基準クロックで与えられる)現在の基準タイム マイナス (m_tStartで与えれる)開始タイムによって定義される。メディア サンプルのタイム スタンプはレンダリングされるべきストリーム タイムを指定する。現在のストリーム タイムより小さなタイム スタンプを持つサンプルがまだレンダリングされないなら、それは遅れている。