SetV9Dlg.cpp
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:8k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. //
  20. #include "stdafx.h"
  21. #include "GVCapture.h"
  22. #include "SetV9Dlg.h"
  23. #include "GVCaptureDlg.h"
  24. #include "VideoEncParams.h"
  25. #include ".setv9dlg.h"
  26. #ifdef _DEBUG
  27. #define new DEBUG_NEW
  28. #undef THIS_FILE
  29. static char THIS_FILE[] = __FILE__;
  30. #endif
  31. extern CVideoEncParams g_VideoEncodingParams;
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CSetV9Dlg dialog
  34. CSetV9Dlg::CSetV9Dlg(CWnd* pParent /*=NULL*/)
  35. : CDialog(CSetV9Dlg::IDD, pParent)
  36. {
  37. //{{AFX_DATA_INIT(CSetV9Dlg)
  38. m_nBitrate = 0;
  39. m_nBuffer = 0;
  40. m_nVbrQuality = 0;
  41. m_nQuality = 0;
  42. m_fFrameRate = 0.0f;
  43. m_nMaxKeyDistance = 0;
  44. //}}AFX_DATA_INIT
  45. }
  46. void CSetV9Dlg::DoDataExchange(CDataExchange* pDX)
  47. {
  48. CDialog::DoDataExchange(pDX);
  49. //{{AFX_DATA_MAP(CSetV9Dlg)
  50. DDX_Control(pDX, IDC_VBRQUALITY, m_vbrQuality);
  51. DDX_Text(pDX, IDC_BITRATE, m_nBitrate);
  52. DDV_MinMaxUInt(pDX, m_nBitrate, 0, 24000000);
  53. DDX_Text(pDX, IDC_BUFFERDELAY, m_nBuffer);
  54. DDV_MinMaxUInt(pDX, m_nBuffer, 1000, 128000);
  55. DDX_Text(pDX, IDC_VBRQUALITY, m_nVbrQuality);
  56. DDV_MinMaxUInt(pDX, m_nVbrQuality, 0, 100);
  57. DDX_Text(pDX, IDC_QUALITY, m_nQuality);
  58. DDV_MinMaxUInt(pDX, m_nQuality, 0, 100);
  59. DDX_Text(pDX, IDC_FRAMERATE, m_fFrameRate);
  60. DDV_MinMaxFloat(pDX, m_fFrameRate, 0.f, 60.f);
  61. DDX_Text(pDX, IDC_MAXKEYDISTANCE, m_nMaxKeyDistance);
  62. DDV_MinMaxUInt(pDX, m_nMaxKeyDistance, 1, 100);
  63. //}}AFX_DATA_MAP
  64. }
  65. BEGIN_MESSAGE_MAP(CSetV9Dlg, CDialog)
  66. //{{AFX_MSG_MAP(CSetV9Dlg)
  67. ON_BN_CLICKED(IDC_CBR, OnCbr)
  68. ON_BN_CLICKED(IDC_QUALITY_VBR, OnQualityVbr)
  69. ON_WM_MOUSEMOVE()
  70. //}}AFX_MSG_MAP
  71. ON_BN_CLICKED(IDOK, OnBnClickedOk)
  72. END_MESSAGE_MAP()
  73. /////////////////////////////////////////////////////////////////////////////
  74. // CSetV9Dlg message handlers
  75. BOOL CSetV9Dlg::OnInitDialog() 
  76. {
  77. CDialog::OnInitDialog();
  78. // CVideoEncParams* pParams = &(((CV9CaptureDlg*)AfxGetMainWnd())->m_videoEncoderParams);
  79. ((CButton*)GetDlgItem(IDC_CBR))->SetCheck(!g_VideoEncodingParams.fIsVBR);
  80. m_vbrQuality.EnableWindow(g_VideoEncodingParams.fIsVBR);
  81. m_nVbrQuality = g_VideoEncodingParams.nVBRQuality;
  82. m_nQuality = g_VideoEncodingParams.nQuality;
  83. m_fFrameRate = g_VideoEncodingParams.fFrameRate;
  84. m_nBitrate = g_VideoEncodingParams.nBitrate;
  85. m_nBuffer = g_VideoEncodingParams.nBufferDelay;
  86. m_nMaxKeyDistance = g_VideoEncodingParams.nKeyDist;
  87. CListBox* pProfiles = (CListBox*)GetDlgItem(IDC_PROFILES);
  88. pProfiles->AddString("Main");
  89. pProfiles->AddString("Simple");
  90. pProfiles->AddString("Complex");
  91. pProfiles->SetCurSel(0);
  92. CListBox* pComplexity = (CListBox*)GetDlgItem(IDC_COMPLEXITY);
  93. CString ComplexityString;
  94. for(int index = 0; index <= g_VideoEncodingParams.ComplexityMax; index++)
  95. {
  96.         // Assemble the complexity list entry string 
  97. if(index == g_VideoEncodingParams.ComplexityLive)
  98. ComplexityString.Format("%d (Live)", index);
  99. else if(index == g_VideoEncodingParams.ComplexityOffline)
  100. ComplexityString.Format("%d (Offline)", index);
  101. else if(index == g_VideoEncodingParams.ComplexityMax)
  102. ComplexityString.Format("%d (Max)", index);
  103. else
  104. ComplexityString.Format("%d", index);
  105. pComplexity->AddString(ComplexityString);
  106. }
  107. pComplexity->SetCurSel(g_VideoEncodingParams.ComplexityLive);
  108.      
  109. p_sub[0]=GetDlgItem(IDC_CBR);
  110. p_sub[1]=GetDlgItem(IDC_QUALITY_VBR);
  111. p_sub[2]=GetDlgItem(IDC_FRAMERATE);
  112. p_sub[3]=GetDlgItem(IDC_BITRATE);
  113. p_sub[4]=GetDlgItem(IDC_BUFFERDELAY);
  114. p_sub[5]=GetDlgItem(IDC_MAXKEYDISTANCE);
  115. p_sub[6]=GetDlgItem(IDC_QUALITY);
  116. p_sub[7]=GetDlgItem(IDC_COMPLEXITY);
  117. p_sub[8]=GetDlgItem(IDC_PROFILES);
  118.   
  119. m_tip[0].Create(p_sub[0],TTS_ALWAYSTIP);
  120. m_tip[0].AddTool(p_sub[0]);
  121. m_tip[0].SetTipTextColor(RGB(0,0,0));
  122. m_tip[1].Create(p_sub[1],TTS_ALWAYSTIP);
  123. m_tip[1].AddTool(p_sub[1]);
  124. m_tip[1].SetTipTextColor(RGB(0,0,0));
  125. m_tip[2].Create(p_sub[2],TTS_ALWAYSTIP);
  126. m_tip[2].AddTool(p_sub[2]);
  127. m_tip[2].SetTipTextColor(RGB(0,0,0));
  128. m_tip[3].Create(p_sub[3],TTS_ALWAYSTIP);
  129. m_tip[3].AddTool(p_sub[3]);
  130. m_tip[3].SetTipTextColor(RGB(0,0,0));
  131. m_tip[4].Create(p_sub[4],TTS_ALWAYSTIP);
  132. m_tip[4].AddTool(p_sub[4]);
  133. m_tip[4].SetTipTextColor(RGB(0,0,0));
  134. m_tip[5].Create(p_sub[5],TTS_ALWAYSTIP);
  135. m_tip[5].AddTool(p_sub[5]);
  136. m_tip[5].SetTipTextColor(RGB(0,0,0));
  137. m_tip[6].Create(p_sub[6],TTS_ALWAYSTIP);
  138. m_tip[6].AddTool(p_sub[6]);
  139. m_tip[6].SetTipTextColor(RGB(0,0,0));
  140. m_tip[7].Create(p_sub[7],TTS_ALWAYSTIP);
  141. m_tip[7].AddTool(p_sub[7]);
  142. m_tip[7].SetTipTextColor(RGB(0,0,0));
  143. m_tip[8].Create(p_sub[8],TTS_ALWAYSTIP);
  144. m_tip[8].AddTool(p_sub[8]);
  145.         m_tip[8].SetTipTextColor(RGB(0,0,0));
  146. UpdateData(FALSE);
  147. return TRUE;  // return TRUE unless you set the focus to a control
  148.               // EXCEPTION: OCX Property Pages should return FALSE
  149. }
  150. void CSetV9Dlg::OnOK() 
  151. {
  152. UpdateData(TRUE);
  153. // CVideoEncParams* pParams = &(((CV9CaptureDlg*)AfxGetMainWnd())->m_videoEncoderParams);
  154. g_VideoEncodingParams.fIsVBR = (((CButton*)GetDlgItem(IDC_CBR))->GetCheck() != BST_CHECKED);
  155. g_VideoEncodingParams.nVBRQuality = m_nVbrQuality;
  156. g_VideoEncodingParams.nQuality = m_nQuality;
  157. g_VideoEncodingParams.fFrameRate = m_fFrameRate;
  158. g_VideoEncodingParams.nBitrate = m_nBitrate;
  159. g_VideoEncodingParams.nBufferDelay = m_nBuffer;
  160. g_VideoEncodingParams.nKeyDist = m_nMaxKeyDistance;
  161. CListBox* pProfiles = (CListBox*)GetDlgItem(IDC_PROFILES);
  162. CListBox* pComplexity = (CListBox*)GetDlgItem(IDC_COMPLEXITY);
  163. g_VideoEncodingParams.nProfile = pProfiles->GetCurSel();
  164. g_VideoEncodingParams.nComplexity = pComplexity->GetCurSel();
  165. CDialog::OnOK();
  166. }
  167. void CSetV9Dlg::OnCbr() 
  168. {
  169. GetDlgItem(IDC_VBRQUALITY)->EnableWindow(FALSE);
  170. GetDlgItem(IDC_QUALITY)->EnableWindow(TRUE);
  171. GetDlgItem(IDC_BITRATE)->EnableWindow(TRUE);
  172. GetDlgItem(IDC_BUFFERDELAY)->EnableWindow(TRUE);
  173. }
  174. void CSetV9Dlg::OnQualityVbr() 
  175. {
  176. GetDlgItem(IDC_VBRQUALITY)->EnableWindow(TRUE);
  177. GetDlgItem(IDC_QUALITY)->EnableWindow(FALSE);
  178. GetDlgItem(IDC_BITRATE)->EnableWindow(FALSE);
  179. GetDlgItem(IDC_BUFFERDELAY)->EnableWindow(FALSE);
  180. }
  181. BOOL CSetV9Dlg::PreTranslateMessage(MSG* pMsg) 
  182. {
  183. // TODO: Add your specialized code here and/or call the base class
  184. if(m_tip[0].m_hWnd!=NULL)
  185. m_tip[0].RelayEvent(pMsg);
  186. if(m_tip[1].m_hWnd!=NULL)
  187.    m_tip[1].RelayEvent(pMsg);
  188. if(m_tip[2].m_hWnd!=NULL)
  189.    m_tip[2].RelayEvent(pMsg);
  190. if(m_tip[3].m_hWnd!=NULL)
  191.    m_tip[3].RelayEvent(pMsg);
  192. if(m_tip[4].m_hWnd!=NULL)
  193.    m_tip[4].RelayEvent(pMsg);
  194. if(m_tip[5].m_hWnd!=NULL)
  195.    m_tip[5].RelayEvent(pMsg);
  196. if(m_tip[6].m_hWnd!=NULL)
  197.    m_tip[6].RelayEvent(pMsg);
  198. if(m_tip[7].m_hWnd!=NULL)
  199.    m_tip[7].RelayEvent(pMsg);
  200. if(m_tip[8].m_hWnd!=NULL)
  201.    m_tip[8].RelayEvent(pMsg);
  202. return CDialog::PreTranslateMessage(pMsg);
  203. }
  204. void CSetV9Dlg::OnMouseMove(UINT nFlags, CPoint point) 
  205. {
  206. // TODO: Add your message handler code here and/or call default
  207. m_tip[0].UpdateTipText("编码时输出的码流为固定大小",p_sub[0]);
  208. m_tip[1].UpdateTipText("编码时输出的码流可变,质量恒定",p_sub[1]);
  209. m_tip[2].UpdateTipText("请填人帧率(0.00-60.00)",p_sub[2]);
  210. m_tip[3].UpdateTipText("每秒钟输出的码流大小",p_sub[3]);
  211. m_tip[4].UpdateTipText("缓冲值大小对于画面质量和延时有影响",p_sub[4]);
  212. m_tip[5].UpdateTipText("关键帧所允许的最大时间间隔(1-100)秒",p_sub[5]);
  213. m_tip[6].UpdateTipText("清晰度代表的是画面的锐利程度",p_sub[6]);
  214. m_tip[7].UpdateTipText("编码复杂度的数值越高,画面质量越高,但对机器性能的要求也越高",p_sub[7]);
  215. CDialog::OnMouseMove(nFlags, point);
  216. }
  217. void CSetV9Dlg::OnBnClickedOk()
  218. {
  219. // TODO: Add your control notification handler code here
  220. OnOK();
  221. }