はじめに
この記事では、DirectShowを利用して、AVIやMPEG、Windows Media Videoなどのムービーファイルを、Direct3Dのテクスチャに書き込む方法を解説します。
一般にDirect3Dのテクスチャは、ビットマップやJPEGなどの静止画像から作成されるのですが、この記事のサンプルではそれを動画で行います。
本記事の実装方法は、Microsoft DirectX 9.0 SDKの2004年夏版(Summer 2004)以前に収録されていたサンプルをベースにして、汎用性を高めるためにサポートするファイル形式を増やして改良をしたものです。
なお、本サンプルがサポートするムービーファイルの形式は、下記のとおりです。サウンドの再生もサポートしてます。
- AVI形式(DivXなどはコーデックがインストールされていれば可能です)
- MPEG1形式
- MPEG2形式(ただし、コーデックがインストールされている必要があります)
- WMV形式(再生するファイルに対応したバージョンのWindows Media Playerがインストールされている必要があります)
対象読者
Visual Studio .NET 2003(言語は、C++)を利用して、Direct3Dの基本的なことが理解できるプログラマを対象にしています。難易度は、中級から上級になると思います。
必要な環境
- Visual Studio .NET 2003
- DirectX SDK(DirectX SDK 9.0 Summer 2004以降)
- Platform SDK(Windows Server 2003 SP1 Platform SDK)
準備
この記事ではDirectXを使うので、そのSDK(ソフトウェア開発キット)を用意する必要があります。SDKは、Microsoftの公式ページからダウンロードできます。セットアップはインストーラが行ってくれますので、特別難しいことはありません。
その他に、DirectShowの準備があります。このDirectShowは、Windows上でムービーファイルやカメラなどの制御を行うAPIで、元々はDirectXの1部だったのですが、2005年2月版のDirectX SDK以降、WindowsのPlatform SDKに付属することになりました。
まず、下記のページからPlatform SDKをダウンロードします。
DirectShowに関するファイルは、デフォルトの設定の場合、「C:\Program Files\Microsoft Platform SDK\Samples\Multimedia\DirectShow」にインストールされます。
インストールが終ったら、Platform SDKをインストールしたルートのフォルダで「SetEnv.Cmd」というファイルを実行し、Platform SDKの環境設定を行います。DirectShowの基本ライブラリにはデバッグ版とリテール版があるので、それぞれ下記のように引数を変更し、環境を切り替えてmakeする必要があります。
C:\Program Files\Microsoft Platform SDK>SetEnv.Cmd /XP32 /DEBUG
C:\Program Files\Microsoft Platform SDK>SetEnv.Cmd /XP32 /RETAIL
なお引数の/XP32
は、32bit版のWindows XPを対象にする場合の引数です。それ以外の環境の引数に関しては、「SetEnv.Cmd」のオプションを参照してください。
Platform SDKの環境設定が終わったら、続いて、DirectShowの開発に必要な基本ライブラリのmakeを行います。これは、下記のようにコマンドプロンプトで実行します。
C:\Program Files\Microsoft Platform SDK\Samples\Multimedia \DirectShow\BaseClasses>nmake
この作業はデバッグ環境とリテール環境で、それぞれ行ってください。メイクが成功すると、デバッグ環境なら「XP32_DEBUG」フォルダの中に「strmbasd.lib」ができ、リテール環境なら「XP32_RETAIL」の中に「strmbase.lib」ができていると思います。
ここで作成したライブラリと、「C:\Program Files\Microsoft Platform SDK\Samples\Multimedia\DirectShow\BaseClasses」のディレクトリ内のインクルードファイルは、開発上必要になりますのでパスを通しておいてください。
以上で、DirectXとDirectShowで開発する準備ができました。最後に、ビルド時に必要な下記のライブラリを、あらかじめリンクしておいてください。
d3dxof.lib | dxguid.lib | d3dx9d.lib | d3d9.lib | winmm.lib | strmbasd.lib |
d3dxof.lib | dxguid.lib | d3dx9d.lib | d3d9.lib | winmm.lib | strmbase.lib |
なお、本記事のサンプルの実行ファイルを、DirectX 9.0cのSDKをインストールしていない環境で起動するためには、DirectX 9.0c再頒布パッケージが必要になります。