【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

PCカメラからのキャプチャ - C++&DirectShow

目次

C++&DirectShow?

はじめに(読み飛ばし可)

ちょっと前にPCカメラ――WEB越しのチャットに使うことが多いためか、WEBカメラとも言うらしい――を買ってきた。 別に誰かとビデオチャットするわけではない。単にプログラムを書いて、弄って遊ぶためである。

WEB上で拾ったサンプルを動かすために色々試行錯誤しているときである。 某巨大掲示板で偶然同じようなことをやっている人に出合った。

私は動揺した。1匹見つけたら100匹いると思え!と常々言い聞かせられて育った私である。 この広い日本に、単に弄って遊ぶためだけにPCカメラを購入するような人間が100人以上存在していようとは、全く想定外であった。 100人以上であるからして、イナバ物置が耐えられない重量となっている可能性も無きにしも非ずである。

きっと、その100人以上の人間が、WEB上の資料の少なさに悲鳴を上げながらばたばたと倒れていくのだろう。 ばたばたと倒れるついでに、PCカメラを押入れの片隅に放り投げるのだろう。PCカメラはそこで黴などの菌類に侵蝕されて寿命を終えるのだろう。

私はそんなのは嫌だ!と思った。だからこのページは、私の我侭に由来する世界への反逆である。

まあ要するに、このページがあなたのお役に立てばいいのですが。

言語とサンプル

WEB上ではC++で書かれたサンプルが多い。C++で書かれたサンプルの中では、DirectShow?を利用したサンプルが多い。

具体的には、DirectShow?を使った、ビデオデバイスからのキャプチャ 最も簡単版(リンクを参照)がとてもとても参考になる。 ここでは、それをビルドする方法を示す。

また、DirectXそのものにもサンプルは付属している。

用意するもの

遊びに払う金は無い。というわけでフリーであることを最優先する。それが私の矜持である。 ライブラリが巨大(従量制のネット環境だと痛い)なのは諦めるとして、OSとPCカメラ以外はタダで揃うのは歓喜の極みだ。

なに?PCカメラもタダで揃えたい? 知り合いの押入れの片隅にPCカメラが無いか聞いて回る、というのは一つの手だろう。類は友を呼ぶともいうし。

トリビア

インストール

インストールの順番は別にどうでもいい。ただし、DirectX 9.0 SDK ExtrasだけはデフォルトでTempフォルダにExtrasディレクトリが作られるだけなので、 そのままではうっかりディスクのクリーンアップでもろともに削除されてしまう。それは困る。

展開が終わったら、Extrasフォルダは C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005) の下などに移動させよう。

ビルド用バッチファイルの例(build.bat)

 @echo off
 set BACKUP_PATH=%PATH%
 set BACKUP_INCLUDE=%INCLUDE%
 set BACKUP_LIB=%LIB%
 set PATH=C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\BIN;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin\prerelease;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\bin;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;%PATH%;
 set INCLUDE="C:\Program Files\Microsoft SDK\include";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\ATLMFC\INCLUDE";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\INCLUDE";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\include\prerelease";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\include";"C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include";"C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Include";"C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Extras\DirectShow\Include";%INCLUDE%
 set LIB="C:\Program Files\Microsoft SDK\lib";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\ATLMFC\LIB";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\LIB";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\lib\prerelease";"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\lib";"C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\lib";"C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Lib";"C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Extras\DirectShow\Lib";"C:\Program Files\Microsoft.NET\SDK\v1.1\Lib";%LIB%
 set SRC=*.cpp
 set OBJ=*.obj
 set DEFAULT_LIB=
 set DEFAULT_LIB=/DEFAULTLIB:"C:\Program Files\Microsoft SDK\Lib\User32.Lib" %DEFAULT_LIB%
 set DEFAULT_LIB=/DEFAULTLIB:"C:\Program Files\Microsoft SDK\Lib\Gdi32.Lib" %DEFAULT_LIB%
 set DEFAULT_LIB=/DEFAULTLIB:"C:\Program Files\Microsoft SDK\Lib\Ole32.Lib" %DEFAULT_LIB%
 set DEFAULT_LIB=/DEFAULTLIB:"C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Extras\DirectShow\Lib\x86\strmiids.lib" %DEFAULT_LIB%
 set LIBPATH=
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft SDK\lib" %LIBPATH%
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\LIB" %LIBPATH%
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\ATLMFC\LIB" %LIBPATH%
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\lib" %LIBPATH%
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\PlatformSDK\lib\prerelease" %LIBPATH%
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\lib" %LIBPATH%
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Lib" %LIBPATH%
 set LIBPATH=/LIBPATH:"C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Extras\DirectShow\Lib" %LIBPATH%
 
 echo BUILD START!
 
 rem コンパイル
 cl.exe /c /nologo %SRC%
 rem リンク
 link.exe %DEFAULT_LIB% %LIBPATH% /nologo %OBJ%
 
 echo BUILD COMPLETE!
 
 set DEFAULT_LIB=
 set LIBPATH=
 set SRC=
 set OBJ=
 set PATH=%BACKUP_PATH%
 set INCLUDE=%BACKUP_INCLUDE%
 set LIB=%BACKUP_LIB%
 set BACKUP_PATH=
 set BACKUP_INCLUDE=
 set BACKUP_LIB=

使い方

 C:\project\CaptureFromPCCamera>build.bat
 BUILD START!
 cap10.cpp
 BUILD COMPLETE!

リンク