サンプルフィルタBaseClassesのコンパイル
Directshowとは、ビデオストリームを音声ストリームを制御するモジュールの集合である。ファイルの読み書きから、デコード、エンコード、レンダリングまで、全ての処理はそれら個々の機能を持ったモジュールを組み合わせることで行う。このモジュールをDirectshowではフィルタ(filter)と呼ぶ。フィルタはDirectshowがデフォルトで持っているものに加え、各種ベンダーが独自のフィルタを作成しレジストリに登録することで追加することが出来る。自分の行いたい処理に即したフィルタが無い場合は自らフィルタを作成しなければならない。今回の目的は複数のビットマップを読み込み動画ファイルを作ることである。一枚のビットマップを読み込むソースフィルタとして「Generate Still Video」が存在するが、繋がったファイルとして読み込ませることは出来ない。よってビットマップを連続した映像として読み込むソースフィルタを作ることを目指す。

開発環境:WindowsXP SP2, Visual Studio C++ 2008 Express Edition, Windows SDK v6.0a


まずはフィルタの継承元となるBaseClassesをコンパイルすることを目指す。directshowのサンプルはPlasformSDK v6.0に付属だと紹介されているが、VS2008EEのv6.0aには付属していない。。。私の環境だけかな?よって、まずはサンプルを手に入れる。

1. MSからPlasformSDK for Windows server 2003 R2を手に入れる。

2. すでにWindowsSDKv6.0aが入っているので、directshow部分だけをインスコ。インスコ時にカスタムを選べば可能。

今度は継承元となるフィルタのサンプルであるBaseClassesをコンパイルする。

3. 好きな場所にディレクトリを作る。

4. C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Samples\Multimedia\DirectShow\BaseClasses以下のファイルをコピー

5. VS2008EEで空のプロジェクトを作る(新規作成→プロジェクト→全般→空のプロジェクト)

6. 4.でコピーしたファイルを全て追加

7. 出力ファイルをスタティックライブラリに(プロジェクト→プロパティー→構成のプロパティー→構成の種類)

8. ヘッダのインクルードディレクトリにカレントディレクトリを追加(プロジェクト→プロパティー→構成のプロパティー→C/C++→追加のインクルードディレクトリ,に「.\」を追加)

8番の設定はサンプルソース内のインクルードの記述が
#include <streams.h>

というように<~~>で指定してあるため。ここまで来たらおもむろに

9. ビルド

これで継承元となるフィルタが出来たはず。今回はここまで。



Atsushi M. Ito web