複数の出力ピンを持つDirectShowフィルタの作成方法
syu5 [著] 2008/10/27 14:00

サンプルコード 6.49 KB

 ステレオオーディオをL/Rチャンネルで分離するフィルタの作成を通じて、1つの入力ピンと2つの出力ピンを持つDirectShowフィルタの作成方法を解説します。前編ではアップストリームフィルタに接続するところまで作成します。

1 2 3 →

はじめに

 DirectShowフィルタには、さまざまな種類があります。その中で比較的実装が難しいのが、複数の入力ピンや出力ピンを持つフィルタです。このようなフィルタはDirectShow基底クラスライブラリにおいて、CSourceCTramsformFilterのように直接サポートするクラスが用意されていません。そのため、それらの基底クラスであるCBaseFilterから派生して作る必要があります。

 本稿では、1つのステレオオーディオストリームから、L/Rチャンネルで分離した2つのモノラルオーディオストリームを出力するフィルタ(図1)の作成を通じて、1つの入力ピンと2つの出力ピンを持つフィルタをCBaseFilterから派生して作成する方法を解説します。

図1. フィルタの動作イメージ
図1. フィルタの動作イメージ

対象読者

  • C++言語が分かる方
  • DirectShowアプリケーションを作成したことのある方
  • DirectShowフィルタの作成に興味のある方

必要な環境

 Visual Studioは過去のバージョンでも良いですが、添付のソースコードは2008でコンパイルを確認しています。

フィルタの仕様

 今回作成するフィルタの機能は「はじめに」で述べました。それを踏まえてフィルタとしての仕様をまとめます(表1)。

表1.フィルタの仕様
種類スプリッタフィルタ
名前Audio Channel Splitter Filter
入力ピン数1
出力ピン数2
メジャータイプMEDIATYPE_Audio
サブタイプMEDIASUBTYPE_PCM
フォーマットタイプFORMAT_WaveFormatEx

 メジャータイプ、サブタイプおよびフォーマットタイプは、入力ピンと出力ピンで共通です。オーディオフォーマットは無圧縮PCMのみとします。チャンネル数は入力ピンでは2、出力ピンでは1とします。

 フィルタを実装するときは、フィルタそのものを表すクラスの他に入力ピンと出力ピンを表すクラスを実装する必要があります。これらのクラス関係を整理しておきます(表2、図2)。

表2.実装するクラス
役割クラス名派生元
フィルタクラスAudioChSplitterFilterCBaseFilter
入力ピンクラスAudioInPinCBaseInputPin
出力ピンクラスAudioOutPinCBaseOutputPin
図2. クラス図
図2. クラス図

1 2 3
→
INDEX
オーディオチャンネルを分離する DirectShowフィルタの作成 - 前編
Page1
はじめに
対象読者
必要な環境
フィルタの仕様
フィルタクラスの実装
入力ピンクラスの実装
動作確認
前編のまとめ
プロフィール
syu5

Microsoft MVP for DirectShow/Media Foundation 2007 Oct - 2011 Sept.

ブログ : ImageryBlog

Twitter : https://twitter.com/syu5


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト