00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "stdafx.h"
00026 #include <math.h>
00027 #include "mplayerc.h"
00028 #include "PPageAudioDecoder.h"
00029 #include ".\ppageaudiodecoder.h"
00030
00031
00032
00033 IMPLEMENT_DYNAMIC(CPPageAudioDecoder, CPPageBase)
00034 CPPageAudioDecoder::CPPageAudioDecoder(IFilterGraph* pFG)
00035 : CPPageBase(CPPageAudioDecoder::IDD, CPPageAudioDecoder::IDD)
00036 , m_iSampleFormat(0)
00037 , m_fNormalize(FALSE)
00038 , m_fAc3SpeakerConfig(FALSE)
00039 , m_iAc3SpeakerConfig(0)
00040 , m_fAc3SpeakerConfigLFE(FALSE)
00041 , m_fAc3DynamicRangeControl(FALSE)
00042 , m_fDtsSpeakerConfig(FALSE)
00043 , m_iDtsSpeakerConfig(0)
00044 , m_fDtsSpeakerConfigLFE(FALSE)
00045 , m_fDtsDynamicRangeControl(FALSE)
00046 , m_iAacSpeakerConfig(0)
00047 , m_boost(0)
00048 {
00049 BeginEnumFilters(pFG, pEF, pBF)
00050 if(CComQIPtr<IMpaDecFilter> pMpaDecFilter = pBF)
00051 m_pMDFs.AddTail(pMpaDecFilter);
00052 EndEnumFilters
00053 }
00054
00055 CPPageAudioDecoder::~CPPageAudioDecoder()
00056 {
00057 }
00058
00059 void CPPageAudioDecoder::DoDataExchange(CDataExchange* pDX)
00060 {
00061 __super::DoDataExchange(pDX);
00062 DDX_Radio(pDX, IDC_RADIO1, m_iSampleFormat);
00063 DDX_Check(pDX, IDC_CHECK3, m_fNormalize);
00064 DDX_Radio(pDX, IDC_RADIO5, m_fAc3SpeakerConfig);
00065 DDX_CBIndex(pDX, IDC_COMBO1, m_iAc3SpeakerConfig);
00066 DDX_Check(pDX, IDC_CHECK1, m_fAc3SpeakerConfigLFE);
00067 DDX_Check(pDX, IDC_CHECK2, m_fAc3DynamicRangeControl);
00068 DDX_Control(pDX, IDC_COMBO1, m_ac3sclist);
00069 DDX_Radio(pDX, IDC_RADIO12, m_fDtsSpeakerConfig);
00070 DDX_CBIndex(pDX, IDC_COMBO2, m_iDtsSpeakerConfig);
00071 DDX_Check(pDX, IDC_CHECK17, m_fDtsSpeakerConfigLFE);
00072 DDX_Check(pDX, IDC_CHECK4, m_fDtsDynamicRangeControl);
00073 DDX_Control(pDX, IDC_COMBO2, m_dtssclist);
00074 DDX_Check(pDX, IDC_CHECK5, m_iAacSpeakerConfig);
00075 DDX_Slider(pDX, IDC_SLIDER1, m_boost);
00076 DDX_Control(pDX, IDC_SLIDER1, m_boostctrl);
00077 }
00078
00079
00080 BEGIN_MESSAGE_MAP(CPPageAudioDecoder, CPPageBase)
00081 ON_WM_HSCROLL()
00082 END_MESSAGE_MAP()
00083
00084
00085
00086
00087 BOOL CPPageAudioDecoder::OnInitDialog()
00088 {
00089 __super::OnInitDialog();
00090
00091 AppSettings& s = AfxGetAppSettings();
00092
00093 m_iSampleFormat = s.mpasf;
00094 m_fNormalize = s.mpanormalize;
00095 m_fAc3SpeakerConfig = s.ac3sc < 0;
00096 m_iAc3SpeakerConfig = A52_STEREO;
00097 m_fAc3SpeakerConfigLFE = !!(abs(s.ac3sc)&A52_LFE);
00098 m_fAc3DynamicRangeControl = s.ac3drc;
00099 m_fDtsSpeakerConfig = s.dtssc < 0;
00100 m_iDtsSpeakerConfig = DTS_STEREO;
00101 m_fDtsSpeakerConfigLFE = !!(abs(s.dtssc)&DTS_LFE);
00102 m_fDtsDynamicRangeControl = s.dtsdrc;
00103 m_iAacSpeakerConfig = s.aacsc;
00104 m_boost = (int)(50.0f*log10(s.mpaboost));
00105 m_boostctrl.SetRange(0, 100);
00106
00107 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("Mono")), A52_MONO);
00108 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("Dual Mono")), A52_CHANNEL);
00109 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("Stereo")), A52_STEREO);
00110 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("Dolby Stereo")), A52_DOLBY);
00111 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("3 Front")), A52_3F);
00112 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("2 Front + 1 Rear")), A52_2F1R);
00113 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("3 Front + 1 Rear")), A52_3F1R);
00114 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("2 Front + 2 Rear")), A52_2F2R);
00115 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("3 Front + 2 Rear")), A52_3F2R);
00116 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("Channel 1")), A52_CHANNEL1);
00117 m_ac3sclist.SetItemData(m_ac3sclist.AddString(_T("Channel 2")), A52_CHANNEL2);
00118
00119 for(int i = 0, j = abs(s.ac3sc)&A52_CHANNEL_MASK; i < m_ac3sclist.GetCount(); i++)
00120 {
00121 if(m_ac3sclist.GetItemData(i) == j)
00122 {
00123 m_iAc3SpeakerConfig = i;
00124 break;
00125 }
00126 }
00127
00128 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("Mono")), DTS_MONO);
00129 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("Dual Mono")), DTS_CHANNEL);
00130 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("Stereo")), DTS_STEREO);
00131
00132
00133 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("3 Front")), DTS_3F);
00134 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("2 Front + 1 Rear")), DTS_2F1R);
00135 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("3 Front + 1 Rear")), DTS_3F1R);
00136 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("2 Front + 2 Rear")), DTS_2F2R);
00137 m_dtssclist.SetItemData(m_dtssclist.AddString(_T("3 Front + 2 Rear")), DTS_3F2R);
00138
00139 for(int i = 0, j = abs(s.dtssc)&DTS_CHANNEL_MASK; i < m_dtssclist.GetCount(); i++)
00140 {
00141 if(m_dtssclist.GetItemData(i) == j)
00142 {
00143 m_iDtsSpeakerConfig = i;
00144 break;
00145 }
00146 }
00147
00148 UpdateData(FALSE);
00149
00150 return TRUE;
00151
00152 }
00153
00154 BOOL CPPageAudioDecoder::OnApply()
00155 {
00156 UpdateData();
00157
00158 AppSettings& s = AfxGetAppSettings();
00159
00160 s.mpasf = m_iSampleFormat;
00161 s.mpanormalize = !!m_fNormalize;
00162 s.ac3sc = m_ac3sclist.GetItemData(m_ac3sclist.GetCurSel());
00163 s.ac3sc |= m_fAc3SpeakerConfigLFE?A52_LFE:0;
00164 s.ac3sc *= m_fAc3SpeakerConfig?-1:1;
00165 s.ac3drc = !!m_fAc3DynamicRangeControl;
00166 s.dtssc = m_dtssclist.GetItemData(m_dtssclist.GetCurSel());
00167 s.dtssc |= m_fDtsSpeakerConfigLFE?DTS_LFE:0;
00168 s.dtssc *= m_fDtsSpeakerConfig?-1:1;
00169 s.dtsdrc = !!m_fDtsDynamicRangeControl;
00170 s.aacsc = !!m_iAacSpeakerConfig;
00171 s.mpaboost = (float)pow(10.0, (double)m_boost/50);
00172
00173 POSITION pos = m_pMDFs.GetHeadPosition();
00174 while(pos)
00175 {
00176 CComPtr<IMpaDecFilter> pMpaDecFilter = m_pMDFs.GetNext(pos);
00177 pMpaDecFilter->SetSampleFormat((SampleFormat)s.mpasf);
00178 pMpaDecFilter->SetNormalize(s.mpanormalize);
00179 pMpaDecFilter->SetSpeakerConfig(IMpaDecFilter::ac3, s.ac3sc);
00180 pMpaDecFilter->SetDynamicRangeControl(IMpaDecFilter::ac3, s.ac3drc);
00181 pMpaDecFilter->SetSpeakerConfig(IMpaDecFilter::dts, s.dtssc);
00182 pMpaDecFilter->SetDynamicRangeControl(IMpaDecFilter::dts, s.dtsdrc);
00183 pMpaDecFilter->SetSpeakerConfig(IMpaDecFilter::aac, s.aacsc);
00184 pMpaDecFilter->SetBoost(s.mpaboost);
00185 }
00186
00187 return __super::OnApply();
00188 }
00189
00190 void CPPageAudioDecoder::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
00191 {
00192 SetModified();
00193
00194 CPPageBase::OnHScroll(nSBCode, nPos, pScrollBar);
00195 }