初めまして、赤ヨッシーというものです。
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.その他の方法で解像度を変更する方法はありますでしょうか?
以上、よろしくお願いいたします。
> 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() しただけ(フィルタグラフ保持して無い)に見えるんだけど。
gakさん、レスありがとうございます。
おかげさまでIAMStreamConfigを取得することが出来ました!
ありがとうございました。
根本的なDirectShowの知識不足のまま、質問してしまった非礼をお詫びいたします。
DirectShowについて、もっと詳しく勉強いたします。
再び、質問があるかもしれませんが、その時はどうぞよろしくお願いいたします。