// ILAVDecoder STDMETHODIMP CDecWMV9::Init() { DbgLog((LOG_TRACE, 10, L"CDecWMV9::Init(): Trying to open WMV9 DMO decoder")); HRESULT hr = S_OK; // Disable deinterlacing setting in the registry // Apparently required on XP CreateRegistryKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Scrunch"); CRegistry reg = CRegistry(HKEY_CURRENT_USER, L"Software\\Microsoft\\Scrunch", hr); if (SUCCEEDED(hr)) { reg.ReadDWORD(L"Deinterlace.old", hr); if (FAILED(hr)) { DWORD dwValue = reg.ReadDWORD(L"Deinterlace", hr); if (FAILED(hr)) dwValue = 0; reg.WriteDWORD(L"Deinterlace.old", dwValue); reg.WriteDWORD(L"Deinterlace", 0); } } hr = CoCreateInstance(CLSID_CWMVDecMediaObject, NULL, CLSCTX_INPROC_SERVER, IID_IMediaObject, (void **)&m_pDMO); if (FAILED(hr)) { DbgLog((LOG_TRACE, 10, L"-> Failed to create DMO object")); return hr; } // Force decoder deinterlacing to off IPropertyBag *pProp = NULL; hr = m_pDMO->QueryInterface(&pProp); if (SUCCEEDED(hr)) { VARIANT var = {0}; var.vt = VT_BOOL; var.boolVal = FALSE; pProp->Write(g_wszWMVCDecoderDeinterlacing, &var); SafeRelease(&pProp); } return S_OK; }