Прежде всего, вы пропустили действительно важную часть.В вашем приложении Qt / OpenCV какой API используется и что именно у вас есть для данной веб-камеры.Если это видео для Windows, то вы должны посмотреть на VFW API в диалоговом интерфейсе.Если это DirectShow, то вас в основном не интересуют диалоги VFW.
Предположительно, вы взаимодействуете с камерами через DirectShow (ну, в общем, нет смысла использовать VFW, особенно для нескольких камер).Тогда я сомневаюсь, что AMCap использует именно тот путь кода, который вы упомянули в вопросе.Примечание. Комментарий источника AMCap:
// we use this interface to bring up the 3 dialogs
// NOTE: Only the VfW capture filter supports this. This app only brings
// up dialogs for legacy VfW capture drivers, since only those have dialogs
hr = gcap.pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video, gcap.pVCap,
IID_IAMVfwCaptureDialogs, (void **)&gcap.pDlg);
. В DirectShow вы обычно получаете интерфейс конфигурации с ISpecifyPropertyPages
и OleCreatePropertyFrame
.AMCap также имеет соответствующий код для этого:
else if(id - MENU_DIALOG0 == gcap.iVCapDialogPos)
{
ISpecifyPropertyPages *pSpec;
CAUUID cauuid;
hr = gcap.pVCap->QueryInterface(IID_ISpecifyPropertyPages,
(void **)&pSpec);
if(hr == S_OK)
{
hr = pSpec->GetPages(&cauuid);
hr = OleCreatePropertyFrame(ghwndApp, 30, 30, NULL, 1,
(IUnknown **)&gcap.pVCap, cauuid.cElems,
(GUID *)cauuid.pElems, 0, 0, NULL);
CoTaskMemFree(cauuid.pElems);
pSpec->Release();
}
}
Отображение страниц свойств фильтра на MSDN должно помочь вам (у вас уже есть интерфейсный указатель IBaseFilter
в вашемфрагмент кода в вопросе).