SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

DirectShowフィルタの作成

オーディオチャンネルを結合する
DirectShowフィルタの作成

複数の入力ピンを持つDirectShowフィルタの作成方法

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (10.1 KB)

通知処理の実装

 今回はストリーム終了通知のみ実装します。ストリーム終了通知を受け取るとAudioInPin::EndOfStreamが呼ばれます。ここでm_EOStrueに設定します。「サンプルの受信」で説明したように、trueに設定すると、それ以降のサンプルの受信を拒否します。2つの入力ピンが通知を受け取ったらダウンストリームフィルタへ通知を転送します。AudioInPin::Activefalseに設定します。

HRESULT AudioInPin::Active(void) {
    m_EOS=false;
    return __super::Active();
}

STDMETHODIMP AudioInPin::EndOfStream(void) {
    CAutoLock my_lock(m_pLock);
    m_EOS=true;
    HRESULT hr=CheckStreaming();
    if(hr!=S_OK) {
        return hr;
    }
    AudioChMuxerFilter *filter=(AudioChMuxerFilter*)m_pFilter;
    // 2つの入力ピンとも通知を受け取っている?
    if (filter->GetInPin(0)->GetEOS() &&
        filter->GetInPin(1)->GetEOS())
    {
        AudioOutPin *out=filter->GetOutPin();
        out->DeliverEndOfStream();
    }
    return S_OK;
}

 今回はフラッシュ通知と新セグメント通知の処理を実装していないのでシークはできません。結合処理を行うフィルタは、主にAVIなど何らかのファイルを書き出すときに使われます。この場合、ユーザーはシーク操作を行いませんから、実装不要です。もしシークをサポートする必要がある場合は、2つの入力ピンから異なるタイミングで通知が来ることを考慮して実装する必要があります。

動作確認

 GraphEditを使って動作確認を行いましょう。あらかじめ、周波数、サンプルあたりのビット数、記録されているサンプル数が全て同じモノラルのWAVファイルを用意し、フィルタに入力します(図5)。

図5. 動作結果
図5. 動作結果

まとめ

 今回は2つのモノラルオーディオストリームを結合するフィルタを作成しました。 これでDirectShowフィルタの中では実装が難しい分離、結合を行うフィルタが作れるようになったと思います。

 入力ピン、出力ピンが複数あるフィルタでは、ストリーミングスレッドがフィルタ内部に複数存在することを常に意識する必要があります。また、各種通知処理をどのように処理するのか、仕様をきちんと決めておくことが大切です。

参考文献

  1. MSDN『DirectShow』
  2. Windows SDK のサンプルコード

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
DirectShowフィルタの作成連載記事一覧

もっと読む

この記事の著者

syu5()

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3386 2009/01/20 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング