Exemple #1
0
// 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;
}