* VMR9Allocator 作成 [#w36ec523] Platform SDK ( [[download:http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en]] ) にある VMR9Allocator というサンプルコード利用に関するメモ。 *** どこにある? [#adef9caa] ここ。 (InstallDir)\Samples\Multimedia\DirectShow\VMR9\VMR9Allocator *** コンパイルしてみる [#w1e68ab7] 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> //#include <comutil.h> //#include <comdef.h> //#include <windows.h> //#include <windowsx.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 をコピーしておく。 *** リンク(ビルド)してみる [#me74481e] リンカの設定で、追加の依存ファイルに次のファイルを追加する。 d3d9.lib d3dx9.lib winmm.lib odbc32.lib odbccp32.lib ..\..\BaseClasses\Debug\strmbasd.lib ※commctrl.h をインクルードする場合は Comctl32.lib も追加。&br; ※というか、インクルードするものに応じて lib も追加。&br; プリプロセッサの設定に、次の define を追加。 #define _WINDOWS #define _WIN32_WINNT=0x400 //#define _WIN32_DCOM 2番目と3番目は同じ意味かも(なので3番目はいらないかも)。 ※CoInitializeEx()を呼び出しているので、上記スイッチが必要っぽい。&br; ※プロジェクトの設定で "_WINDOWS;_WIN32_WINNT=0x400" と入力すればOK。&br; ここまでで、えいやっとビルド実行。 多分 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) [#m0dd22de] どうも新しいバージョンのSDKからDirectShowのサンプルがなくなってるっぽい(2006 Octover)。2004 Summer バージョンであれば、次の場所に残っている。 (InstallDir)\Samples\C++\DirectShow\ 2006バージョンにもC++ディレクトリはあるが、比較してみるとDirectShowのディレクトリが消えている。DirectShow自体がなくなったなんて話は聞かないし。なぜDirectShowのソースをごっそり消してしまったのか。 いずれにしろ、上記サンプルがなくなってるということは、BaseClassesもないということである。BaseClassesの中には、DirectShowを開発するのに有用なライブラリがごっそり入っていて、かつ、今ネット上に出回っているDirectShow関連のプログラムは、これを使用することを前提としているものが結構多いので、ソースで提供されているプログラムはコンパイルができないという事態になる。困った困った。。。 とりあえず 2004 Summer バージョンの BaseClasses を以下の場所に置いておく。 - [[DirectShow - BaseClasses:http://www.mlexp.com/bin/lib/baseclasses_2004s.zip]] (308KB) 最新版SDKに、これないよね?(誰かありか知ってたら教えてクダサイ。) と思ってたら、なんと、DirectShowは、今はDirectX SDKではなく、[[Platform SDK:http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en]]につくようになったらしい。知らないよそんなのー(詳しくは [[DirectShow]] で)。 ----- [[MLEXP. Wiki]]