C++でDirectShowを使うまでの道のり

実は結構簡単

Visual Studio 2005 のVC++でDirectShowを使うまでの備忘録。

ここは大変勉強になります!

The DirectShow Unraveled, DirectShow アプリケーション制作のために用意するツール
http://www.firefly-vj.net/imagery/?itemid=152


このエントリから同一カテゴリ内のたくさんのエントリが
宝です。お世話になりました!

インストール

インストールする必要のあるSDKは二つ。

順番はどうでもいい。WindowsSDKは

Windows Vista および .NET Framework 3.0 ランタイム
コンポーネントMicrosoft® Windows®
Software Development Kit

とか書いてあるけどXPだったりVS2005でも問題ない。
これらのSDKには、ライブラリとかヘッダファイルが入ってる。


ダウンロードの詳細 : Microsoft Windows SDK for Windows Vista
http://www.microsoft.com/downloads/details.aspx?FamilyID=7614fe22-8a64-4dfb-aa0c-db53035f40a0&DisplayLang=ja


Download details: DirectX SDK - (November 2008)
http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en


Momma's Wiki: Windows/VisualC/WindowsSDK - PlatformSDK->WindowsSDKらしい? ダウンロードページ...
http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/Windows/VisualC/WindowsSDK.html


Momma's Wiki: Windows/VisualC/DirectX/準備 - プログラミングの準備 以下の小細工で行なうファイルの編集は"管理者として実...
http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/Windows/VisualC/DirectX/%E6%BA%96%E5%82%99.html

インクルードディレクトリ・ライブラリディレクトリの指定

SDKをインストールしたディレクトリを教えてあげないと、
「こんなのしらねぇよ!」ってコンパイラが言い続ける。
自動的に設定するツールもあるらしいが、全くうまくいかなかったので、
手動で指定することをおすすめします。

# VS2005 [ツール] - [オプション] - [プロジェクトおよびソリューション]
# [VC++ディレクトリ] の [ディレクトリを表示するプロジェクト]

# [実行可能ファイル]
C:\Program Files\Microsoft SDKs\Windows\v6.0\bin

# [インクルードファイル]
C:\Program Files\Microsoft SDKs\Windows\v6.0\Include
C:\Program Files\Microsoft DirectX SDK (March 2008)\Include

# [ライブラリファイル]
C:\Program Files\Microsoft SDKs\Windows\v6.0\lib
C:\Program Files\Microsoft DirectX SDK (March 2008)\Lib\x86

あと、登録前に登録されている「PlatformSDK」的なディレクトリ
設定は全て削除。PlatformSDKのバージョンアップ版→WindowsSDK


ここまできたら、動くはず。
サンプルを動かしてみることをおすすめします。


DirectShow でビデオキャプチャ(後編) - 大阪府立大学 総合教育研究機構 第3教室 青木茂
http://www.las.osakafu-u.ac.jp/~aoki/cgi-bin/wiki.cgi?page=DirectShow+%A4%C7%A5%D3%A5%C7%A5%AA%A5%AD%A5%E3%A5%D7%A5%C1%A5%E3%28%B8%E5%CA%D4%29


DirectShow でビデオキャプチャ(前編) - 大阪府立大学 総合教育研究機構 第3教室 青木茂
http://www.las.osakafu-u.ac.jp/~aoki/cgi-bin/wiki.cgi?page=DirectShow+%A4%C7%A5%D3%A5%C7%A5%AA%A5%AD%A5%E3%A5%D7%A5%C1%A5%E3%28%C1%B0%CA%D4%29

個人的にはまったところ

  • [構成プロパティ] - [リンカ] - [入力] から[追加の依存ファイル] で strmiids.lib を追加
  • ソースファイルの拡張子はcpp。COMアーキテクチャオブジェクト指向
  • リテラル系はすべて「L」をつける。Lプレフィクスというらしい。文字コード的な問題
  • dxtrans.h でコンパイルエラーが起きるので、qedit.hをインクルードする際は下記のようにする
#pragma include_alias( "dxtrans.h", "qedit.h" )
#define __IDxtCompositor_INTERFACE_DEFINED__
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
#define __IDxtJpeg_INTERFACE_DEFINED__
#define __IDxtKey_INTERFACE_DEFINED__
#include 


関数 CoCreateInstance() を使用したコードでコンパイルエラーがでる−VC++−水無瀬の部屋
http://katsura-kotonoha.sakura.ne.jp/prog/vc/tip00004.shtml


charとUnicodeとワイド文字をごっちゃにしないために
http://marupeke296.com/CPP_charUnicodeWideChar.html


dxtrans.h missing in Microsoft DirectX SDK (November 2007)...
http://social.msdn.microsoft.com/forums/en-US/windowssdk/thread/ed097d2c-3d68-4f48-8448-277eaaf68252/

DirectShowプログラミングを理解するために

  • GraphEditで遊ぶ
# GraphEditのインストール先
C:\Program Files\Microsoft SDKs\Windows\6.1\bin\graphedt.ex


Geekなぺーじ : DirectShow GraphEdit
http://www.geekpage.jp/programming/directshow/graphedit.php


GraphEdit ガイド
http://homepage2.nifty.com/sophia0/freesoft/GraphEdit/


Windows Multimedia Hacks : GraphEdit の使い方 (1) - GraphEdit は Windows SDK に同梱されています。アプリのグラフを GraphEdit で確認しよう。
http://blogs.msdn.com/windows_multimedia_jp/archive/2009/03/24/graphedit-1-graphedit-windows-sdk-graphedit.aspx

  • COMについて勉強する

COM総合研究所
http://www5.plala.or.jp/atata/com/

OpenCVらへん

Momma's Wiki: Windows/DirectShow/OpenCVとの組合せ - キャプチャ部分のみDirectShowを使って動画像処理は使い慣れたOpe...
http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/Windows/DirectShow/OpenCV%E3%81%A8%E3%81%AE%E7%B5%84%E5%90%88%E3%81%9B.html


OpenCV/DirectShowでキャプチャした画像を表示する - 王様の箱庭 Wiki*
http://wikiwiki.jp/masayashi/?OpenCV%2FDirectShow%A4%C7%A5%AD%A5%E3%A5%D7%A5%C1%A5%E3%A4%B7%A4%BF%B2%E8%C1%FC%A4%F2%C9%BD%BC%A8%A4%B9%A4%EB


OpenCVで学ぶ画像認識:第2回 OpenCVを使ってみよう|gihyo.jp … 技術評論社
http://gihyo.jp/dev/feature/01/opencv/0002

Geekなみなさん

Geekなぺーじ : キャプチャデバイス+SampleGrabber(2)
http://www.geekpage.jp/programming/directshow/capture-samplegrabber-2.php


DirectShow Capture
http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html


黒研HowTo Wiki - (Windows) Directshowでキャプチャ<
http://kurolab.cntl.kyutech.ac.jp/wiki/farm/HowTo/?cmd=view&p=(Windows)+Directshow%A4%C7%A5%AD%A5%E3%A5%D7%A5%C1%A5%E3&key=DirectX


Visual C++ 2008 による DirectShow キャプチャプログラミング | Soaphacker
http://hisoap.jugem.jp/?eid=140