※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Directshowとは?

DirectXの機能の一部らしい。
動画、音声を取り扱うよう

この考え方がまためんどい。
簡単に書くと「フィルタ」というオブジェクト単位でものを考え、
たとえば、カメラ自体も「フィルタ」、再生(出力)部も「フィルタ」みたい。
それをつなぐとか…よくわからん


やることは以下。
1)フィルタを管理する「グラフ」というものを作る
2)「グラフ」に使用できるカメラを「入力フィルタ」として登録する
3)「入力フィルタ」の使用できるピン(フィルタからの出力)を探す
4)出力フィルタに3)のピンを接続する
5)サンプルグラバを入力フィルタと出力フィルタの間に入れる


準備編

VB6.0において使用するには、設定が必要。
[プロジェクト]-[参照設定]から
”Active movie control type library” を選択する


カメラのオプションパラメータの取得

IAMCameraControlというのがそれらしいが、どうにもVBでの制御方法がわからない

↓をみると、IAMCameraControlはいない!
http://msdn.microsoft.com/ja-jp/library/cc371137.aspx

つまり…VBでは無理?VCで最初からやればよかった…

…と思いきや

カメラのプロパティをみる

UVCカメラのプロパティを呼び出すにはVB6だといろいろ面倒なよう
だが、DLLとしてまとめてくれている偉人発見。
しかもsampleそのまま使えそう
http://www.geocities.co.jp/SiliconValley/7406/tips/dshow/index.html

今回は、これを使用してカメラプロパティを設定するようにした。

解像度などは、設定を読み込み、再設定することが可能(DLLのAPI使用)
なので、解像度を最大にするよう使用。


マイクロソフトによるVBでのDirectshowの使い方


よくわからん用語


タイプライブラリとは

タイプライブラリとは、VBからCOMオブジェクトへアクセスするための「インターフェイス」が格納されているライブラリ。
「インターフェイス」とは、『メソッドやプロパティの宣言の集まり』の事を指します。これはある意味では「クラス」に似ていますが、クラスとは異なり、プログラムコードの「実装」がありません。あくまで、メソッドの定義だけなのです。
しかし、VB6では、インターフェイスを定義することが出来ないため、それらを「タイプライブラリ」という物にしておき、それを通してアクセスする事になるのです。使いたいCOMの「タイプライブラリ」はVB6統合環境のメニューのプロジェクトの参照設定で指定できます。
つまり、タイプ ライブラリは、COMオブジェクトで公開されるプロパティおよびメソッド等の型が記述され、COMオブジェクトとスクリプト言語(VB)との間に橋渡しを提供します。

VBでカメラオプションをみるためには本来これを設定しなければならなかったが、DLLとして提供されていたのでそれを使用した。


サンプルグラバとは

「サンプル グラバ フィルタは変換フィルタで、このフィルタを使ってストリームがフィルタグラフを通過するときにストリームからメディア サンプルを捕捉できる」by msdn

ようするにカメラフィルタから、別フィルタへつないでる間に入れることにより、そのイメージを取り込むことができるみたい。
静止画取得に使用する機能のようだ

取得形式はYUV(今回使用したのはYUY2)、BMP32bitなど選択できる。
本当は入力フィルタから複数の出力ピンを接続するときは、分岐用フィルタを通すみたいだが、
今回は直列につないで動いた。

















先は長い… orz
|