Changeset 846 for trunk/src/multimedia/audio/qaudiooutput_win32_p.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/multimedia/audio/qaudiooutput_win32_p.cpp
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 201 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation ([email protected]) … … 53 53 #include "qaudiooutput_win32_p.h" 54 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 55 102 //#define DEBUG_AUDIO 1 56 103 … … 147 194 for(int i = 0; i < count; i++) { 148 195 waveOutUnprepareHeader(hWaveOut,blocks, sizeof(WAVEHDR)); 149 blocks+ =sizeof(WAVEHDR);196 blocks+; 150 197 } 151 198 HeapFree(GetProcessHeap(), 0, blockArray); … … 205 252 qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()"; 206 253 #endif 207 if (!(settings.frequency() >= 8000 && settings.frequency() <= 48000)) { 254 255 period_size = 0; 256 257 if (!settings.isValid()) { 258 qWarning("QAudioOutput: open error, invalid format."); 259 } else if (settings.channels() <= 0) { 260 qWarning("QAudioOutput: open error, invalid number of channels (%d).", 261 settings.channels()); 262 } else if (settings.sampleSize() <= 0) { 263 qWarning("QAudioOutput: open error, invalid sample size (%d).", 264 settings.sampleSize()); 265 } else if (settings.frequency() < 8000 || settings.frequency() > 48000) { 266 qWarning("QAudioOutput: open error, frequency out of range (%d).", settings.frequency()); 267 } else if (buffer_size == 0) { 268 // Default buffer size, 200ms, default period size is 40ms 269 buffer_size 270 = (settings.frequency() 271 * settings.channels() 272 * settings.sampleSize() 273 + 39) / 40; 274 period_size = buffer_size / 5; 275 } else { 276 period_size = buffer_size / 5; 277 } 278 279 if (period_size == 0) { 208 280 errorState = QAudio::OpenError; 209 281 deviceState = QAudio::StoppedState; 210 282 emit stateChanged(deviceState); 211 qWarning("QAudioOutput: open error, frequency out of range.");212 283 return false; 213 284 } 214 if(buffer_size == 0) { 215 // Default buffer size, 200ms, default period size is 40ms 216 buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2; 217 period_size = buffer_size/5; 218 } else { 219 period_size = buffer_size/5; 220 } 285 221 286 waveBlocks = allocateBlocks(period_size, buffer_size/period_size); 222 287 … … 251 316 == MMSYSERR_NOERROR) { 252 317 QString tmp; 253 tmp = QString ::fromUtf16((const unsigned short*)woc.szPname);318 tmp = QString*)woc.szPname); 254 319 if(tmp.compare(QLatin1String(m_device)) == 0) { 255 320 devId = ii; … … 259 324 } 260 325 261 if(waveOutOpen(&hWaveOut, devId, &wfx, 262 (DWORD_PTR)&waveOutProc, 263 (DWORD_PTR) this, 264 CALLBACK_FUNCTION) != MMSYSERR_NOERROR) { 265 errorState = QAudio::OpenError; 266 deviceState = QAudio::StoppedState; 267 emit stateChanged(deviceState); 268 qWarning("QAudioOutput: open error"); 269 return false; 326 if ( settings.channels() <= 2) { 327 if(waveOutOpen(&hWaveOut, devId, &wfx, 328 (DWORD_PTR)&waveOutProc, 329 (DWORD_PTR) this, 330 CALLBACK_FUNCTION) != MMSYSERR_NOERROR) { 331 errorState = QAudio::OpenError; 332 deviceState = QAudio::StoppedState; 333 emit stateChanged(deviceState); 334 qWarning("QAudioOutput: open error"); 335 return false; 336 } 337 } else { 338 WAVEFORMATEXTENSIBLE wfex; 339 wfex.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; 340 wfex.Format.nChannels = settings.channels(); 341 wfex.Format.wBitsPerSample = settings.sampleSize(); 342 wfex.Format.nSamplesPerSec = settings.frequency(); 343 wfex.Format.nBlockAlign = wfex.Format.nChannels*wfex.Format.wBitsPerSample/8; 344 wfex.Format.nAvgBytesPerSec=wfex.Format.nSamplesPerSec*wfex.Format.nBlockAlign; 345 wfex.Samples.wValidBitsPerSample=wfex.Format.wBitsPerSample; 346 static const GUID _KSDATAFORMAT_SUBTYPE_PCM = { 347 0x00000001, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; 348 wfex.SubFormat=_KSDATAFORMAT_SUBTYPE_PCM; 349 wfex.Format.cbSize=22; 350 351 wfex.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT; 352 if (settings.channels() >= 4) 353 wfex.dwChannelMask |= SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT; 354 if (settings.channels() >= 6) 355 wfex.dwChannelMask |= SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY; 356 if (settings.channels() == 8) 357 wfex.dwChannelMask |= SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT; 358 359 if(waveOutOpen(&hWaveOut, devId, &wfex.Format, 360 (DWORD_PTR)&waveOutProc, 361 (DWORD_PTR) this, 362 CALLBACK_FUNCTION) != MMSYSERR_NOERROR) { 363 errorState = QAudio::OpenError; 364 deviceState = QAudio::StoppedState; 365 emit stateChanged(deviceState); 366 qWarning("QAudioOutput: open error"); 367 return false; 368 } 270 369 } 271 370 … … 488 587 } 489 588 if ( out < l) { 490 // Didn t write all data589 // Didnt write all data 491 590 audioSource->seek(audioSource->pos()-(l-out)); 492 591 }
Note:
See TracChangeset
for help on using the changeset viewer.