カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

IMediaControl

フィルタグラフの実行・停止のサービスを行います。

作成

    IMediaControl       *m_pMC;

    result = m_pGB->QueryInterface(IID_IMediaControl, (void **)&m_pMC);
    if (FAILED(result))         throw result;

リリース

    SAFE_RELEASE(m_pMC);

アプリケーション側で演奏状態を記録しておくと、ユーザーインターフェースのコントロールがし易くなります。例えばプレイボタンの2度押しの防止に現在の状態と比較します。

変数FILTER_STATEを用意し、State_Stoppedで初期化します。

    FILTER_STATE    m_filterState;
    m_filterState = State_Stopped;
FILTER_STATEは以下の様に定義されています。
enum _FilterState
{
    State_Stopped = 0,
    State_Paused,
    State_Running
} FILTER_STATE;

演奏の開始

    if (m_filterState == State_Running)
    {
        return S_FALSE;
    }
    result = m_pMC->Run();
    if (FAILED(result))     throw result;

    m_filterState = State_Running;
    return S_OK;

演奏の停止

    if (m_filterState == State_Stopped)
    {
        return S_FALSE;
    }
    result = m_pMC->Stop();
    if (FAILED(result))     throw result;

    m_filterState = State_Stopped;
    return S_OK;

演奏をポーズ

    if (m_filterState != State_Running)
    {
        return S_FALSE;
    }
    result = m_pMC->Pause();
    if (FAILED(result))     throw result;

    m_filterState = State_Paused;
    return S_OK;

演奏モード移行の確認

「演奏から停止へ」などフィルタグラフの状態を変えるとき、グラフマネージャーはグラフ内のフィルターに順次コマンドを送ります。状態変化は順に起こるためグラフ全体が落ち着くのに少し時間がかかります。

GetState()関数はグラフのモード移行が完了するまでプロセスをブロックします。この関数を実行することでモード移行を安全に行うことができます。

モード移行が完了するか第1引数で指定した待ち時間(mSec)が過ぎるまでプロセスはブロックされます。プロセスがブロックされている間はグラフ内イベントは処理されませんので、待ち時間をあまり大きくしないでください。特にINFINITEは避けてください。

    OAFilterState fs;
    result = m_pMC->GetState(500, &fs);
    if (FAILED(result))     throw result;

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ