Webカメラからの映像取り込み
急にWebカメラから映像を取り込んで遊びたくなりました。
DirectX9用のSDKをみたらDirectShowのライブラリが見つからない、以前8の頃はあったのに・・・・
よくよく調べてみると「Platform SDK」の方に入っているのですね、早速インストール
http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
そして、まずすることは
C:\Program Files\Microsoft Platform SDK\Samples\Multimedia\DirectShow\BaseClasses
のコンパイルです。
コンパイルには「スタート」->「Microsoft Platform SDK for Windows Server 2003 SP1」->「Open Build Environment Window」
の中から自分にあった環境を選択します。
私は「Windows XP 32-bit Build Environment」->「Set Windows XP 32-bit Build Environment (Debug)」を選択しました。
コマンドプロンプトが開くので
>cd C:\Program Files\Microsoft Platform SDK\Samples\Multimedia\DirectShow\BaseClasses
>nmake
をしてコンパイルしてください。「strmiids.lib」が作成されます。
あとはこんな感じでプログラムを書けば、Webカメラからデータを取得できます。
■開始
IGraphBuilder *pGraphBuilder; ICaptureGraphBuilder2 *pCaptureGraphBuilder2; IMediaControl *pMediaControl; ICreateDevEnum *pCreateDevEnum = NULL; IEnumMoniker *pEnumMoniker = NULL; IMoniker *pMoniker = NULL; ULONG nFetched = 0; IBaseFilter *pDeviceFilter; CoInitialize(NULL); CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (LPVOID *)&pGraphBuilder); CoCreateInstance( CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (LPVOID *)&pCaptureGraphBuilder2); pCaptureGraphBuilder2->SetFiltergraph( pGraphBuilder); pGraphBuilder->QueryInterface( IID_IMediaControl, (LPVOID *)&pMediaControl); CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (PVOID *)&pCreateDevEnum); pCreateDevEnum->CreateClassEnumerator( CLSID_VideoInputDeviceCategory, &pEnumMoniker, 0); if (pEnumMoniker == NULL) { printf("no device\n"); return; } pEnumMoniker->Reset(); pEnumMoniker->Next(1, &pMoniker, &nFetched); pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pDeviceFilter ); pGraphBuilder->AddFilter(pDeviceFilter, L"Device Filter"); pMoniker->Release(); pEnumMoniker->Release(); pCreateDevEnum->Release(); pCaptureGraphBuilder2->RenderStream(&PIN_CATEGORY_PREVIEW, NULL, pDeviceFilter, NULL, NULL); // 再生開始 pMediaControl->Run();
■終了
pMediaControl->Release(); pCaptureGraphBuilder2->Release(); pGraphBuilder->Release(); // COM終了 CoUninitialize();