PPageOutput.cpp
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:5k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. // CPPageOutput.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "MainFrm.h"
  26. #include "PPageOutput.h"
  27. // CPPageOutput dialog
  28. IMPLEMENT_DYNAMIC(CPPageOutput, CPPageBase)
  29. CPPageOutput::CPPageOutput()
  30. : CPPageBase(CPPageOutput::IDD, CPPageOutput::IDD)
  31. , m_iDSVideoRendererType(0)
  32. , m_iRMVideoRendererType(0)
  33. , m_iQTVideoRendererType(0)
  34. , m_iAPSurfaceUsage(0)
  35. , m_iAudioRendererType(0)
  36. , m_fVMRSyncFix(FALSE)
  37. , m_iDX9Resizer(0)
  38. {
  39. }
  40. CPPageOutput::~CPPageOutput()
  41. {
  42. }
  43. void CPPageOutput::DoDataExchange(CDataExchange* pDX)
  44. {
  45. __super::DoDataExchange(pDX);
  46. DDX_Radio(pDX, IDC_DSSYSDEF, m_iDSVideoRendererType);
  47. DDX_Radio(pDX, IDC_RMSYSDEF, m_iRMVideoRendererType);
  48. DDX_Radio(pDX, IDC_QTSYSDEF, m_iQTVideoRendererType);
  49. DDX_Radio(pDX, IDC_REGULARSURF, m_iAPSurfaceUsage);
  50. DDX_CBIndex(pDX, IDC_COMBO1, m_iAudioRendererType);
  51. DDX_Control(pDX, IDC_COMBO1, m_iAudioRendererTypeCtrl);
  52. DDX_Check(pDX, IDC_CHECK1, m_fVMRSyncFix);
  53. DDX_CBIndex(pDX, IDC_DX9RESIZER_COMBO, m_iDX9Resizer);
  54. }
  55. BEGIN_MESSAGE_MAP(CPPageOutput, CPPageBase)
  56. END_MESSAGE_MAP()
  57. // CPPageOutput message handlers
  58. BOOL CPPageOutput::OnInitDialog()
  59. {
  60. __super::OnInitDialog();
  61. AppSettings& s = AfxGetAppSettings();
  62. m_iDSVideoRendererType = s.iDSVideoRendererType;
  63. m_iRMVideoRendererType = s.iRMVideoRendererType;
  64. m_iQTVideoRendererType = s.iQTVideoRendererType;
  65. m_iAPSurfaceUsage = s.iAPSurfaceUsage;
  66. m_fVMRSyncFix = s.fVMRSyncFix;
  67. m_iDX9Resizer = s.iDX9Resizer;
  68. m_AudioRendererDisplayNames.Add(_T(""));
  69. m_iAudioRendererTypeCtrl.AddString(_T("System Default"));
  70. m_iAudioRendererType = 0;
  71. BeginEnumSysDev(CLSID_AudioRendererCategory, pMoniker)
  72. {
  73. LPOLESTR olestr = NULL;
  74. if(FAILED(pMoniker->GetDisplayName(0, 0, &olestr)))
  75. continue;
  76. CStringW str(olestr);
  77. CoTaskMemFree(olestr);
  78. m_AudioRendererDisplayNames.Add(CString(str));
  79. CComPtr<IPropertyBag> pPB;
  80. if(SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void**)&pPB)))
  81. {
  82. CComVariant var;
  83. pPB->Read(CComBSTR(_T("FriendlyName")), &var, NULL);
  84. CString fstr(var.bstrVal);
  85. var.Clear();
  86. if(SUCCEEDED(pPB->Read(CComBSTR(_T("FilterData")), &var, NULL)))
  87. {
  88. BSTR* pbstr;
  89. if(SUCCEEDED(SafeArrayAccessData(var.parray, (void**)&pbstr)))
  90. {
  91. fstr.Format(_T("%s (%08x)"), CString(fstr), *((DWORD*)pbstr + 1));
  92. SafeArrayUnaccessData(var.parray);
  93. }
  94. }
  95. m_iAudioRendererTypeCtrl.AddString(fstr);
  96. }
  97. else
  98. {
  99. m_iAudioRendererTypeCtrl.AddString(CString(str));
  100. }
  101. if(s.AudioRendererDisplayName == str && m_iAudioRendererType == 0)
  102. {
  103. m_iAudioRendererType = m_iAudioRendererTypeCtrl.GetCount()-1;
  104. }
  105. }
  106. EndEnumSysDev
  107. m_AudioRendererDisplayNames.Add(AUDRNDT_NULL_COMP);
  108. m_iAudioRendererTypeCtrl.AddString(AUDRNDT_NULL_COMP);
  109. if(s.AudioRendererDisplayName == AUDRNDT_NULL_COMP && m_iAudioRendererType == 0)
  110. m_iAudioRendererType = m_iAudioRendererTypeCtrl.GetCount()-1;
  111. m_AudioRendererDisplayNames.Add(AUDRNDT_NULL_UNCOMP);
  112. m_iAudioRendererTypeCtrl.AddString(AUDRNDT_NULL_UNCOMP);
  113. if(s.AudioRendererDisplayName == AUDRNDT_NULL_UNCOMP && m_iAudioRendererType == 0)
  114. m_iAudioRendererType = m_iAudioRendererTypeCtrl.GetCount()-1;
  115. CorrectComboListWidth(m_iAudioRendererTypeCtrl, GetFont());
  116. UpdateData(FALSE);
  117. if(!AfxGetAppSettings().fXpOrBetter)
  118. {
  119. GetDlgItem(IDC_DSVMR7WIN)->EnableWindow(FALSE);
  120. GetDlgItem(IDC_DSVMR7REN)->EnableWindow(FALSE);
  121. }
  122. if(!IsCLSIDRegistered(CLSID_VideoMixingRenderer9))
  123. {
  124. GetDlgItem(IDC_DSVMR9WIN)->EnableWindow(FALSE);
  125. GetDlgItem(IDC_DSVMR9REN)->EnableWindow(FALSE);
  126. GetDlgItem(IDC_RMDX9)->EnableWindow(FALSE);
  127. GetDlgItem(IDC_QTDX9)->EnableWindow(FALSE);
  128. }
  129. CreateToolTip();
  130. return TRUE;  // return TRUE unless you set the focus to a control
  131. // EXCEPTION: OCX Property Pages should return FALSE
  132. }
  133. BOOL CPPageOutput::OnApply()
  134. {
  135. UpdateData();
  136. AppSettings& s = AfxGetAppSettings();
  137. s.iDSVideoRendererType = m_iDSVideoRendererType;
  138. s.iRMVideoRendererType = m_iRMVideoRendererType;
  139. s.iQTVideoRendererType = m_iQTVideoRendererType;
  140. s.iAPSurfaceUsage = m_iAPSurfaceUsage;
  141. s.fVMRSyncFix = !!m_fVMRSyncFix;
  142. s.AudioRendererDisplayName = m_AudioRendererDisplayNames[m_iAudioRendererType];
  143. s.iDX9Resizer = m_iDX9Resizer;
  144. return __super::OnApply();
  145. }