1159b3361Sopenharmony_ci/* 2159b3361Sopenharmony_ci * LAME MP3 encoder for DirectShow 3159b3361Sopenharmony_ci * Basic property page 4159b3361Sopenharmony_ci * 5159b3361Sopenharmony_ci * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. 6159b3361Sopenharmony_ci * 7159b3361Sopenharmony_ci * This library is free software; you can redistribute it and/or 8159b3361Sopenharmony_ci * modify it under the terms of the GNU Library General Public 9159b3361Sopenharmony_ci * License as published by the Free Software Foundation; either 10159b3361Sopenharmony_ci * version 2 of the License, or (at your option) any later version. 11159b3361Sopenharmony_ci * 12159b3361Sopenharmony_ci * This library is distributed in the hope that it will be useful, 13159b3361Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 14159b3361Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15159b3361Sopenharmony_ci * Library General Public License for more details. 16159b3361Sopenharmony_ci * 17159b3361Sopenharmony_ci * You should have received a copy of the GNU Library General Public 18159b3361Sopenharmony_ci * License along with this library; if not, write to the 19159b3361Sopenharmony_ci * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20159b3361Sopenharmony_ci * Boston, MA 02111-1307, USA. 21159b3361Sopenharmony_ci */ 22159b3361Sopenharmony_ci 23159b3361Sopenharmony_ci#include <streams.h> 24159b3361Sopenharmony_ci#include <olectl.h> 25159b3361Sopenharmony_ci#include <commctrl.h> 26159b3361Sopenharmony_ci#include "iaudioprops.h" 27159b3361Sopenharmony_ci#include "mpegac.h" 28159b3361Sopenharmony_ci#include "resource.h" 29159b3361Sopenharmony_ci#include "PropPage.h" 30159b3361Sopenharmony_ci#include "Reg.h" 31159b3361Sopenharmony_ci 32159b3361Sopenharmony_ci// strings to appear in comboboxes 33159b3361Sopenharmony_ciconst char * szBitRateString[2][14] = { 34159b3361Sopenharmony_ci { 35159b3361Sopenharmony_ci "32 kbps","40 kbps","48 kbps","56 kbps", 36159b3361Sopenharmony_ci "64 kbps","80 kbps","96 kbps","112 kbps", 37159b3361Sopenharmony_ci "128 kbps","160 kbps","192 kbps","224 kbps", 38159b3361Sopenharmony_ci "256 kbps","320 kbps" 39159b3361Sopenharmony_ci }, 40159b3361Sopenharmony_ci { 41159b3361Sopenharmony_ci "8 kbps","16 kbps","24 kbps","32 kbps", 42159b3361Sopenharmony_ci "40 kbps","48 kbps","56 kbps","64 kbps", 43159b3361Sopenharmony_ci "80 kbps","96 kbps","112 kbps","128 kbps", 44159b3361Sopenharmony_ci "144 kbps","160 kbps" 45159b3361Sopenharmony_ci } 46159b3361Sopenharmony_ci}; 47159b3361Sopenharmony_ci 48159b3361Sopenharmony_ciLPCSTR szQualityDesc[10] = { 49159b3361Sopenharmony_ci "High", "High", "High", "High", "High", 50159b3361Sopenharmony_ci "Medium", "Medium", 51159b3361Sopenharmony_ci "Low", "Low", 52159b3361Sopenharmony_ci "Fast mode" 53159b3361Sopenharmony_ci}; 54159b3361Sopenharmony_ci 55159b3361Sopenharmony_ciLPCSTR szVBRqDesc[10] = { 56159b3361Sopenharmony_ci "0 - ~1:4", 57159b3361Sopenharmony_ci "1 - ~1:5", 58159b3361Sopenharmony_ci "2 - ~1:6", 59159b3361Sopenharmony_ci "3 - ~1:7", 60159b3361Sopenharmony_ci "4 - ~1:9", 61159b3361Sopenharmony_ci "5 - ~1:9", 62159b3361Sopenharmony_ci "6 - ~1:10", 63159b3361Sopenharmony_ci "7 - ~1:11", 64159b3361Sopenharmony_ci "8 - ~1:12", 65159b3361Sopenharmony_ci "9 - ~1:14" 66159b3361Sopenharmony_ci}; 67159b3361Sopenharmony_ci 68159b3361Sopenharmony_cistruct SSampleRate { 69159b3361Sopenharmony_ci DWORD dwSampleRate; 70159b3361Sopenharmony_ci LPCSTR lpSampleRate; 71159b3361Sopenharmony_ci}; 72159b3361Sopenharmony_ci 73159b3361Sopenharmony_ciSSampleRate srRates[9] = { 74159b3361Sopenharmony_ci // MPEG-1 75159b3361Sopenharmony_ci {48000, "48 kHz"}, 76159b3361Sopenharmony_ci {44100, "44.1 kHz"}, 77159b3361Sopenharmony_ci {32000, "32 kHz"}, 78159b3361Sopenharmony_ci 79159b3361Sopenharmony_ci // MPEG-2 80159b3361Sopenharmony_ci {24000, "24 kHz"}, 81159b3361Sopenharmony_ci {22050, "22.05 kHz"}, 82159b3361Sopenharmony_ci {16000, "16 kHz"}, 83159b3361Sopenharmony_ci 84159b3361Sopenharmony_ci // MPEG-2.5 85159b3361Sopenharmony_ci {12000, "12 kHz"}, 86159b3361Sopenharmony_ci {11025, "11.025 kHz"}, 87159b3361Sopenharmony_ci { 8000, "8 kHz"} 88159b3361Sopenharmony_ci}; 89159b3361Sopenharmony_ci 90159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 91159b3361Sopenharmony_ci// CreateInstance 92159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 93159b3361Sopenharmony_ciCUnknown *CMpegAudEncPropertyPage::CreateInstance( LPUNKNOWN punk, HRESULT *phr ) 94159b3361Sopenharmony_ci{ 95159b3361Sopenharmony_ci CMpegAudEncPropertyPage *pNewObject 96159b3361Sopenharmony_ci = new CMpegAudEncPropertyPage( punk, phr ); 97159b3361Sopenharmony_ci 98159b3361Sopenharmony_ci if( pNewObject == NULL ) 99159b3361Sopenharmony_ci *phr = E_OUTOFMEMORY; 100159b3361Sopenharmony_ci 101159b3361Sopenharmony_ci return pNewObject; 102159b3361Sopenharmony_ci} 103159b3361Sopenharmony_ci 104159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 105159b3361Sopenharmony_ci// Constructor 106159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 107159b3361Sopenharmony_ciCMpegAudEncPropertyPage::CMpegAudEncPropertyPage(LPUNKNOWN punk, HRESULT *phr) 108159b3361Sopenharmony_ci : CBasePropertyPage(NAME("Encoder Property Page"), 109159b3361Sopenharmony_ci punk, IDD_AUDIOENCPROPS, IDS_AUDIO_PROPS_TITLE) 110159b3361Sopenharmony_ci , m_pAEProps(NULL) 111159b3361Sopenharmony_ci{ 112159b3361Sopenharmony_ci ASSERT(phr); 113159b3361Sopenharmony_ci 114159b3361Sopenharmony_ci m_srIdx = 0; 115159b3361Sopenharmony_ci 116159b3361Sopenharmony_ci InitCommonControls(); 117159b3361Sopenharmony_ci} 118159b3361Sopenharmony_ci 119159b3361Sopenharmony_ci// 120159b3361Sopenharmony_ci// OnConnect 121159b3361Sopenharmony_ci// 122159b3361Sopenharmony_ci// Give us the filter to communicate with 123159b3361Sopenharmony_ciHRESULT CMpegAudEncPropertyPage::OnConnect(IUnknown *pUnknown) 124159b3361Sopenharmony_ci{ 125159b3361Sopenharmony_ci ASSERT(m_pAEProps == NULL); 126159b3361Sopenharmony_ci 127159b3361Sopenharmony_ci // Ask the filter for it's control interface 128159b3361Sopenharmony_ci 129159b3361Sopenharmony_ci HRESULT hr = pUnknown->QueryInterface(IID_IAudioEncoderProperties,(void **)&m_pAEProps); 130159b3361Sopenharmony_ci if (FAILED(hr)) 131159b3361Sopenharmony_ci return E_NOINTERFACE; 132159b3361Sopenharmony_ci 133159b3361Sopenharmony_ci ASSERT(m_pAEProps); 134159b3361Sopenharmony_ci 135159b3361Sopenharmony_ci // Get current filter state 136159b3361Sopenharmony_ci m_pAEProps->get_Bitrate(&m_dwBitrate); 137159b3361Sopenharmony_ci m_pAEProps->get_Variable(&m_dwVariable); 138159b3361Sopenharmony_ci m_pAEProps->get_VariableMin(&m_dwMin); 139159b3361Sopenharmony_ci m_pAEProps->get_VariableMax(&m_dwMax); 140159b3361Sopenharmony_ci m_pAEProps->get_Quality(&m_dwQuality); 141159b3361Sopenharmony_ci m_pAEProps->get_VariableQ(&m_dwVBRq); 142159b3361Sopenharmony_ci m_pAEProps->get_SampleRate(&m_dwSampleRate); 143159b3361Sopenharmony_ci m_pAEProps->get_CRCFlag(&m_dwCRC); 144159b3361Sopenharmony_ci m_pAEProps->get_ForceMono(&m_dwForceMono); 145159b3361Sopenharmony_ci m_pAEProps->get_CopyrightFlag(&m_dwCopyright); 146159b3361Sopenharmony_ci m_pAEProps->get_OriginalFlag(&m_dwOriginal); 147159b3361Sopenharmony_ci 148159b3361Sopenharmony_ci return NOERROR; 149159b3361Sopenharmony_ci} 150159b3361Sopenharmony_ci 151159b3361Sopenharmony_ci// 152159b3361Sopenharmony_ci// OnDisconnect 153159b3361Sopenharmony_ci// 154159b3361Sopenharmony_ci// Release the interface 155159b3361Sopenharmony_ci 156159b3361Sopenharmony_ciHRESULT CMpegAudEncPropertyPage::OnDisconnect() 157159b3361Sopenharmony_ci{ 158159b3361Sopenharmony_ci // Release the interface 159159b3361Sopenharmony_ci if (m_pAEProps == NULL) 160159b3361Sopenharmony_ci return E_UNEXPECTED; 161159b3361Sopenharmony_ci 162159b3361Sopenharmony_ci m_pAEProps->set_Bitrate(m_dwBitrate); 163159b3361Sopenharmony_ci m_pAEProps->set_Variable(m_dwVariable); 164159b3361Sopenharmony_ci m_pAEProps->set_VariableMin(m_dwMin); 165159b3361Sopenharmony_ci m_pAEProps->set_VariableMax(m_dwMax); 166159b3361Sopenharmony_ci m_pAEProps->set_Quality(m_dwQuality); 167159b3361Sopenharmony_ci m_pAEProps->set_VariableQ(m_dwVBRq); 168159b3361Sopenharmony_ci m_pAEProps->set_SampleRate(m_dwSampleRate); 169159b3361Sopenharmony_ci m_pAEProps->set_CRCFlag(m_dwCRC); 170159b3361Sopenharmony_ci m_pAEProps->set_ForceMono(m_dwForceMono); 171159b3361Sopenharmony_ci m_pAEProps->set_CopyrightFlag(m_dwCopyright); 172159b3361Sopenharmony_ci m_pAEProps->set_OriginalFlag(m_dwOriginal); 173159b3361Sopenharmony_ci m_pAEProps->SaveAudioEncoderPropertiesToRegistry(); 174159b3361Sopenharmony_ci 175159b3361Sopenharmony_ci m_pAEProps->Release(); 176159b3361Sopenharmony_ci m_pAEProps = NULL; 177159b3361Sopenharmony_ci 178159b3361Sopenharmony_ci return NOERROR; 179159b3361Sopenharmony_ci} 180159b3361Sopenharmony_ci 181159b3361Sopenharmony_ci// 182159b3361Sopenharmony_ci// OnActivate 183159b3361Sopenharmony_ci// 184159b3361Sopenharmony_ci// Called on dialog creation 185159b3361Sopenharmony_ci 186159b3361Sopenharmony_ciHRESULT CMpegAudEncPropertyPage::OnActivate(void) 187159b3361Sopenharmony_ci{ 188159b3361Sopenharmony_ci InitPropertiesDialog(m_hwnd); 189159b3361Sopenharmony_ci 190159b3361Sopenharmony_ci return NOERROR; 191159b3361Sopenharmony_ci} 192159b3361Sopenharmony_ci 193159b3361Sopenharmony_ci// 194159b3361Sopenharmony_ci// OnDeactivate 195159b3361Sopenharmony_ci// 196159b3361Sopenharmony_ci// Called on dialog destruction 197159b3361Sopenharmony_ci 198159b3361Sopenharmony_ciHRESULT CMpegAudEncPropertyPage::OnDeactivate(void) 199159b3361Sopenharmony_ci{ 200159b3361Sopenharmony_ci return NOERROR; 201159b3361Sopenharmony_ci} 202159b3361Sopenharmony_ci 203159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 204159b3361Sopenharmony_ci// OnReceiveMessage - message handler function 205159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 206159b3361Sopenharmony_ciBOOL CMpegAudEncPropertyPage::OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) 207159b3361Sopenharmony_ci{ 208159b3361Sopenharmony_ci switch (uMsg) 209159b3361Sopenharmony_ci { 210159b3361Sopenharmony_ci case WM_HSCROLL: 211159b3361Sopenharmony_ci if ((HWND)lParam == m_hwndQuality) 212159b3361Sopenharmony_ci { 213159b3361Sopenharmony_ci int pos = SendMessage(m_hwndQuality, TBM_GETPOS, 0, 0); 214159b3361Sopenharmony_ci if (pos >= 0 && pos < 10) 215159b3361Sopenharmony_ci { 216159b3361Sopenharmony_ci SetDlgItemText(hwnd,IDC_TEXT_QUALITY,szQualityDesc[pos]); 217159b3361Sopenharmony_ci m_pAEProps->set_Quality(pos); 218159b3361Sopenharmony_ci SetDirty(); 219159b3361Sopenharmony_ci } 220159b3361Sopenharmony_ci } 221159b3361Sopenharmony_ci break; 222159b3361Sopenharmony_ci 223159b3361Sopenharmony_ci case WM_COMMAND: 224159b3361Sopenharmony_ci switch (LOWORD(wParam)) 225159b3361Sopenharmony_ci { 226159b3361Sopenharmony_ci case IDC_COMBO_CBR: 227159b3361Sopenharmony_ci if (HIWORD(wParam) == CBN_SELCHANGE) 228159b3361Sopenharmony_ci { 229159b3361Sopenharmony_ci int nBitrate = SendDlgItemMessage(hwnd, IDC_COMBO_CBR, CB_GETCURSEL, 0, 0L); 230159b3361Sopenharmony_ci DWORD dwSampleRate; 231159b3361Sopenharmony_ci m_pAEProps->get_SampleRate(&dwSampleRate); 232159b3361Sopenharmony_ci DWORD dwBitrate; 233159b3361Sopenharmony_ci 234159b3361Sopenharmony_ci if (dwSampleRate >= 32000) 235159b3361Sopenharmony_ci { 236159b3361Sopenharmony_ci // Consider MPEG-1 237159b3361Sopenharmony_ci dwBitrate = dwBitRateValue[0][nBitrate]; 238159b3361Sopenharmony_ci } 239159b3361Sopenharmony_ci else 240159b3361Sopenharmony_ci { 241159b3361Sopenharmony_ci // Consider MPEG-2/2.5 242159b3361Sopenharmony_ci dwBitrate = dwBitRateValue[1][nBitrate]; 243159b3361Sopenharmony_ci } 244159b3361Sopenharmony_ci 245159b3361Sopenharmony_ci m_pAEProps->set_Bitrate(dwBitrate); 246159b3361Sopenharmony_ci 247159b3361Sopenharmony_ci SetDirty(); 248159b3361Sopenharmony_ci } 249159b3361Sopenharmony_ci break; 250159b3361Sopenharmony_ci 251159b3361Sopenharmony_ci case IDC_COMBO_VBRMIN: 252159b3361Sopenharmony_ci if (HIWORD(wParam) == CBN_SELCHANGE) 253159b3361Sopenharmony_ci { 254159b3361Sopenharmony_ci int nVariableMin = SendDlgItemMessage(hwnd, IDC_COMBO_VBRMIN, CB_GETCURSEL, 0, 0L); 255159b3361Sopenharmony_ci DWORD dwSampleRate; 256159b3361Sopenharmony_ci m_pAEProps->get_SampleRate(&dwSampleRate); 257159b3361Sopenharmony_ci DWORD dwMin; 258159b3361Sopenharmony_ci 259159b3361Sopenharmony_ci if (dwSampleRate >= 32000) 260159b3361Sopenharmony_ci { 261159b3361Sopenharmony_ci // Consider MPEG-1 262159b3361Sopenharmony_ci dwMin = dwBitRateValue[0][nVariableMin]; 263159b3361Sopenharmony_ci } 264159b3361Sopenharmony_ci else 265159b3361Sopenharmony_ci { 266159b3361Sopenharmony_ci // Consider MPEG-2/2.5 267159b3361Sopenharmony_ci dwMin = dwBitRateValue[1][nVariableMin]; 268159b3361Sopenharmony_ci } 269159b3361Sopenharmony_ci 270159b3361Sopenharmony_ci m_pAEProps->set_VariableMin(dwMin); 271159b3361Sopenharmony_ci 272159b3361Sopenharmony_ci SetDirty(); 273159b3361Sopenharmony_ci } 274159b3361Sopenharmony_ci break; 275159b3361Sopenharmony_ci 276159b3361Sopenharmony_ci case IDC_COMBO_VBRMAX: 277159b3361Sopenharmony_ci if (HIWORD(wParam) == CBN_SELCHANGE) 278159b3361Sopenharmony_ci { 279159b3361Sopenharmony_ci int nVariableMax = SendDlgItemMessage(hwnd, IDC_COMBO_VBRMAX, CB_GETCURSEL, 0, 0L); 280159b3361Sopenharmony_ci DWORD dwSampleRate; 281159b3361Sopenharmony_ci m_pAEProps->get_SampleRate(&dwSampleRate); 282159b3361Sopenharmony_ci DWORD dwMax; 283159b3361Sopenharmony_ci 284159b3361Sopenharmony_ci if (dwSampleRate >= 32000) 285159b3361Sopenharmony_ci { 286159b3361Sopenharmony_ci // Consider MPEG-1 287159b3361Sopenharmony_ci dwMax = dwBitRateValue[0][nVariableMax]; 288159b3361Sopenharmony_ci } 289159b3361Sopenharmony_ci else 290159b3361Sopenharmony_ci { 291159b3361Sopenharmony_ci // Consider MPEG-2/2.5 292159b3361Sopenharmony_ci dwMax = dwBitRateValue[1][nVariableMax]; 293159b3361Sopenharmony_ci } 294159b3361Sopenharmony_ci 295159b3361Sopenharmony_ci m_pAEProps->set_VariableMax(dwMax); 296159b3361Sopenharmony_ci 297159b3361Sopenharmony_ci SetDirty(); 298159b3361Sopenharmony_ci } 299159b3361Sopenharmony_ci break; 300159b3361Sopenharmony_ci 301159b3361Sopenharmony_ci case IDC_COMBO_SAMPLE_RATE: 302159b3361Sopenharmony_ci if (HIWORD(wParam) == CBN_SELCHANGE) 303159b3361Sopenharmony_ci { 304159b3361Sopenharmony_ci int nSampleRate = SendDlgItemMessage(hwnd, IDC_COMBO_SAMPLE_RATE, CB_GETCURSEL, 0, 0L); 305159b3361Sopenharmony_ci 306159b3361Sopenharmony_ci if (nSampleRate < 0) 307159b3361Sopenharmony_ci nSampleRate = 0; 308159b3361Sopenharmony_ci else if (nSampleRate > 2) 309159b3361Sopenharmony_ci nSampleRate = 2; 310159b3361Sopenharmony_ci 311159b3361Sopenharmony_ci DWORD dwSampleRate = srRates[nSampleRate * 3 + m_srIdx].dwSampleRate; 312159b3361Sopenharmony_ci 313159b3361Sopenharmony_ci m_pAEProps->set_SampleRate(dwSampleRate); 314159b3361Sopenharmony_ci InitPropertiesDialog(hwnd); 315159b3361Sopenharmony_ci SetDirty(); 316159b3361Sopenharmony_ci } 317159b3361Sopenharmony_ci break; 318159b3361Sopenharmony_ci 319159b3361Sopenharmony_ci case IDC_COMBO_VBRq: 320159b3361Sopenharmony_ci if (HIWORD(wParam) == CBN_SELCHANGE) 321159b3361Sopenharmony_ci { 322159b3361Sopenharmony_ci int nVBRq = SendDlgItemMessage(hwnd, IDC_COMBO_VBRq, CB_GETCURSEL, 0, 0L); 323159b3361Sopenharmony_ci if (nVBRq >=0 && nVBRq <=9) 324159b3361Sopenharmony_ci m_pAEProps->set_VariableQ(nVBRq); 325159b3361Sopenharmony_ci SetDirty(); 326159b3361Sopenharmony_ci } 327159b3361Sopenharmony_ci break; 328159b3361Sopenharmony_ci 329159b3361Sopenharmony_ci case IDC_RADIO_CBR: 330159b3361Sopenharmony_ci case IDC_RADIO_VBR: 331159b3361Sopenharmony_ci m_pAEProps->set_Variable(LOWORD(wParam)-IDC_RADIO_CBR); 332159b3361Sopenharmony_ci SetDirty(); 333159b3361Sopenharmony_ci break; 334159b3361Sopenharmony_ci 335159b3361Sopenharmony_ci case IDC_CHECK_PES: 336159b3361Sopenharmony_ci m_pAEProps->set_PESOutputEnabled(IsDlgButtonChecked(hwnd, IDC_CHECK_PES)); 337159b3361Sopenharmony_ci SetDirty(); 338159b3361Sopenharmony_ci break; 339159b3361Sopenharmony_ci 340159b3361Sopenharmony_ci case IDC_CHECK_COPYRIGHT: 341159b3361Sopenharmony_ci m_pAEProps->set_CopyrightFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_COPYRIGHT)); 342159b3361Sopenharmony_ci SetDirty(); 343159b3361Sopenharmony_ci break; 344159b3361Sopenharmony_ci 345159b3361Sopenharmony_ci case IDC_CHECK_ORIGINAL: 346159b3361Sopenharmony_ci m_pAEProps->set_OriginalFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_ORIGINAL)); 347159b3361Sopenharmony_ci SetDirty(); 348159b3361Sopenharmony_ci break; 349159b3361Sopenharmony_ci 350159b3361Sopenharmony_ci case IDC_CHECK_CRC: 351159b3361Sopenharmony_ci m_pAEProps->set_CRCFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_CRC)); 352159b3361Sopenharmony_ci SetDirty(); 353159b3361Sopenharmony_ci break; 354159b3361Sopenharmony_ci 355159b3361Sopenharmony_ci case IDC_FORCE_MONO: 356159b3361Sopenharmony_ci m_pAEProps->set_ForceMono(IsDlgButtonChecked(hwnd, IDC_FORCE_MONO)); 357159b3361Sopenharmony_ci SetDirty(); 358159b3361Sopenharmony_ci break; 359159b3361Sopenharmony_ci } 360159b3361Sopenharmony_ci return TRUE; 361159b3361Sopenharmony_ci 362159b3361Sopenharmony_ci case WM_DESTROY: 363159b3361Sopenharmony_ci return TRUE; 364159b3361Sopenharmony_ci 365159b3361Sopenharmony_ci default: 366159b3361Sopenharmony_ci return FALSE; 367159b3361Sopenharmony_ci } 368159b3361Sopenharmony_ci 369159b3361Sopenharmony_ci return TRUE; 370159b3361Sopenharmony_ci} 371159b3361Sopenharmony_ci 372159b3361Sopenharmony_ci// 373159b3361Sopenharmony_ci// OnApplyChanges 374159b3361Sopenharmony_ci// 375159b3361Sopenharmony_ciHRESULT CMpegAudEncPropertyPage::OnApplyChanges() 376159b3361Sopenharmony_ci{ 377159b3361Sopenharmony_ci m_pAEProps->get_Bitrate(&m_dwBitrate); 378159b3361Sopenharmony_ci m_pAEProps->get_Variable(&m_dwVariable); 379159b3361Sopenharmony_ci m_pAEProps->get_VariableMin(&m_dwMin); 380159b3361Sopenharmony_ci m_pAEProps->get_VariableMax(&m_dwMax); 381159b3361Sopenharmony_ci m_pAEProps->get_Quality(&m_dwQuality); 382159b3361Sopenharmony_ci m_pAEProps->get_VariableQ(&m_dwVBRq); 383159b3361Sopenharmony_ci m_pAEProps->get_SampleRate(&m_dwSampleRate); 384159b3361Sopenharmony_ci m_pAEProps->get_CRCFlag(&m_dwCRC); 385159b3361Sopenharmony_ci m_pAEProps->get_ForceMono(&m_dwForceMono); 386159b3361Sopenharmony_ci m_pAEProps->get_CopyrightFlag(&m_dwCopyright); 387159b3361Sopenharmony_ci m_pAEProps->get_OriginalFlag(&m_dwOriginal); 388159b3361Sopenharmony_ci m_pAEProps->SaveAudioEncoderPropertiesToRegistry(); 389159b3361Sopenharmony_ci 390159b3361Sopenharmony_ci m_pAEProps->ApplyChanges(); 391159b3361Sopenharmony_ci 392159b3361Sopenharmony_ci return S_OK; 393159b3361Sopenharmony_ci} 394159b3361Sopenharmony_ci 395159b3361Sopenharmony_ci// 396159b3361Sopenharmony_ci// Initialize dialogbox controls with proper values 397159b3361Sopenharmony_ci// 398159b3361Sopenharmony_civoid CMpegAudEncPropertyPage::InitPropertiesDialog(HWND hwndParent) 399159b3361Sopenharmony_ci{ 400159b3361Sopenharmony_ci EnableControls(hwndParent, TRUE); 401159b3361Sopenharmony_ci 402159b3361Sopenharmony_ci m_hwndQuality = GetDlgItem(hwndParent,IDC_SLIDER_QUALITY); 403159b3361Sopenharmony_ci DWORD dwQuality; 404159b3361Sopenharmony_ci m_pAEProps->get_Quality(&dwQuality); 405159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_SLIDER_QUALITY, TBM_SETRANGE, 1, MAKELONG (2,9)); 406159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_SLIDER_QUALITY, TBM_SETPOS, 1, dwQuality); 407159b3361Sopenharmony_ci if (dwQuality>=0 && dwQuality<10) 408159b3361Sopenharmony_ci SetDlgItemText(hwndParent,IDC_TEXT_QUALITY,szQualityDesc[dwQuality]); 409159b3361Sopenharmony_ci 410159b3361Sopenharmony_ci // 411159b3361Sopenharmony_ci // initialize sample rate selection 412159b3361Sopenharmony_ci // 413159b3361Sopenharmony_ci DWORD dwSourceSampleRate; 414159b3361Sopenharmony_ci m_pAEProps->get_SourceSampleRate(&dwSourceSampleRate); 415159b3361Sopenharmony_ci 416159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_RESETCONTENT, 0, 0L); 417159b3361Sopenharmony_ci 418159b3361Sopenharmony_ci switch (dwSourceSampleRate) 419159b3361Sopenharmony_ci { 420159b3361Sopenharmony_ci case 48000: 421159b3361Sopenharmony_ci case 24000: 422159b3361Sopenharmony_ci case 12000: 423159b3361Sopenharmony_ci m_srIdx = 0; 424159b3361Sopenharmony_ci break; 425159b3361Sopenharmony_ci 426159b3361Sopenharmony_ci case 32000: 427159b3361Sopenharmony_ci case 16000: 428159b3361Sopenharmony_ci case 8000: 429159b3361Sopenharmony_ci m_srIdx = 2; 430159b3361Sopenharmony_ci break; 431159b3361Sopenharmony_ci 432159b3361Sopenharmony_ci case 44100: 433159b3361Sopenharmony_ci case 22050: 434159b3361Sopenharmony_ci case 11025: 435159b3361Sopenharmony_ci default: 436159b3361Sopenharmony_ci m_srIdx = 1; 437159b3361Sopenharmony_ci } 438159b3361Sopenharmony_ci 439159b3361Sopenharmony_ci for (int i = 0; i < 3; i++) 440159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)srRates[i * 3 + m_srIdx].lpSampleRate); 441159b3361Sopenharmony_ci 442159b3361Sopenharmony_ci DWORD dwSampleRate; 443159b3361Sopenharmony_ci m_pAEProps->get_SampleRate(&dwSampleRate); 444159b3361Sopenharmony_ci m_pAEProps->set_SampleRate(dwSampleRate); 445159b3361Sopenharmony_ci 446159b3361Sopenharmony_ci int nSR = 0; 447159b3361Sopenharmony_ci while (dwSampleRate != srRates[nSR * 3 + m_srIdx].dwSampleRate && nSR < 3) 448159b3361Sopenharmony_ci { 449159b3361Sopenharmony_ci nSR++; 450159b3361Sopenharmony_ci } 451159b3361Sopenharmony_ci 452159b3361Sopenharmony_ci if (nSR >= 3) 453159b3361Sopenharmony_ci nSR = 0; 454159b3361Sopenharmony_ci 455159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_SETCURSEL, nSR, 0); 456159b3361Sopenharmony_ci 457159b3361Sopenharmony_ci DWORD dwChannels; 458159b3361Sopenharmony_ci m_pAEProps->get_SourceChannels(&dwChannels); 459159b3361Sopenharmony_ci 460159b3361Sopenharmony_ci // 461159b3361Sopenharmony_ci //initialize VBRq combo box 462159b3361Sopenharmony_ci // 463159b3361Sopenharmony_ci int k; 464159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_RESETCONTENT, 0, 0); 465159b3361Sopenharmony_ci for (k = 0; k < 10; k++) 466159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szVBRqDesc[k]); 467159b3361Sopenharmony_ci DWORD dwVBRq; 468159b3361Sopenharmony_ci m_pAEProps->get_VariableQ(&dwVBRq); 469159b3361Sopenharmony_ci if (dwVBRq<0) 470159b3361Sopenharmony_ci dwVBRq = 0; 471159b3361Sopenharmony_ci if (dwVBRq>9) 472159b3361Sopenharmony_ci dwVBRq = 9; 473159b3361Sopenharmony_ci m_pAEProps->set_VariableQ(dwVBRq); 474159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_SETCURSEL, dwVBRq, 0); 475159b3361Sopenharmony_ci 476159b3361Sopenharmony_ci////////////////////////////////////// 477159b3361Sopenharmony_ci// initialize CBR selection 478159b3361Sopenharmony_ci////////////////////////////////////// 479159b3361Sopenharmony_ci int nSt; 480159b3361Sopenharmony_ci 481159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_RESETCONTENT, 0, 0); 482159b3361Sopenharmony_ci if (dwSampleRate >= 32000) 483159b3361Sopenharmony_ci { 484159b3361Sopenharmony_ci // If target sampling rate is less than 32000, consider 485159b3361Sopenharmony_ci // MPEG 1 audio 486159b3361Sopenharmony_ci nSt = 0; 487159b3361Sopenharmony_ci for (int i = 0; i < 14; i++) 488159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][i]); 489159b3361Sopenharmony_ci } 490159b3361Sopenharmony_ci else 491159b3361Sopenharmony_ci { 492159b3361Sopenharmony_ci // Consider MPEG 2 / 2.5 audio 493159b3361Sopenharmony_ci nSt = 1; 494159b3361Sopenharmony_ci for (int i = 0; i < 14 ; i++) 495159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][i]); 496159b3361Sopenharmony_ci } 497159b3361Sopenharmony_ci 498159b3361Sopenharmony_ci DWORD dwBitrate; 499159b3361Sopenharmony_ci m_pAEProps->get_Bitrate(&dwBitrate); 500159b3361Sopenharmony_ci 501159b3361Sopenharmony_ci int nBitrateSel = 0; 502159b3361Sopenharmony_ci // BitRateValue[][i] is in ascending order 503159b3361Sopenharmony_ci // We use this fact. We also know there are 14 bitrate values available. 504159b3361Sopenharmony_ci // We are going to use the closest possible, so we can limit loop with 13 505159b3361Sopenharmony_ci while (nBitrateSel < 13 && dwBitRateValue[nSt][nBitrateSel] < dwBitrate) 506159b3361Sopenharmony_ci nBitrateSel++; 507159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_SETCURSEL, nBitrateSel, 0); 508159b3361Sopenharmony_ci 509159b3361Sopenharmony_ci // check if the specified bitrate is found exactly and correct if not 510159b3361Sopenharmony_ci if (dwBitRateValue[nSt][nBitrateSel] != dwBitrate) 511159b3361Sopenharmony_ci { 512159b3361Sopenharmony_ci dwBitrate = dwBitRateValue[nSt][nBitrateSel]; 513159b3361Sopenharmony_ci // we can change it, because it is independent of any other parameters 514159b3361Sopenharmony_ci // (but depends on some of them!) 515159b3361Sopenharmony_ci m_pAEProps->set_Bitrate(dwBitrate); 516159b3361Sopenharmony_ci } 517159b3361Sopenharmony_ci 518159b3361Sopenharmony_ci // 519159b3361Sopenharmony_ci // Check VBR/CBR radio button 520159b3361Sopenharmony_ci // 521159b3361Sopenharmony_ci DWORD dwVariable; 522159b3361Sopenharmony_ci m_pAEProps->get_Variable(&dwVariable); 523159b3361Sopenharmony_ci CheckRadioButton(hwndParent, IDC_RADIO_CBR, IDC_RADIO_VBR, IDC_RADIO_CBR + dwVariable); 524159b3361Sopenharmony_ci 525159b3361Sopenharmony_ci////////////////////////////////////////////////// 526159b3361Sopenharmony_ci// initialize VBR selection 527159b3361Sopenharmony_ci////////////////////////////////////////////////// 528159b3361Sopenharmony_ci //VBRMIN, VBRMAX 529159b3361Sopenharmony_ci int j, nST; 530159b3361Sopenharmony_ci 531159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_RESETCONTENT, 0, 0); 532159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_RESETCONTENT, 0, 0); 533159b3361Sopenharmony_ci 534159b3361Sopenharmony_ci if (dwSampleRate >= 32000) 535159b3361Sopenharmony_ci { 536159b3361Sopenharmony_ci nST = 0; 537159b3361Sopenharmony_ci for (j=0; j<14 ;j++) { 538159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][j]); 539159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][j]); 540159b3361Sopenharmony_ci } 541159b3361Sopenharmony_ci } 542159b3361Sopenharmony_ci else 543159b3361Sopenharmony_ci { 544159b3361Sopenharmony_ci nST = 1; 545159b3361Sopenharmony_ci for (j = 0; j < 14; j++) 546159b3361Sopenharmony_ci { 547159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][j]); 548159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][j]); 549159b3361Sopenharmony_ci } 550159b3361Sopenharmony_ci } 551159b3361Sopenharmony_ci 552159b3361Sopenharmony_ci DWORD dwMin,dwMax; 553159b3361Sopenharmony_ci m_pAEProps->get_VariableMin(&dwMin); 554159b3361Sopenharmony_ci m_pAEProps->get_VariableMax(&dwMax); 555159b3361Sopenharmony_ci 556159b3361Sopenharmony_ci int nVariableMinSel = 0; 557159b3361Sopenharmony_ci int nVariableMaxSel = 0; 558159b3361Sopenharmony_ci 559159b3361Sopenharmony_ci // BitRateValue[][i] is in ascending order 560159b3361Sopenharmony_ci // We use this fact. We also know there are 14 bitrate values available. 561159b3361Sopenharmony_ci // We are going to use the closest possible, so we can limit loop with 13 562159b3361Sopenharmony_ci while (nVariableMinSel<13 && dwBitRateValue[nST][nVariableMinSel] < dwMin) 563159b3361Sopenharmony_ci nVariableMinSel++; 564159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_SETCURSEL, nVariableMinSel, 0); 565159b3361Sopenharmony_ci 566159b3361Sopenharmony_ci while (nVariableMaxSel<13 && dwBitRateValue[nST][nVariableMaxSel] < dwMax) 567159b3361Sopenharmony_ci nVariableMaxSel++; 568159b3361Sopenharmony_ci SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_SETCURSEL, nVariableMaxSel, 0); 569159b3361Sopenharmony_ci 570159b3361Sopenharmony_ci 571159b3361Sopenharmony_ci // check if the specified bitrate is found exactly and correct if not 572159b3361Sopenharmony_ci if (dwBitRateValue[nST][nVariableMinSel] != dwMin) 573159b3361Sopenharmony_ci { 574159b3361Sopenharmony_ci dwMin = dwBitRateValue[nST][nVariableMinSel]; 575159b3361Sopenharmony_ci // we can change it, because it is independent of any other parameters 576159b3361Sopenharmony_ci // (but depends on some of them!) 577159b3361Sopenharmony_ci m_pAEProps->set_VariableMin(dwMin); 578159b3361Sopenharmony_ci } 579159b3361Sopenharmony_ci 580159b3361Sopenharmony_ci // check if the specified bitrate is found exactly and correct if not 581159b3361Sopenharmony_ci if (dwBitRateValue[nST][nVariableMaxSel] != dwMax) 582159b3361Sopenharmony_ci { 583159b3361Sopenharmony_ci dwMax = dwBitRateValue[nST][nVariableMaxSel]; 584159b3361Sopenharmony_ci // we can change it, because it is independent of any other parameters 585159b3361Sopenharmony_ci // (but depends on some of them!) 586159b3361Sopenharmony_ci m_pAEProps->set_VariableMax(dwMax); 587159b3361Sopenharmony_ci } 588159b3361Sopenharmony_ci 589159b3361Sopenharmony_ci // 590159b3361Sopenharmony_ci // initialize checkboxes 591159b3361Sopenharmony_ci // 592159b3361Sopenharmony_ci DWORD dwPES; 593159b3361Sopenharmony_ci m_pAEProps->get_PESOutputEnabled(&dwPES); 594159b3361Sopenharmony_ci 595159b3361Sopenharmony_ci dwPES = 0; 596159b3361Sopenharmony_ci CheckDlgButton(hwndParent, IDC_CHECK_PES, dwPES ? BST_CHECKED : BST_UNCHECKED); 597159b3361Sopenharmony_ci 598159b3361Sopenharmony_ci DWORD dwCRC; 599159b3361Sopenharmony_ci m_pAEProps->get_CRCFlag(&dwCRC); 600159b3361Sopenharmony_ci CheckDlgButton(hwndParent, IDC_CHECK_CRC, dwCRC ? BST_CHECKED : BST_UNCHECKED); 601159b3361Sopenharmony_ci 602159b3361Sopenharmony_ci DWORD dwForceMono; 603159b3361Sopenharmony_ci m_pAEProps->get_ForceMono(&dwForceMono); 604159b3361Sopenharmony_ci CheckDlgButton(hwndParent, IDC_FORCE_MONO, dwForceMono ? BST_CHECKED : BST_UNCHECKED); 605159b3361Sopenharmony_ci 606159b3361Sopenharmony_ci DWORD dwCopyright; 607159b3361Sopenharmony_ci m_pAEProps->get_CopyrightFlag(&dwCopyright); 608159b3361Sopenharmony_ci CheckDlgButton(hwndParent, IDC_CHECK_COPYRIGHT, dwCopyright ? BST_CHECKED : BST_UNCHECKED); 609159b3361Sopenharmony_ci 610159b3361Sopenharmony_ci DWORD dwOriginal; 611159b3361Sopenharmony_ci m_pAEProps->get_OriginalFlag(&dwOriginal); 612159b3361Sopenharmony_ci CheckDlgButton(hwndParent, IDC_CHECK_ORIGINAL, dwOriginal ? BST_CHECKED : BST_UNCHECKED); 613159b3361Sopenharmony_ci} 614159b3361Sopenharmony_ci 615159b3361Sopenharmony_ci 616159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 617159b3361Sopenharmony_ci// EnableControls 618159b3361Sopenharmony_ci//////////////////////////////////////////////////////////////// 619159b3361Sopenharmony_civoid CMpegAudEncPropertyPage::EnableControls(HWND hwndParent, bool bEnable) 620159b3361Sopenharmony_ci{ 621159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_PES), false);//bEnable); 622159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_CBR), bEnable); 623159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_CBR), bEnable); 624159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_VBR), bEnable); 625159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_VBRMIN), bEnable); 626159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_VBRMAX), bEnable); 627159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_COPYRIGHT), bEnable); 628159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_ORIGINAL), bEnable); 629159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_CRC), bEnable); 630159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_FORCE_MONO), bEnable); 631159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_SLIDER_QUALITY), bEnable); 632159b3361Sopenharmony_ci EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_SAMPLE_RATE), bEnable); 633159b3361Sopenharmony_ci} 634159b3361Sopenharmony_ci 635159b3361Sopenharmony_ci// 636159b3361Sopenharmony_ci// SetDirty 637159b3361Sopenharmony_ci// 638159b3361Sopenharmony_ci// notifies the property page site of changes 639159b3361Sopenharmony_ci 640159b3361Sopenharmony_civoid CMpegAudEncPropertyPage::SetDirty() 641159b3361Sopenharmony_ci{ 642159b3361Sopenharmony_ci m_bDirty = TRUE; 643159b3361Sopenharmony_ci if (m_pPageSite) 644159b3361Sopenharmony_ci m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY); 645159b3361Sopenharmony_ci} 646159b3361Sopenharmony_ci 647