DirectShow列舉攝影機之問題 |
答題得分者是:ikk
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
各位好,在下是利用http://www.cppfans.com/d_sdk/victordx9sdk.asp 內所提供的方式進行DirectShow的程式
參考的範例是AMCap以及http://blog.csdn.net/aoosang/archive/2005/05/26/381148.aspx 裡的方式做攝影機的列舉 以下為AMCap所拮取拿到新的project使用的CODE HRESULT hr; CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); // enumerate all video capture devices ICreateDevEnum *pCreateDevEnum=0; hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void**)&pCreateDevEnum); if(hr != NOERROR) { //ErrMsg(TEXT("Error Creating Device Enumerator")); return; } IEnumMoniker *pEm=0; hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEm, 0); if(hr != NOERROR) { // ErrMsg(TEXT("Sorry, you have no video capture hardware.\r\n\r\n") // TEXT("Video capture will not function properly.")); //goto EnumAudio; } pEm->Reset(); ULONG cFetched; IMoniker *pM; while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK) { IPropertyBag *pBag=0; hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag); if(SUCCEEDED(hr)) { VARIANT var; var.vt = VT_BSTR; hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag); if(SUCCEEDED(hr)) { VARIANT var; var.vt = VT_BSTR; hr = pBag->Read(L"Description", &var, 0); if(hr == NOERROR) { Ansistring str = var.bstrVal; } pBag->Release(); } pM->Release(); } pEm->Release(); 此部分的Code在AMCap執行時 str會有字串輸出 USB 2.0 A/V Converter 但在新開的Project執行時 hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag); 回傳值不為0, 因此 str沒有輸出字串 假設我把 hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEm, 0);修改 則AMCap與新的Project的str都會輸出 MSScreen encoder DMO WMVideo9 Encoder DMO MSScreen 9 encoder DMO 請問在新的Project是否有什麼地方須做修改,才能正確讀取到列舉的攝影機名稱 USB 2.0 A/V Converter |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |