예제 #1
0
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);
}
예제 #2
0
 //============================================================
 SpdMatrix RegSuf::centered_xtx() const {
   SpdMatrix ans = xtx();
   ans.add_outer(xbar(), -n());
   return ans;
 }