DirectShowでWebカメラ(Qcam9000)の解像度を変えるには?

解決


赤ヨッシー  2008-05-22 14:48:07  No: 68395  IP: 192.*.*.*

初めまして、赤ヨッシーというものです。
DirectShowについて、質問がございます。
お分かりになる方がいらっしゃいましたら、ご教授のほどよろしくお願いいたします。

現在、独自フィルタを作成(画像の一部を二値化するもの)し、
GraphEditにて以下のような構成で利用しています。

Logicool Qcam Pro 9000
      ↓
AVI Decompressor
      ↓
Color Space Converter
      ↓
自作フィルタ
      ↓
Color Space Converter 0003
      ↓
VideoRenderer

フィルタの機能には問題ないのですが、QcamPro9000の解像度(320x240になっています)をGraphEditにて変更したいのですが、どこにもプロパティが存在しません。

いろいろと調べたところ、プログラム上からIAMStreamConfigインターフェースを用いて変更が可能とのことで、以下のようなコードを記述しました。

 CoCreateInstance( CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2,(void**)&pCapture );
 IAMStreamConfig *pStreamConfig = NULL;
 pCapture->FindInterface(&PIN_CATEGORY_CAPTURE ,0,m_pQcam9000, IID_IAMStreamConfig,(void**)&pStreamConfig);
※m_pQcam9000はQcam9000のインターフェースで取得出来ています。

このコードを実行すると、pStreamConfigがNULLとなってしまいます。
(GetLastError()は0x36b7を返しています。)

そこで質問なのですが、以下の3点をお願いいたします。
1.GraphEdit上からQcam9000の解像度を変更する方法はありますでしょうか?
2.Qcam9000はIAMStreamConfigインターフェースを実装していないのでしょうか?
3.その他の方法で解像度を変更する方法はありますでしょうか?

以上、よろしくお願いいたします。

編集 削除
gak  2008-05-22 16:36:54  No: 68396  IP: 192.*.*.*

> CoCreateInstance( CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2,(void**)&pCapture );
> IAMStreamConfig *pStreamConfig = NULL;
> pCapture->FindInterface(&PIN_CATEGORY_CAPTURE ,0,m_pQcam9000, IID_IAMStreamConfig,(void**)&pStreamConfig);

これソースそのまま?省略してる?
pCapture は CoCreateInstance() しただけ(フィルタグラフ保持して無い)に見えるんだけど。

編集 削除
赤ヨッシー  2008-05-22 22:39:18  No: 68397  IP: 192.*.*.*

gakさん、レスありがとうございます。

おかげさまでIAMStreamConfigを取得することが出来ました!
ありがとうございました。

根本的なDirectShowの知識不足のまま、質問してしまった非礼をお詫びいたします。
DirectShowについて、もっと詳しく勉強いたします。
再び、質問があるかもしれませんが、その時はどうぞよろしくお願いいたします。

編集 削除