:DirectShowでPC-SDVD/U2G

2010/09/16

DirectShow開発のテスト機材として手元にあるのが2つのUSB機器。

BUFFALOのPC-SDVD/U2G2010年07月12日購入)と
GroovyのGR-CAM130N22007年03月16日購入)。

PC-SDVD/U2GはソフトウェアエンコーダのUSB接続ビデオキャプチャ、
GR-CAM130N2は赤外線付きのUSB接続Webカメラだ。

PC-SDVD/U2Gは最近買ったものなので、いよいよソフト開発の
動作テストに使い出したのだが、早速問題発生(;´Д`)



PC-SDVD/U2G付属のソフトで使えるのはまあ当然として、
スカイプやDirectShowのカメラプログラムで有名なAMCapでも使えるのに
自作のソフトやGraphEditでは使えない…。

graphedit1
昔から使っているWebカメラのGR-CAM130N2をGraphEditで使うとこうなる。
もちろん正常に映像を映し出せる。Color Space Converterは自動挿入されるもの。

graphedit2
同じようにPC-SDVD/U2Gを使おうとすると、たぶんこんな感じなのだが
これで再生しようとすると「デバイスが接続されていません」というエラーになる。
自作のソフトで使おうとしても同じエラーになる。
ちなみにColor Space Converterは繋がらないので関係ない。





自作ソフトでは、IFilterGraph2インターフェイスのAddSourceFilterForMonikerで
キャプチャデバイスのフィルタを取得し、静止画像を取得するSampleGrabberフィルタや
映像解析に使う独自のフィルタなど、使用する全てのフィルタのピンを取得した後、
IGraphBuilderインターフェイスのConnectで各フィルタを順番に
OutPutPin → InputPinとつないで全体を構成している。

面倒だが手動でピン同士をつないでいるのは、
自動処理させると意図した順番に繋がらない場合があるからだ。

例えば、映像解析フィルタ→静止画像取得フィルタの順番だと、
静止画に解析結果のエフェクトが残るが、逆だと解析結果は残らない。


さて、手動ピン接続ではPC-SDVD/U2Gが使えないのは間違いない。
DirectShowLibNETのサンプルでも同じかどうか片っ端から動かして試したところ
同じように動かないものがほとんどだったが、動くものもあった。

違いを調べてみたところ、手動でピンを接続するのではなく
ICaptureGraphBuilder2インターフェイスのRenderStreamを使っていた。

RenderStreamはソースフィルタ → 中間フィルタ → 出力フィルタと指定して
3つのフィルタをつなぐものなので、使用の選択肢から外れていたものだ。
※ソース→映像解析→静止画取得→出力と最低でも4つのフィルタを使うため。

とりあえず自作ソフトの方を手動のピン接続ではなく
映像解析フィルタを外して3つのフィルタで
RenderStreamを使って試してみたところ、上手く映像が映るようになった。

映像解析フィルタが使えないなら意味ないじゃん、というオチになりそうだが
そちらについても解決できたので、その話については次回。


DirectShowプログラミングでPC-SDVD/U2Gを使うときはRenderStream(`・ω・´)

ID:4256

COMMENT


No comments yet
 

ADD COMMENT

TRACKBACK LIST


このエントリにトラックバックはありません

TRACKBACK URL


http://www.gan.st/gan/blog/action.php?action=plugin&name=TrackBack&tb_id=4256