none
Directshow如何读取摄像头的分辨率和预览格式 RRS feed

  • 问题

  • 我想不用微软提供的OleCreatePropertyFrame函数来打开分辨率选择窗口来设置图像格式和分辨率,有什么方法可以将图像的格式和分辨率读取出来再自行设置啊,我现在可以读取出摄像头的名字

    CoInitialize(NULL);
    ICreateDevEnum *dev_enum;
    HRESULT hr=CoCreateInstance(CLSID_SystemDeviceEnum,NULL, CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,(void**)&dev_enum);
    if(FAILED(hr))
    {
        qDebug()<<"建立系统硬件列表失败\n";
        return;
    }
    IEnumMoniker* ienum_moniker;
    hr=dev_enum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&ienum_moniker,0);
    if(FAILED(hr))
    {
        qDebug()<<"建立摄像头列表失败\n";
        return;
    }
    ienum_moniker->Reset();
    ULONG cFetched;
    IMoniker *pM;
    while(ienum_moniker->Next(1,&pM,&cFetched)==S_OK)
    {
        IPropertyBag *pBag=0;
        pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
        VARIANT var;
        var.vt = VT_BSTR;
        hr = pBag->Read(L"FriendlyName", &var, NULL);//取出设备名
        if(hr == NOERROR)
        {
            devname.append(var.bstrVal);
            devnum++;
            QString q_str((QChar*)var.bstrVal, wcslen(var.bstrVal));
            ui->comboBox->addItem(q_str);
        }
    }


    2017年9月29日 6:48