void Device::OpenDialog(void *hwnd, DialogType type) const { ComPtr<IUnknown> ptr; HRESULT hr; if (type == DialogType::ConfigVideo) { ptr = context->videoFilter; } else if (type == DialogType::ConfigCrossbar || type == DialogType::ConfigCrossbar2) { hr = context->builder->FindInterface(NULL, NULL, context->videoFilter, IID_IAMCrossbar, (void**)&ptr); if (FAILED(hr)) { WarningHR(L"Failed to find crossbar", hr); return; } if (ptr != NULL && type == DialogType::ConfigCrossbar2) { ComQIPtr<IAMCrossbar> xbar(ptr); ComQIPtr<IBaseFilter> filter(xbar); hr = context->builder->FindInterface( &LOOK_UPSTREAM_ONLY, NULL, filter, IID_IAMCrossbar, (void**)&ptr); if (FAILED(hr)) { WarningHR(L"Failed to find crossbar2", hr); return; } } } else if (type == DialogType::ConfigAudio) { ptr = context->audioFilter; } if (!ptr) { Warning(L"Could not find filter to open dialog type: %d with", (int)type); return; } OpenPropertyPages((HWND)hwnd, ptr); }
//============================================================ SpdMatrix RegSuf::centered_xtx() const { SpdMatrix ans = xtx(); ans.add_outer(xbar(), -n()); return ans; }