PF-X.NET Diary このページをアンテナに追加 RSSフィード

2004 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 02 | 03 | 04 | 05 | 06 | 07 |
2011 | 03 | 08 |

2005-07-14

[]キャプチャデバイスの出力フォーマット 17:23 キャプチャデバイスの出力フォーマットを含むブックマーク

 USBカメラから適当に取得してサンプルグラバからフレームを拾ってやろうとしたら重かった。

 で何かと思ったら、カメラが1280*960で吐いている。IAMStreamConfigというインターフェース情報を取得したり設定できるらしい、と。解像度を変更。

 MSDNから引っ張ってきて、勘で適当な処理を追加・・・したらちゃんとなった・・・

//IAMStreamConfigインターフェース
IAMStreamConfig *pConfig = NULL;
//pSrcはキャプチャデバイスのフィルタ キャプチャカテゴリのピン pBuilderはICaptureBuilder2
hr = pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE ,0,pSrc,IID_IAMStreamConfig,(void**)&pConfig);
if(FAILED(hr)){
	AfxMessageBox("err : pBuilder->FindInterface");
}
int iCount = 0, iSize = 0;
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;
				//それぞれ縦横の変更
				pVih2->bmiHeader.biHeight=480;
				pVih2->bmiHeader.biWidth=640;
				//バイト配列ポインタらしいのでキャストして突っ込みなおす
				pmtConfig->pbFormat=(BYTE*)pVih2;
				//SetFormatでpbFormatの変更を適用させる
				hr=pConfig->SetFormat(pmtConfig);
				if(FAILED(hr)){
					AfxMessageBox("failed : pConfig->SetFormat");
				}
			}
			// 完了したら、メディア タイプを削除する。
			//DeleteMediaType(pmtConfig);
		}
	}
}
トラックバック - http://d.hatena.ne.jp/xabre/20050714