VMR9Allocator 作成

Platform SDK ( download ) にある VMR9Allocator というサンプルコード利用に関するメモ。

どこにある?

ここ。

(InstallDir?)\Samples\Multimedia\DirectShow\VMR9\VMR9Allocator

コンパイルしてみる

makefile があるので、VS.NET ツールのコマンドプロンプトで、

C:\> cd (InstallDir)\Samples\Multimedia\DirectShow\VMR9\VMR9Allocator
C:\> (InstallDir)\Samples\Multimedia\DirectShow\VMR9\VMR9Allocator nmake

としてメイクしちゃって良いかも。

ここはソリューションとしてつくりたいので、プロジェクト新規作成。

「空のプロジェクト」を作って、そこにサンプルのソースファイル

*.cpp
*.h
*.rc

を全部追加。

プロジェクトのプロパティで、追加のインクルードディレクトリに、

..\inc
..\..\BaseClasses

を追加。

あと、最新の PlatformSDK の Include ディレクトリ(.h がある所)も追加しておく。

とりあえず次のファイルをインクルード。

#include <objbase.h>

BaseClasses? の strmbasd.lib を作成する。

BaseClasses? ディレクトリの下に dsw があれば、それを開いてビルド。 makefile があれば、nmake でメイク。

VS.NET ツールのコマンドプロンプトで、

C:\> cd (InstallDir)\Samples\Multimedia\DirectShow\BaseClasses
C:\(InstallDir)\Samples\Multimedia\DirectShow\BaseClasses\> nmake

nmake の場合は、Debug というディレクトリを作って、 その中に出来上がった lib をコピーしておく。

リンク(ビルド)してみる

リンカの設定で、追加の依存ファイルに次のファイルを追加する。

d3d9.lib
d3dx9.lib
winmm.lib
odbc32.lib
odbccp32.lib
..\..\BaseClasses\Debug\strmbasd.lib

※commctrl.h をインクルードする場合は Comctl32.lib も追加。
※というか、インクルードするものに応じて lib も追加。

プリプロセッサの設定に、次の define を追加。

#define	_WINDOWS
#define	_WIN32_WINNT=0x400
//#define _WIN32_DCOM

2番目と3番目は同じ意味かも(なので3番目はいらないかも)。

CoInitializeEx?()を呼び出しているので、上記スイッチが必要っぽい。
※プロジェクトの設定で "_WINDOWS;_WIN32_WINNT=0x400" と入力すればOK。

ここまでで、えいやっとビルド実行。

多分 LNK2001(外部参照が未解決)というエラーが出るので、 Allocator.h の #pragma once の下あたりに次のコードを追加。

#pragma comment(lib, "uuid")
#pragma comment(lib, "dxguid")
#pragma comment(lib, "strmiids")
#pragma comment(lib, "amstrmid")
#pragma comment(lib, "quartz")
#pragma comment(lib, "msacm32")
#pragma comment(lib, "winmm")
#pragma comment(lib, "olepro32")

※amstrmid だけで良いかも。

これでビルド。これで多分通る。

追記(2006/12)

どうも新しいバージョンのSDKからDirectShowのサンプルがなくなってるっぽい(2006 Octover)。2004 Summer バージョンであれば、次の場所に残っている。

(InstallDir?)\Samples\C++\DirectShow\

2006バージョンにもC++ディレクトリはあるが、比較してみるとDirectShowのディレクトリが消えている。DirectShow自体がなくなったなんて話は聞かないし。なぜDirectShowのソースをごっそり消してしまったのか。

いずれにしろ、上記サンプルがなくなってるということは、BaseClasses?もないということである。BaseClasses?の中には、DirectShowを開発するのに有用なライブラリがごっそり入っていて、かつ、今ネット上に出回っているDirectShow関連のプログラムは、これを使用することを前提としているものが結構多いので、ソースで提供されているプログラムはコンパイルができないという事態になる。困った困った。。。

とりあえず 2004 Summer バージョンの BaseClasses? を以下の場所に置いておく。

と思ってたら、なんと、DirectShowは、今はDirectX SDKではなく、Platform SDKにつくようになったらしい。知らないよそんなのー(詳しくは DirectShow で)。


MLEXP. Wiki


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-15 (土) 12:07:52 (3298d)