フォト

Google AdSense


  • AdSense
無料ブログはココログ

« ついにシェーダモデル4.0のGPU? | トップページ | シンポジウム »

2006.02.21

キャプチャテクスチャのためのメモ

キャプチャテクスチャのカメラの解像度やフレームレートを変更するためのメモ。

下記の記事が非常に参考になる。

http://d.hatena.ne.jp/xabre/20050714

とりあえず、ためしに実装してみましたが見事成功。

テクスチャ解像度は変わるし、フレームレートも変えられた。これでダイアログを出す方向にしなくてよくなった(AMCapの【Option】→【Video Cpature Pin...】とかのように)。

上ので解説されているソースにはないけどVIDEOINFOHEADER構造体のAvgTimePerFrameをがフレームレート。1フレームの平均処理時間をナノ秒で指定。とりあえず、0をいれるとハードウェアが出せる最速でやってくれるっぽい。

« ついにシェーダモデル4.0のGPU? | トップページ | シンポジウム »

Programming」カテゴリの記事

コメント

を,頂き!

いつもチェックさせていただいております.

どうもっす。

解像度とかフレームレートって、ホワイトバランスや明るさなんかのパラメータと違って他のプログラムでダイアログで設定した値が保持されないので、わりと初期値がしょぼくてスペックを使い切れないことが大きくて困ってたんですよねぇ。

ダイアログを呼ぶて(AMCap.exeなんかでやってますが)もありますけど、実装がめんどいんですよねぇ。

と、言っても解像度は、キャプチャテクスチャの場合テクスチャサイズとかが変わっちゃうからなかなか動的な変更もめんどうですが。

あと、関係ないですが、今年はインタラクションに来ます?

役に立つサンプルの紹介ありがとうございます。
あれこれいじっていて、私の使ってるカメラが、ダイアログでは
30fps可能なように出ているのに25が限界らしいことに気づきました(笑)
どうりでデフォルトが25fpsなわけだ・・・

さて、紹介のサンプルだと、可能なキャプチャ形式のリストで
一番最後に来ているもののデータ形式やフレームレートその他は
デフォルト値のままで、解像度だけこちらの指定した値(例では640*480)
になるような気がします。
(フォーマットを列挙している内部で毎回SetFormat()してるので)

私の使ってるカメラだと、解像度で最大フレームレートが違ったり
(25fpsと20fps)、RGBとYUVが使えたりするので、これだと動作が
微妙ですね。
(ハードウェアエンコードも可能なデバイスだったりするとさらに
ややこしいことに)

使用可能なフォーマットを列挙しているところ(forループの内部)で、
StreamCapsの第三引数を調べて、目的の解像度、フォーマットでかつ
フレームレートが範囲内の時
IAMStreamConfig::SetFormat()してループを抜けるほうがきれいかも。

一度ダイアログを出してよいのなら、ダイアログで設定後の値を
IAMStreamConfig::GetFormat()で取り出したものて、ファイルにでも
保存しておいて、次回以降はIAMStreamConfig::SetFormat()で
使うとかする手もあるかな。

そういえば、ホワイトバランスとか色調整なんかはMSDNを読む範囲では
このインターフェースでは取得できなさそうですね。
pbFormatの後ろのほうに勝手に拡張してつけておいて
よい仕様だったりするのか、別のインターフェースなのか、
ドライバ独自実装なのか。
(後で覚えてたら試して見ます。)

コメントありがとうございます。

実装のタイミング
僕の方では適当なタイミングで実装してしまって動いてしまったのですが、確かにこれは結構気を遣うところではありますね。

> 解像度で最大フレームレートが違ったり
USB 1.1のカメラなんかではよくQVGAでは30フレーム出るけど、VGAでは15フレームしか出ないとかはよくありますね。

この辺は、カメラ自体のチップの性能だけでなく通信してるバスの帯域にも依存しそうな問題ではありますね。

> ホワイトバランスとか色調整
これに関しては、実はこのインターフェイスよりも先に実装をしたことがあるんですが

IAMVideoProcAmp

を使いますね。こっちは、今回のより実装上の制約が少ないので使うのは楽だったりします。

パラメータを1から入力せずにAMCap.exeとかのようにドライバ固有のダイアログを出したい場合には下記のページが参考になると思います。

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

これはそのまま動作すると思います(実際僕が使ってる現在のバージョンでは実装済み)。ただ、Direct3Dのフルスクリーンモードでは使いにくいのでIAMVideoProcAmpも使えるべきかもしれませんね。

本当は、これと同じダイアログで解像度やフレームレートは変えたいのですが、キャプチャテクスチャの場合、一度テクスチャを作ってしまうと途中でキャプチャする解像度を変えるのは結構難しいので上の記事で紹介した方法がいいんでしょうねぇ。

いきますよーん.

また,昼飯,食いに行きましょう.

IAMVideoProcAmp の紹介どうもです。
私のプログラムだと、キャプチャデバイス作成後に一度だけキャプチャ先の
テクスチャを作る形なので、こちらのインターフェースを使ってもよさそうですね。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2210/8769419

この記事へのトラックバック一覧です: キャプチャテクスチャのためのメモ:

« ついにシェーダモデル4.0のGPU? | トップページ | シンポジウム »