Microsoft DirectX 8.0

CBaseMediaFilter クラス

CBaseMediaFilter クラスの階層

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オブジェクトを実行する。

CBaseMediaFilter.m_State

CBaseMediaFilter クラス

オブジェクトの現在の状態。

構文

FILTER_STATE m_State;

CBaseMediaFilter.m_pClock

CBaseMediaFilter クラス

オブジェクトの基準クロックへのポインタ。

構文

IReferenceClock *m_pClock;

CBaseMediaFilter.m_tStart

CBaseMediaFilter クラス

ストリーム タイム 0 に対応する基準タイム。

構文

CRefTime m_tStart;

CBaseMediaFilter.m_clsid

CBaseMediaFilter クラス

オブジェクトのクラス ID (CLSID)。

構文

CLSID m_clsid;

CBaseMediaFilter.m_pLock

CBaseMediaFilter クラス

クリティカル セクションへのポインタ。

構文

CCritSec *m_pLock;

注意

基準クロックにアクセス(SetSyncSourceGetSyncSource)するときと、IsActive メソッドでは 、クリティカル セクションは状態移行中 (RunPauseStop) に保持される。

CBaseMediaFilter::CBaseMediaFilter

CBaseMediaFilter クラス

コンストラクタ メソッド。

構文

CBaseMediaFilter(
    const TCHAR *pName,
    LPUNKNOWN pUnk,
    CCritSec *pLock,
    REFCLSID clsid
);

パラメータ

pName
オブジェクト名を含む文字列へのポインタ。
pUnk
このオブジェクトの所有者へのポインタ。オブジェクトが集成されていれば、集成されたオブジェクトの IUnknown インターフェイスへのポインタを渡す。それ以外の場合、このパラメータは NULL にセット。
pLock
CCritSec ロックへのポインタ、状態移行を継続するのに用いる。l
clsid
オブジェクトのクラス ID。

注意

他のオブジェクトが CBaseMediaFilter を含む、あるいは集成しているなら、CCritSec ロックは CBaseMediaFilter オブジェクト外で起きている可能性がある。この場合、pLock のロックへのポインタを渡すこと。

それ以外では次のようにする :

CBaseMediaFilter::~CBaseMediaFilter

CBaseMediaFilter クラス

デストラクタ メソッド。

構文

CBaseMediaFilter(void);

注意

削除する前に必ずオブジェクトを停止させること。

CBaseMediaFilter::GetClassID

CBaseMediaFilter クラス

クラス ID を取得。IPersist::GetClassID メソッドの実装。

構文

HRESULT GetClassID(
    CLSID *pClsID
);

パラメータ

pClsID
クラス ID を取得する変数のポインタ。

戻り値

S_OK か E_POINTER を返す。

CBaseMediaFilter::GetState

CBaseMediaFilter クラス

オブジェクトがアクティブかどうか(実行中か、停止か、ポーズか)を取得する。 IMediaFilter::GetState メソッドの実装。

構文

HRESULT GetState(
    DWORD dwMilliSecsTimeout,
    FILTER_STATE *State
);

パラメータ

dwMilliSecsTimeout
タイムアウト時間間隔、ミリ秒
State
オブジェクトの状態を示す FILTER_STATE 列挙型のメンバを取得する変数のポインタ。

戻り値

S_OK か E_POINTER を返す。

注意

基底クラスでは、すべての状態移行は同期され、dwMilliSecsTimeout パラメータは無視される。派生クラスが状態移行の同期を実行するなら、このメソッドをオーバーライドし、dwMilliSecsTimeout ミリ秒のタイムアウトで、状態移行を待つべきだ。

CBaseMediaFilter::GetSyncSource

CBaseMediaFilter クラス

オブジェクトが使用中の基準クロックを取得。IMediaFilter::GetSyncSource メソッドの実装。

構文

HRESULT GetSyncSource(
    IReferenceClock **pClock
);

パラメータ

pClock
クロックの IReferenceClock インターフェイスへのポインタを取得する変数のアドレス。

戻り値

S_OK か E_POINTER を返す。

注意

オブジェクトが基準クロックを使用していないなら、*pClock を NULL に設定する。メソッドが戻ったとき、*pClock が NULL 以外なら、IReferenceClock インターフェイスは参照カウントを残している。解放時には注意が必要である。

CBaseMediaFilter::IsActive

CBaseMediaFilter クラス

オブジェクトがアクティブかどうか(実行中かポーズか)確認する。

構文

BOOL IsActive(void);

戻り値

オブジェクトが実行中かポーズであれば、TRUE を返す。停止中であれば FALSE を返す。

CBaseMediaFilter::Pause

CBaseMediaFilter クラス

オブジェクトをポーズする。IMediaFilter::Pause メソッドの実装。

構文

HRESULT Pause(void);

戻り値

S_OK を返す。

注意

基底クラスでは、このメソッドは m_State メンバ変数を State_Paused に設定するが、それ以外は何もしない。

CBaseMediaFilter::Run

CBaseMediaFilter クラス

オブジェクトを実行する。IMediaFilter::Run メソッドの実装。

構文

HRESULT Run(
    REFERENCE_TIME tStart
);

パラメータ

tStart
ストリーム タイム 0 に対応した基準タイム。

戻り値

S_OK を返す。

注意

オブジェクトが停止していれば、このメソッドは CBaseMediaFilter::Pause メソッドを呼び出しオブジェクトをポーズする。次に m_State メンバ変数を State_Running に設定する。

ストリーム タイムは現在の基準タイム 引く tStart で計算される。タイム スタンプ ゼロのメディア サンプルは tStart タイムにレンダリングされるはずである。

CBaseMediaFilter::SetSyncSource

CBaseMediaFilter クラス

オブジェクトの基準クロックを設定する。IMediaFilter::SetSyncSource メソッドの実装。

構文

HRESULT SetSyncSource(
    IReferenceClock *pClock
);

パラメータ

pClock
クロックの IReferenceClock インターフェイスへのポインタ、あるいは NULL 。

戻り値

S_OK を返す。

CBaseMediaFilter::Stop

CBaseMediaFilter クラス

オブジェクトを停止する。IMediaFilter::Stop メソッドの実装。

構文

HRESULT Stop(void);

戻り値

S_OK を返す。

注意

基底クラスでは、このメソッドは m_State メンバ変数を State_Stopped に設定するが、それ以外は何もしない。

CBaseMediaFilter::StreamTime

CBaseMediaFilter クラス

現在のストリーム タイムを取得。

構文

virtual HRESULT StreamTime(
    CRefTime& rtStream
);

パラメータ

rtStream
現在のストリーム タイムを取得する CRefTime オブジェクトへの参照。

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_OK成功。
VFW_E_NO_CLOCK有効な基準クロックがない。

注意

ストリーム タイムは(基準クロックで与えられる)現在の基準タイム マイナス (m_tStartで与えれる)開始タイムによって定義される。メディア サンプルのタイム スタンプはレンダリングされるべきストリーム タイムを指定する。現在のストリーム タイムより小さなタイム スタンプを持つサンプルがまだレンダリングされないなら、それは遅れている。