これまでの記事

Visual Studio 2017 で DirectShow 開発環境を準備する

DirectShow フィルタとフィルタグラフ

DirectShow の基本的な使い方は、DirectShow フィルタと呼ばれる部品を組み合わせ、フィルタグラフを構築することです。この時、組み合わせるフィルタによって実現できる機能が変わってきます。

余談ですが、世の中に存在するフィルタの大部分は 32bit で書かれている為、DirectShow アプリケーションは32bit 環境で開発する方が便利かもしれません。もちろん、64bit フィルタしか使用しないなら、あえて 32bit アプリにする必要はないです。

次は大まかにフィルタのカテゴリを紹介します。

ソースフィルタ

フィルタグラフにデータを流し込むフィルタです。こうしたデータの流れをストリームと呼びます。
動画ファイルや音声ファイルを読み取るファイルソースフィルタ、カメラやマイクから映像等をキャプチャするキャプチャフィルタが主となります。

変換フィルタ

ストリームを変換するフィルタです。ビデオ(オーディオ)ストリームを様々な動画形式に圧縮するコンプレッサフィルタや、逆に圧縮されたビデオ(オーディオ)ストリームを圧縮されていない状態に戻すデコンプレッサフィルタ、画像のサイズを変更したりエフェクトをかけるフィルタ等が存在します。変換フィルタはフィルタグラフの開始や終了には位置せず、必ず中間フィルタとなります。

スプリッタフィルタ

動画ファイルから読み取ったバイトストリームをビデオストリームとオーディオストリームに分割するフィルタです。スプリッタではありませんが、入力ストリームを複数ストリームに複製するフィルタも存在します。

Muxフィルタ

ビデオストリームとオーディオストリームを1つのバイトストリームに統合するフィルタです。

レンダラフィルタ

ビデオストリームやオーディオストリームを再生するフィルタです。

ファイルライタフィルタ

ストリームをファイルに書き込むフィルタです。

典型的なフィルタグラフ

ありがちなフィルタグラフの構成を図示します。

ビデオキャプチャ(再生)

ds1.jpg
図の通り、フィルタによって前後に接続できるフィルタの数が異なります。ビデオキャプチャデバイスは製品によって、ビデオとオーディオの2つのストリームを持つ単一のキャプチャフィルタだったり、ビデオとオーディオが独立したキャプチャフィルタとなっていたりします。

ビデオキャプチャ(録画)

ds2.jpg
録画する際はストレージへの書き込み速度とデータサイズの関係から、圧縮(エンコード)しながら書き込んだ方が安定することがあります。

ビデオキャプチャ(再生しながら録画)

ds3.jpg
この形がビデオキャプチャアプリでは一番ありがちではないでしょうか。

動画ファイル再生

ds4.jpg
実際は動画ファイルに対応したデコンプレッサを適切に選択する必要があります。

動画ファイル変換

ds5.jpg
コンプレッサによってはデコンプレッサを挟まず、直接異なる形式に変換できるものも存在します。

最初のフィルタグラフ

DirectShow アプリケーションの勉強をする時、最も簡単なフィルタグラフの構築から始めることにあまり異論は無いかと思います。私としては、ビデオキャプチャのフィルタグラフがシンプルで分かりやすいのではないかと考えています。

そういうわけで次回は、前回作成した MFC プロジェクトをベースに、キャプチャデバイスの映像を再生するフィルタグラフを構築していきたいと思います。動作を見る為に何らかのキャプチャデバイスがあると良いですね。お安いWEBカメラなんかでも構わないです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.