IMediaControl::GetState
GetState メソッドは、フィルタ グラフの状態 (ポーズ、実行、または停止) を取得する。
状態は必ずしも同期して移行するとは限らない。したがって、このメソッドを呼び出したとき、フィルタ グラフは新しい状態に移行している途中かもしれない。その場合、移行が完了するか、または指定されたタイムアウト時間が過ぎるまで、メソッドは動作を停止する。
構文
HRESULT GetState(
LONG msTimeout,
OAFilterState *pfs
);
パラメータ
msTimeout
[in] タイムアウトの時間幅 (ミリ秒単位)。またはタイムアウト時間が無制限であることを指定する INFINITE。
pfs
[out] FILTER_STATE 列挙のメンバを受け取る変数へのポインタ。
戻り値
HRESULT 値を返す。可能な値は次のとおりである。
値 | 説明 |
S_OK | 成功。 |
VFW_S_STATE_INTERMEDIATE | フィルタ グラフは取得された状態に移行中。 |
VFW_S_CANT_CUE | フィルタ グラフはポーズしているが、データをキューに入れることができない。 |
E_FAIL | 失敗。 |
注意
アプリケーションはこのメソッドを使って IMediaControl::Run 呼び出し後再生が開始されたかどうかを確かめることができる。一般的に、アプリケーションはフィルタ グラフをどの状態にしたかをトラックするメカニズムを自分自身で持つべきである。通常アプリケーションは現在の状態を使って、どのユーザー インターフェイス コントロールを使用可能にするかを決定する。たとえば、グラフが実行状態に移行すると、アプリケーションは [再生] ボタンを使用不可にし、[停止] ボタンと [ポーズ] ボタンを使用可能にする。
フィルタ グラフが新しい状態に移行中の場合は、以前の状態ではなく新しい状態を返す。
メソッドが動作を停止しているときに、別のスレッドから呼び出して状態を変更すると、このメソッドはエラーを返す。
GetState での待機中にスレッドはメッセージを処理できないため、タイムアウト値への INFINITE の指定は避けること。Windows メッセージを処理するスレッドから GetState を呼び出す場合は、ユーザー入力への応答に支障がないように、できるだけ短い待機時間を指定すること。特に、ネットワークやインターネット経由でソースがストリームされる場合は、状態の移行が完了するまでに時間がかかるため、注意が必要である。
フィルタ グラフの状態の詳細については、「フィルタ グラフのデータ フロー」を参照すること。
参照