Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://yahirohumpty.blog2.fc2.com/tb.php/288-4903a762

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

DirectShowでカメラの設定をいじる(2)

http://yahirohumpty.blog2.fc2.com/blog-entry-278.html
で扱っていた問題ですが一応なんとかなった.

http://d.hatena.ne.jp/xabre/20050714
のコードをベースにいろいろやってました.
ベースにさせていただいたコードに関してですが,
すべての推奨フォーマットをダンプして直接値を変えてしまうという
なんだか非効率的なコードになっていたので
推奨フォーマットの中から適合するもの,
ここではQVGA,30fpsを探し出して設定する形にしています.
推奨フォーマット中に見つからないけどいけそうな場合は
見つからなかったあとで手動で設定を試みるべきかと思いますが
今のところそうしてないです.

というか,QVGA,30fpsがないカメラはなかなかないだろう.
せいぜい15fpsまでしか速度が出ないくらいだと思う.


で,書いたものですが以下のようなコードが
http://yahirohumpty.blog2.fc2.com/blog-entry-270.html
のエントリのサンプルコードの3.の最後と4.の最初の間あたりに入ることになる.


//from http://d.hatena.ne.jp/xabre/20050714
//IAMStreamConfigインターフェース
IAMStreamConfig *pConfig = NULL;
//pSrcはキャプチャデバイスのフィルタ キャプチャカテゴリのピン pBuilderはICaptureBuilder2
hr = pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE ,0,pSrc,IID_IAMStreamConfig,(void**)&pConfig);
if(FAILED(hr)){
cout << "error: pBuilder->FindInterface" << endl;
}
int iCount = 0, iSize = 0;
AM_MEDIA_TYPE *namt=NULL;
hr = pConfig->GetNumberOfCapabilities(&iCount, &iSize);
// サイズを調べ、正しい構造体を渡すことを確認する。
if (iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS)){
// ビデオ能力構造体を使う。
for (int iFormat = 0; iFormat < iCount; iFormat++){
VIDEO_STREAM_CONFIG_CAPS scc;
AM_MEDIA_TYPE *pmtConfig;
hr = pConfig->GetStreamCaps(iFormat, &pmtConfig, (BYTE*)&scc);
VIDEOINFOHEADER *pVih2;
if (SUCCEEDED(hr)){
if ((pmtConfig->formattype == FORMAT_VideoInfo) &&
(pmtConfig->cbFormat >= sizeof(VIDEOINFOHEADER)) &&
(pmtConfig->pbFormat != NULL)){
//VIDEOINFOHEADERのpVih2にIAMStreamConfigのpbFormatを入れる
pVih2 = (VIDEOINFOHEADER*)pmtConfig->pbFormat;

// 推奨フォーマットをダンプしてみる
/*
cout << "format index: " << iFormat << endl;
cout << " Width : " << pVih2->bmiHeader.biWidth << endl;
cout << " Height: " << pVih2->bmiHeader.biHeight << endl;
cout << " sample: " << pVih2->AvgTimePerFrame << endl << endl;
*/
if((pVih2->bmiHeader.biWidth == 320) &&
(pVih2->bmiHeader.biHeight == 240) &&
(pVih2->AvgTimePerFrame >= 323333) &&
(pVih2->AvgTimePerFrame <= 343333)){
namt=pmtConfig;
break;
}
}
// 完了したら、メディア タイプを削除する。
//DeleteMediaType(pmtConfig);
}
}
}
if(namt==NULL){
cout << "warning: format not found" << endl;
// 推奨フォーマットに適当なのがない.
// 自力で設定を試みるべきか.
}else{
hr=pConfig->SetFormat(namt);
if(FAILED(hr)){
cout << "failed : pConfig->SetFormat" << endl;
}
}
//


一つ疑問なのはキャプチャを一回はじめてから
この設定を変えるためにはどうしたらいいんだろう.
そもそもどの時点でだめになるかまでは検証していない.
pMediaControl->Run();の前ですでにだめだったから
Renderとかがまずいのかな...
スポンサーサイト
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://yahirohumpty.blog2.fc2.com/tb.php/288-4903a762

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

yahirohumpty

  • Author:yahirohumpty
  • 某大学の研究員です.
    博士号持ってます.
    ビジョンとロボットが専門.
    その他もろもろのことに興味があります.

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。