| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 namespace webrtc { | 38 namespace webrtc { |
| 39 | 39 |
| 40 // ============================================================================ | 40 // ============================================================================ |
| 41 // Construction & Destruction | 41 // Construction & Destruction |
| 42 // ============================================================================ | 42 // ============================================================================ |
| 43 | 43 |
| 44 // ---------------------------------------------------------------------------- | 44 // ---------------------------------------------------------------------------- |
| 45 // AudioDeviceWindowsWave - ctor | 45 // AudioDeviceWindowsWave - ctor |
| 46 // ---------------------------------------------------------------------------- | 46 // ---------------------------------------------------------------------------- |
| 47 | 47 |
| 48 AudioDeviceWindowsWave::AudioDeviceWindowsWave(const int32_t id) : | 48 AudioDeviceWindowsWave::AudioDeviceWindowsWave(const int32_t id) |
| 49 _ptrAudioBuffer(NULL), | 49 : _ptrAudioBuffer(nullptr), |
| 50 _critSect(*CriticalSectionWrapper::CreateCriticalSection()), | 50 _critSect(*CriticalSectionWrapper::CreateCriticalSection()), |
| 51 _timeEvent(*EventTimerWrapper::Create()), | 51 _timeEvent(*EventTimerWrapper::Create()), |
| 52 _recStartEvent(*EventWrapper::Create()), | 52 _recStartEvent(*EventWrapper::Create()), |
| 53 _playStartEvent(*EventWrapper::Create()), | 53 _playStartEvent(*EventWrapper::Create()), |
| 54 _hGetCaptureVolumeThread(NULL), | 54 _hGetCaptureVolumeThread(nullptr), |
| 55 _hShutdownGetVolumeEvent(NULL), | 55 _hShutdownGetVolumeEvent(nullptr), |
| 56 _hSetCaptureVolumeThread(NULL), | 56 _hSetCaptureVolumeThread(nullptr), |
| 57 _hShutdownSetVolumeEvent(NULL), | 57 _hShutdownSetVolumeEvent(nullptr), |
| 58 _hSetCaptureVolumeEvent(NULL), | 58 _hSetCaptureVolumeEvent(nullptr), |
| 59 _critSectCb(*CriticalSectionWrapper::CreateCriticalSection()), | 59 _critSectCb(*CriticalSectionWrapper::CreateCriticalSection()), |
| 60 _id(id), | 60 _id(id), |
| 61 _mixerManager(id), | 61 _mixerManager(id), |
| 62 _usingInputDeviceIndex(false), | 62 _usingInputDeviceIndex(false), |
| 63 _usingOutputDeviceIndex(false), | 63 _usingOutputDeviceIndex(false), |
| 64 _inputDevice(AudioDeviceModule::kDefaultDevice), | 64 _inputDevice(AudioDeviceModule::kDefaultDevice), |
| 65 _outputDevice(AudioDeviceModule::kDefaultDevice), | 65 _outputDevice(AudioDeviceModule::kDefaultDevice), |
| 66 _inputDeviceIndex(0), | 66 _inputDeviceIndex(0), |
| 67 _outputDeviceIndex(0), | 67 _outputDeviceIndex(0), |
| 68 _inputDeviceIsSpecified(false), | 68 _inputDeviceIsSpecified(false), |
| 69 _outputDeviceIsSpecified(false), | 69 _outputDeviceIsSpecified(false), |
| 70 _initialized(false), | 70 _initialized(false), |
| 71 _recIsInitialized(false), | 71 _recIsInitialized(false), |
| 72 _playIsInitialized(false), | 72 _playIsInitialized(false), |
| 73 _recording(false), | 73 _recording(false), |
| 74 _playing(false), | 74 _playing(false), |
| 75 _startRec(false), | 75 _startRec(false), |
| 76 _stopRec(false), | 76 _stopRec(false), |
| 77 _startPlay(false), | 77 _startPlay(false), |
| 78 _stopPlay(false), | 78 _stopPlay(false), |
| 79 _AGC(false), | 79 _AGC(false), |
| 80 _hWaveIn(NULL), | 80 _hWaveIn(nullptr), |
| 81 _hWaveOut(NULL), | 81 _hWaveOut(nullptr), |
| 82 _recChannels(N_REC_CHANNELS), | 82 _recChannels(N_REC_CHANNELS), |
| 83 _playChannels(N_PLAY_CHANNELS), | 83 _playChannels(N_PLAY_CHANNELS), |
| 84 _recBufCount(0), | 84 _recBufCount(0), |
| 85 _recPutBackDelay(0), | 85 _recPutBackDelay(0), |
| 86 _recDelayCount(0), | 86 _recDelayCount(0), |
| 87 _playBufCount(0), | 87 _playBufCount(0), |
| 88 _prevPlayTime(0), | 88 _prevPlayTime(0), |
| 89 _prevRecTime(0), | 89 _prevRecTime(0), |
| 90 _prevTimerCheckTime(0), | 90 _prevTimerCheckTime(0), |
| 91 _timesdwBytes(0), | 91 _timesdwBytes(0), |
| 92 _timerFaults(0), | 92 _timerFaults(0), |
| 93 _timerRestartAttempts(0), | 93 _timerRestartAttempts(0), |
| 94 _no_of_msecleft_warnings(0), | 94 _no_of_msecleft_warnings(0), |
| 95 _MAX_minBuffer(65), | 95 _MAX_minBuffer(65), |
| 96 _useHeader(0), | 96 _useHeader(0), |
| 97 _dTcheckPlayBufDelay(10), | 97 _dTcheckPlayBufDelay(10), |
| 98 _playBufDelay(80), | 98 _playBufDelay(80), |
| 99 _playBufDelayFixed(80), | 99 _playBufDelayFixed(80), |
| 100 _minPlayBufDelay(20), | 100 _minPlayBufDelay(20), |
| 101 _avgCPULoad(0), | 101 _avgCPULoad(0), |
| 102 _sndCardPlayDelay(0), | 102 _sndCardPlayDelay(0), |
| 103 _sndCardRecDelay(0), | 103 _sndCardRecDelay(0), |
| 104 _plSampOld(0), | 104 _plSampOld(0), |
| 105 _rcSampOld(0), | 105 _rcSampOld(0), |
| 106 _playBufType(AudioDeviceModule::kAdaptiveBufferSize), | 106 _playBufType(AudioDeviceModule::kAdaptiveBufferSize), |
| 107 _recordedBytes(0), | 107 _recordedBytes(0), |
| 108 _playWarning(0), | 108 _playWarning(0), |
| 109 _playError(0), | 109 _playError(0), |
| 110 _recWarning(0), | 110 _recWarning(0), |
| 111 _recError(0), | 111 _recError(0), |
| 112 _newMicLevel(0), | 112 _newMicLevel(0), |
| 113 _minMicVolume(0), | 113 _minMicVolume(0), |
| 114 _maxMicVolume(0) | 114 _maxMicVolume(0) { |
| 115 { | 115 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id, "%s created", __FUNCTION__); |
| 116 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id, "%s created", __FUNCTION__
); | |
| 117 | 116 |
| 118 // Initialize value, set to 0 if it fails | 117 // Initialize value, set to 0 if it fails |
| 119 if (!QueryPerformanceFrequency(&_perfFreq)) | 118 if (!QueryPerformanceFrequency(&_perfFreq)) { |
| 120 { | 119 _perfFreq.QuadPart = 0; |
| 121 _perfFreq.QuadPart = 0; | 120 } |
| 122 } | |
| 123 | 121 |
| 124 _hShutdownGetVolumeEvent = CreateEvent(NULL, FALSE, FALSE, NULL); | 122 _hShutdownGetVolumeEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr); |
| 125 _hShutdownSetVolumeEvent = CreateEvent(NULL, FALSE, FALSE, NULL); | 123 _hShutdownSetVolumeEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr); |
| 126 _hSetCaptureVolumeEvent = CreateEvent(NULL, FALSE, FALSE, NULL); | 124 _hSetCaptureVolumeEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr); |
| 127 } | 125 } |
| 128 | 126 |
| 129 // ---------------------------------------------------------------------------- | 127 // ---------------------------------------------------------------------------- |
| 130 // AudioDeviceWindowsWave - dtor | 128 // AudioDeviceWindowsWave - dtor |
| 131 // ---------------------------------------------------------------------------- | 129 // ---------------------------------------------------------------------------- |
| 132 | 130 |
| 133 AudioDeviceWindowsWave::~AudioDeviceWindowsWave() | 131 AudioDeviceWindowsWave::~AudioDeviceWindowsWave() |
| 134 { | 132 { |
| 135 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s destroyed", __FUNCTIO
N__); | 133 WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s destroyed", __FUNCTIO
N__); |
| 136 | 134 |
| 137 Terminate(); | 135 Terminate(); |
| 138 | 136 |
| 139 delete &_recStartEvent; | 137 delete &_recStartEvent; |
| 140 delete &_playStartEvent; | 138 delete &_playStartEvent; |
| 141 delete &_timeEvent; | 139 delete &_timeEvent; |
| 142 delete &_critSect; | 140 delete &_critSect; |
| 143 delete &_critSectCb; | 141 delete &_critSectCb; |
| 144 | 142 |
| 145 if (NULL != _hShutdownGetVolumeEvent) | 143 if (nullptr != _hShutdownGetVolumeEvent) { |
| 146 { | 144 CloseHandle(_hShutdownGetVolumeEvent); |
| 147 CloseHandle(_hShutdownGetVolumeEvent); | 145 _hShutdownGetVolumeEvent = nullptr; |
| 148 _hShutdownGetVolumeEvent = NULL; | |
| 149 } | 146 } |
| 150 | 147 |
| 151 if (NULL != _hShutdownSetVolumeEvent) | 148 if (nullptr != _hShutdownSetVolumeEvent) { |
| 152 { | 149 CloseHandle(_hShutdownSetVolumeEvent); |
| 153 CloseHandle(_hShutdownSetVolumeEvent); | 150 _hShutdownSetVolumeEvent = nullptr; |
| 154 _hShutdownSetVolumeEvent = NULL; | |
| 155 } | 151 } |
| 156 | 152 |
| 157 if (NULL != _hSetCaptureVolumeEvent) | 153 if (nullptr != _hSetCaptureVolumeEvent) { |
| 158 { | 154 CloseHandle(_hSetCaptureVolumeEvent); |
| 159 CloseHandle(_hSetCaptureVolumeEvent); | 155 _hSetCaptureVolumeEvent = nullptr; |
| 160 _hSetCaptureVolumeEvent = NULL; | |
| 161 } | 156 } |
| 162 } | 157 } |
| 163 | 158 |
| 164 // ============================================================================ | 159 // ============================================================================ |
| 165 // API | 160 // API |
| 166 // ============================================================================ | 161 // ============================================================================ |
| 167 | 162 |
| 168 // ---------------------------------------------------------------------------- | 163 // ---------------------------------------------------------------------------- |
| 169 // AttachAudioBuffer | 164 // AttachAudioBuffer |
| 170 // ---------------------------------------------------------------------------- | 165 // ---------------------------------------------------------------------------- |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 if (!_timeEvent.StartTimer(periodic, TIMER_PERIOD_MS)) { | 228 if (!_timeEvent.StartTimer(periodic, TIMER_PERIOD_MS)) { |
| 234 LOG(LS_ERROR) << "failed to start the timer event"; | 229 LOG(LS_ERROR) << "failed to start the timer event"; |
| 235 _ptrThread->Stop(); | 230 _ptrThread->Stop(); |
| 236 _ptrThread.reset(); | 231 _ptrThread.reset(); |
| 237 return InitStatus::OTHER_ERROR; | 232 return InitStatus::OTHER_ERROR; |
| 238 } | 233 } |
| 239 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, | 234 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, |
| 240 "periodic timer (dT=%d) is now active", TIMER_PERIOD_MS); | 235 "periodic timer (dT=%d) is now active", TIMER_PERIOD_MS); |
| 241 | 236 |
| 242 _hGetCaptureVolumeThread = | 237 _hGetCaptureVolumeThread = |
| 243 CreateThread(NULL, 0, GetCaptureVolumeThread, this, 0, NULL); | 238 CreateThread(nullptr, 0, GetCaptureVolumeThread, this, 0, nullptr); |
| 244 if (_hGetCaptureVolumeThread == NULL) { | 239 if (_hGetCaptureVolumeThread == nullptr) { |
| 245 LOG(LS_ERROR) << " failed to create the volume getter thread"; | 240 LOG(LS_ERROR) << " failed to create the volume getter thread"; |
| 246 return InitStatus::OTHER_ERROR; | 241 return InitStatus::OTHER_ERROR; |
| 247 } | 242 } |
| 248 | 243 |
| 249 SetThreadPriority(_hGetCaptureVolumeThread, THREAD_PRIORITY_NORMAL); | 244 SetThreadPriority(_hGetCaptureVolumeThread, THREAD_PRIORITY_NORMAL); |
| 250 | 245 |
| 251 _hSetCaptureVolumeThread = | 246 _hSetCaptureVolumeThread = |
| 252 CreateThread(NULL, 0, SetCaptureVolumeThread, this, 0, NULL); | 247 CreateThread(nullptr, 0, SetCaptureVolumeThread, this, 0, nullptr); |
| 253 if (_hSetCaptureVolumeThread == NULL) { | 248 if (_hSetCaptureVolumeThread == nullptr) { |
| 254 LOG(LS_ERROR) << " failed to create the volume setter thread"; | 249 LOG(LS_ERROR) << " failed to create the volume setter thread"; |
| 255 return InitStatus::OTHER_ERROR; | 250 return InitStatus::OTHER_ERROR; |
| 256 } | 251 } |
| 257 | 252 |
| 258 SetThreadPriority(_hSetCaptureVolumeThread, THREAD_PRIORITY_NORMAL); | 253 SetThreadPriority(_hSetCaptureVolumeThread, THREAD_PRIORITY_NORMAL); |
| 259 | 254 |
| 260 _initialized = true; | 255 _initialized = true; |
| 261 | 256 |
| 262 return InitStatus::OK; | 257 return InitStatus::OK; |
| 263 } | 258 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 _critSect.Enter(); | 291 _critSect.Enter(); |
| 297 SetEvent(_hShutdownGetVolumeEvent); | 292 SetEvent(_hShutdownGetVolumeEvent); |
| 298 _critSect.Leave(); | 293 _critSect.Leave(); |
| 299 int32_t ret = WaitForSingleObject(_hGetCaptureVolumeThread, 2000); | 294 int32_t ret = WaitForSingleObject(_hGetCaptureVolumeThread, 2000); |
| 300 if (ret != WAIT_OBJECT_0) | 295 if (ret != WAIT_OBJECT_0) |
| 301 { | 296 { |
| 302 // the thread did not stop as it should | 297 // the thread did not stop as it should |
| 303 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, | 298 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 304 " failed to close down volume getter thread"); | 299 " failed to close down volume getter thread"); |
| 305 CloseHandle(_hGetCaptureVolumeThread); | 300 CloseHandle(_hGetCaptureVolumeThread); |
| 306 _hGetCaptureVolumeThread = NULL; | 301 _hGetCaptureVolumeThread = nullptr; |
| 307 return -1; | 302 return -1; |
| 308 } | 303 } |
| 309 _critSect.Enter(); | 304 _critSect.Enter(); |
| 310 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, | 305 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, |
| 311 " volume getter thread is now closed"); | 306 " volume getter thread is now closed"); |
| 312 | 307 |
| 313 SetEvent(_hShutdownSetVolumeEvent); | 308 SetEvent(_hShutdownSetVolumeEvent); |
| 314 _critSect.Leave(); | 309 _critSect.Leave(); |
| 315 ret = WaitForSingleObject(_hSetCaptureVolumeThread, 2000); | 310 ret = WaitForSingleObject(_hSetCaptureVolumeThread, 2000); |
| 316 if (ret != WAIT_OBJECT_0) | 311 if (ret != WAIT_OBJECT_0) |
| 317 { | 312 { |
| 318 // the thread did not stop as it should | 313 // the thread did not stop as it should |
| 319 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, | 314 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 320 " failed to close down volume setter thread"); | 315 " failed to close down volume setter thread"); |
| 321 CloseHandle(_hSetCaptureVolumeThread); | 316 CloseHandle(_hSetCaptureVolumeThread); |
| 322 _hSetCaptureVolumeThread = NULL; | 317 _hSetCaptureVolumeThread = nullptr; |
| 323 return -1; | 318 return -1; |
| 324 } | 319 } |
| 325 _critSect.Enter(); | 320 _critSect.Enter(); |
| 326 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, | 321 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, |
| 327 " volume setter thread is now closed"); | 322 " volume setter thread is now closed"); |
| 328 | 323 |
| 329 CloseHandle(_hGetCaptureVolumeThread); | 324 CloseHandle(_hGetCaptureVolumeThread); |
| 330 _hGetCaptureVolumeThread = NULL; | 325 _hGetCaptureVolumeThread = nullptr; |
| 331 | 326 |
| 332 CloseHandle(_hSetCaptureVolumeThread); | 327 CloseHandle(_hSetCaptureVolumeThread); |
| 333 _hSetCaptureVolumeThread = NULL; | 328 _hSetCaptureVolumeThread = nullptr; |
| 334 | 329 |
| 335 _critSect.Leave(); | 330 _critSect.Leave(); |
| 336 | 331 |
| 337 _timeEvent.StopTimer(); | 332 _timeEvent.StopTimer(); |
| 338 | 333 |
| 339 _initialized = false; | 334 _initialized = false; |
| 340 _outputDeviceIsSpecified = false; | 335 _outputDeviceIsSpecified = false; |
| 341 _inputDeviceIsSpecified = false; | 336 _inputDeviceIsSpecified = false; |
| 342 | 337 |
| 343 return 0; | 338 return 0; |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 // ---------------------------------------------------------------------------- | 614 // ---------------------------------------------------------------------------- |
| 620 | 615 |
| 621 int32_t AudioDeviceWindowsWave::SetWaveOutVolume(uint16_t volumeLeft, uint16_t v
olumeRight) | 616 int32_t AudioDeviceWindowsWave::SetWaveOutVolume(uint16_t volumeLeft, uint16_t v
olumeRight) |
| 622 { | 617 { |
| 623 | 618 |
| 624 MMRESULT res(0); | 619 MMRESULT res(0); |
| 625 WAVEOUTCAPS caps; | 620 WAVEOUTCAPS caps; |
| 626 | 621 |
| 627 CriticalSectionScoped lock(&_critSect); | 622 CriticalSectionScoped lock(&_critSect); |
| 628 | 623 |
| 629 if (_hWaveOut == NULL) | 624 if (_hWaveOut == nullptr) { |
| 630 { | 625 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, |
| 631 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "no open playout dev
ice exists => using default"); | 626 "no open playout device exists => using default"); |
| 632 } | 627 } |
| 633 | 628 |
| 634 // To determine whether the device supports volume control on both | 629 // To determine whether the device supports volume control on both |
| 635 // the left and right channels, use the WAVECAPS_LRVOLUME flag. | 630 // the left and right channels, use the WAVECAPS_LRVOLUME flag. |
| 636 // | 631 // |
| 637 res = waveOutGetDevCaps((UINT_PTR)_hWaveOut, &caps, sizeof(WAVEOUTCAPS)); | 632 res = waveOutGetDevCaps((UINT_PTR)_hWaveOut, &caps, sizeof(WAVEOUTCAPS)); |
| 638 if (MMSYSERR_NOERROR != res) | 633 if (MMSYSERR_NOERROR != res) |
| 639 { | 634 { |
| 640 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutGetDevCaps()
failed (err=%d)", res); | 635 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutGetDevCaps()
failed (err=%d)", res); |
| 641 TraceWaveOutError(res); | 636 TraceWaveOutError(res); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 // ---------------------------------------------------------------------------- | 678 // ---------------------------------------------------------------------------- |
| 684 | 679 |
| 685 int32_t AudioDeviceWindowsWave::WaveOutVolume(uint16_t& volumeLeft, uint16_t& vo
lumeRight) const | 680 int32_t AudioDeviceWindowsWave::WaveOutVolume(uint16_t& volumeLeft, uint16_t& vo
lumeRight) const |
| 686 { | 681 { |
| 687 | 682 |
| 688 MMRESULT res(0); | 683 MMRESULT res(0); |
| 689 WAVEOUTCAPS caps; | 684 WAVEOUTCAPS caps; |
| 690 | 685 |
| 691 CriticalSectionScoped lock(&_critSect); | 686 CriticalSectionScoped lock(&_critSect); |
| 692 | 687 |
| 693 if (_hWaveOut == NULL) | 688 if (_hWaveOut == nullptr) { |
| 694 { | 689 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, |
| 695 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "no open playout dev
ice exists => using default"); | 690 "no open playout device exists => using default"); |
| 696 } | 691 } |
| 697 | 692 |
| 698 // To determine whether the device supports volume control on both | 693 // To determine whether the device supports volume control on both |
| 699 // the left and right channels, use the WAVECAPS_LRVOLUME flag. | 694 // the left and right channels, use the WAVECAPS_LRVOLUME flag. |
| 700 // | 695 // |
| 701 res = waveOutGetDevCaps((UINT_PTR)_hWaveOut, &caps, sizeof(WAVEOUTCAPS)); | 696 res = waveOutGetDevCaps((UINT_PTR)_hWaveOut, &caps, sizeof(WAVEOUTCAPS)); |
| 702 if (MMSYSERR_NOERROR != res) | 697 if (MMSYSERR_NOERROR != res) |
| 703 { | 698 { |
| 704 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutGetDevCaps()
failed (err=%d)", res); | 699 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutGetDevCaps()
failed (err=%d)", res); |
| 705 TraceWaveOutError(res); | 700 TraceWaveOutError(res); |
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1271 | 1266 |
| 1272 uint16_t nDevices(PlayoutDevices()); | 1267 uint16_t nDevices(PlayoutDevices()); |
| 1273 | 1268 |
| 1274 // Special fix for the case when the user asks for the name of the default d
evice. | 1269 // Special fix for the case when the user asks for the name of the default d
evice. |
| 1275 // | 1270 // |
| 1276 if (index == (uint16_t)(-1)) | 1271 if (index == (uint16_t)(-1)) |
| 1277 { | 1272 { |
| 1278 index = 0; | 1273 index = 0; |
| 1279 } | 1274 } |
| 1280 | 1275 |
| 1281 if ((index > (nDevices-1)) || (name == NULL)) | 1276 if ((index > (nDevices - 1)) || (name == nullptr)) { |
| 1282 { | 1277 return -1; |
| 1283 return -1; | |
| 1284 } | 1278 } |
| 1285 | 1279 |
| 1286 memset(name, 0, kAdmMaxDeviceNameSize); | 1280 memset(name, 0, kAdmMaxDeviceNameSize); |
| 1287 | 1281 |
| 1288 if (guid != NULL) | 1282 if (guid != nullptr) { |
| 1289 { | 1283 memset(guid, 0, kAdmMaxGuidSize); |
| 1290 memset(guid, 0, kAdmMaxGuidSize); | |
| 1291 } | 1284 } |
| 1292 | 1285 |
| 1293 WAVEOUTCAPSW caps; // szPname member (product name (NULL terminated) is a
WCHAR | 1286 WAVEOUTCAPSW |
| 1287 caps; // szPname member (product name (nullptr terminated) is a WCHAR |
| 1294 MMRESULT res; | 1288 MMRESULT res; |
| 1295 | 1289 |
| 1296 res = waveOutGetDevCapsW(index, &caps, sizeof(WAVEOUTCAPSW)); | 1290 res = waveOutGetDevCapsW(index, &caps, sizeof(WAVEOUTCAPSW)); |
| 1297 if (res != MMSYSERR_NOERROR) | 1291 if (res != MMSYSERR_NOERROR) |
| 1298 { | 1292 { |
| 1299 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutGetDevCapsW(
) failed (err=%d)", res); | 1293 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutGetDevCapsW(
) failed (err=%d)", res); |
| 1300 return -1; | 1294 return -1; |
| 1301 } | 1295 } |
| 1302 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, name, kAdmMaxDeviceNam
eSize, NULL, NULL) == 0) | 1296 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, name, |
| 1303 { | 1297 kAdmMaxDeviceNameSize, nullptr, nullptr) == 0) { |
| 1304 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiByte(C
P_UTF8) failed with error code %d - 1", GetLastError()); | 1298 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 1299 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 1", |
| 1300 GetLastError()); |
| 1305 } | 1301 } |
| 1306 | 1302 |
| 1307 if (guid == NULL) | 1303 if (guid == nullptr) { |
| 1308 { | 1304 return 0; |
| 1309 return 0; | |
| 1310 } | 1305 } |
| 1311 | 1306 |
| 1312 // It is possible to get the unique endpoint ID string using the Wave API. | 1307 // It is possible to get the unique endpoint ID string using the Wave API. |
| 1313 // However, it is only supported on Windows Vista and Windows 7. | 1308 // However, it is only supported on Windows Vista and Windows 7. |
| 1314 | 1309 |
| 1315 size_t cbEndpointId(0); | 1310 size_t cbEndpointId(0); |
| 1316 | 1311 |
| 1317 // Get the size (including the terminating null) of the endpoint ID string o
f the waveOut device. | 1312 // Get the size (including the terminating null) of the endpoint ID string o
f the waveOut device. |
| 1318 // Windows Vista supports the DRV_QUERYFUNCTIONINSTANCEIDSIZE and DRV_QUERYF
UNCTIONINSTANCEID messages. | 1313 // Windows Vista supports the DRV_QUERYFUNCTIONINSTANCEIDSIZE and DRV_QUERYF
UNCTIONINSTANCEID messages. |
| 1319 res = waveOutMessage((HWAVEOUT)IntToPtr(index), | 1314 res = waveOutMessage((HWAVEOUT)IntToPtr(index), |
| 1320 DRV_QUERYFUNCTIONINSTANCEIDSIZE, | 1315 DRV_QUERYFUNCTIONINSTANCEIDSIZE, |
| 1321 (DWORD_PTR)&cbEndpointId, NULL); | 1316 (DWORD_PTR)&cbEndpointId, NULL); |
| 1322 if (res != MMSYSERR_NOERROR) | 1317 if (res != MMSYSERR_NOERROR) |
| 1323 { | 1318 { |
| 1324 // DRV_QUERYFUNCTIONINSTANCEIDSIZE is not supported <=> earlier version
of Windows than Vista | 1319 // DRV_QUERYFUNCTIONINSTANCEIDSIZE is not supported <=> earlier version
of Windows than Vista |
| 1325 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveOutMessage(DRV_QUE
RYFUNCTIONINSTANCEIDSIZE) failed (err=%d)", res); | 1320 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveOutMessage(DRV_QUE
RYFUNCTIONINSTANCEIDSIZE) failed (err=%d)", res); |
| 1326 TraceWaveOutError(res); | 1321 TraceWaveOutError(res); |
| 1327 // Best we can do is to copy the friendly name and use it as guid | 1322 // Best we can do is to copy the friendly name and use it as guid |
| 1328 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, kAdmMaxGuidS
ize, NULL, NULL) == 0) | 1323 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, |
| 1329 { | 1324 kAdmMaxGuidSize, nullptr, nullptr) == 0) { |
| 1330 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiBy
te(CP_UTF8) failed with error code %d - 2", GetLastError()); | 1325 WEBRTC_TRACE( |
| 1326 kTraceError, kTraceAudioDevice, _id, |
| 1327 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 2", |
| 1328 GetLastError()); |
| 1331 } | 1329 } |
| 1332 return 0; | 1330 return 0; |
| 1333 } | 1331 } |
| 1334 | 1332 |
| 1335 // waveOutMessage(DRV_QUERYFUNCTIONINSTANCEIDSIZE) worked => we are on a Vis
ta or Windows 7 device | 1333 // waveOutMessage(DRV_QUERYFUNCTIONINSTANCEIDSIZE) worked => we are on a Vis
ta or Windows 7 device |
| 1336 | 1334 |
| 1337 WCHAR *pstrEndpointId = NULL; | 1335 WCHAR* pstrEndpointId = nullptr; |
| 1338 pstrEndpointId = (WCHAR*)CoTaskMemAlloc(cbEndpointId); | 1336 pstrEndpointId = (WCHAR*)CoTaskMemAlloc(cbEndpointId); |
| 1339 | 1337 |
| 1340 // Get the endpoint ID string for this waveOut device. | 1338 // Get the endpoint ID string for this waveOut device. |
| 1341 res = waveOutMessage((HWAVEOUT)IntToPtr(index), | 1339 res = waveOutMessage((HWAVEOUT)IntToPtr(index), |
| 1342 DRV_QUERYFUNCTIONINSTANCEID, | 1340 DRV_QUERYFUNCTIONINSTANCEID, |
| 1343 (DWORD_PTR)pstrEndpointId, | 1341 (DWORD_PTR)pstrEndpointId, |
| 1344 cbEndpointId); | 1342 cbEndpointId); |
| 1345 if (res != MMSYSERR_NOERROR) | 1343 if (res != MMSYSERR_NOERROR) |
| 1346 { | 1344 { |
| 1347 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveOutMessage(DRV_QUE
RYFUNCTIONINSTANCEID) failed (err=%d)", res); | 1345 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveOutMessage(DRV_QUE
RYFUNCTIONINSTANCEID) failed (err=%d)", res); |
| 1348 TraceWaveOutError(res); | 1346 TraceWaveOutError(res); |
| 1349 // Best we can do is to copy the friendly name and use it as guid | 1347 // Best we can do is to copy the friendly name and use it as guid |
| 1350 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, kAdmMaxGuidS
ize, NULL, NULL) == 0) | 1348 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, |
| 1351 { | 1349 kAdmMaxGuidSize, nullptr, nullptr) == 0) { |
| 1352 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiBy
te(CP_UTF8) failed with error code %d - 3", GetLastError()); | 1350 WEBRTC_TRACE( |
| 1351 kTraceError, kTraceAudioDevice, _id, |
| 1352 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 3", |
| 1353 GetLastError()); |
| 1353 } | 1354 } |
| 1354 CoTaskMemFree(pstrEndpointId); | 1355 CoTaskMemFree(pstrEndpointId); |
| 1355 return 0; | 1356 return 0; |
| 1356 } | 1357 } |
| 1357 | 1358 |
| 1358 if (WideCharToMultiByte(CP_UTF8, 0, pstrEndpointId, -1, guid, kAdmMaxGuidSiz
e, NULL, NULL) == 0) | 1359 if (WideCharToMultiByte(CP_UTF8, 0, pstrEndpointId, -1, guid, |
| 1359 { | 1360 kAdmMaxGuidSize, nullptr, nullptr) == 0) { |
| 1360 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiByte(C
P_UTF8) failed with error code %d - 4", GetLastError()); | 1361 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 1362 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 4", |
| 1363 GetLastError()); |
| 1361 } | 1364 } |
| 1362 CoTaskMemFree(pstrEndpointId); | 1365 CoTaskMemFree(pstrEndpointId); |
| 1363 | 1366 |
| 1364 return 0; | 1367 return 0; |
| 1365 } | 1368 } |
| 1366 | 1369 |
| 1367 // ---------------------------------------------------------------------------- | 1370 // ---------------------------------------------------------------------------- |
| 1368 // RecordingDeviceName | 1371 // RecordingDeviceName |
| 1369 // ---------------------------------------------------------------------------- | 1372 // ---------------------------------------------------------------------------- |
| 1370 | 1373 |
| 1371 int32_t AudioDeviceWindowsWave::RecordingDeviceName( | 1374 int32_t AudioDeviceWindowsWave::RecordingDeviceName( |
| 1372 uint16_t index, | 1375 uint16_t index, |
| 1373 char name[kAdmMaxDeviceNameSize], | 1376 char name[kAdmMaxDeviceNameSize], |
| 1374 char guid[kAdmMaxGuidSize]) | 1377 char guid[kAdmMaxGuidSize]) |
| 1375 { | 1378 { |
| 1376 | 1379 |
| 1377 uint16_t nDevices(RecordingDevices()); | 1380 uint16_t nDevices(RecordingDevices()); |
| 1378 | 1381 |
| 1379 // Special fix for the case when the user asks for the name of the default d
evice. | 1382 // Special fix for the case when the user asks for the name of the default d
evice. |
| 1380 // | 1383 // |
| 1381 if (index == (uint16_t)(-1)) | 1384 if (index == (uint16_t)(-1)) |
| 1382 { | 1385 { |
| 1383 index = 0; | 1386 index = 0; |
| 1384 } | 1387 } |
| 1385 | 1388 |
| 1386 if ((index > (nDevices-1)) || (name == NULL)) | 1389 if ((index > (nDevices - 1)) || (name == nullptr)) { |
| 1387 { | 1390 return -1; |
| 1388 return -1; | |
| 1389 } | 1391 } |
| 1390 | 1392 |
| 1391 memset(name, 0, kAdmMaxDeviceNameSize); | 1393 memset(name, 0, kAdmMaxDeviceNameSize); |
| 1392 | 1394 |
| 1393 if (guid != NULL) | 1395 if (guid != nullptr) { |
| 1394 { | 1396 memset(guid, 0, kAdmMaxGuidSize); |
| 1395 memset(guid, 0, kAdmMaxGuidSize); | |
| 1396 } | 1397 } |
| 1397 | 1398 |
| 1398 WAVEINCAPSW caps; // szPname member (product name (NULL terminated) is a
WCHAR | 1399 WAVEINCAPSW |
| 1400 caps; // szPname member (product name (nullptr terminated) is a WCHAR |
| 1399 MMRESULT res; | 1401 MMRESULT res; |
| 1400 | 1402 |
| 1401 res = waveInGetDevCapsW(index, &caps, sizeof(WAVEINCAPSW)); | 1403 res = waveInGetDevCapsW(index, &caps, sizeof(WAVEINCAPSW)); |
| 1402 if (res != MMSYSERR_NOERROR) | 1404 if (res != MMSYSERR_NOERROR) |
| 1403 { | 1405 { |
| 1404 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveInGetDevCapsW()
failed (err=%d)", res); | 1406 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveInGetDevCapsW()
failed (err=%d)", res); |
| 1405 return -1; | 1407 return -1; |
| 1406 } | 1408 } |
| 1407 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, name, kAdmMaxDeviceNam
eSize, NULL, NULL) == 0) | 1409 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, name, |
| 1408 { | 1410 kAdmMaxDeviceNameSize, nullptr, nullptr) == 0) { |
| 1409 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiByte(C
P_UTF8) failed with error code %d - 1", GetLastError()); | 1411 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 1412 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 1", |
| 1413 GetLastError()); |
| 1410 } | 1414 } |
| 1411 | 1415 |
| 1412 if (guid == NULL) | 1416 if (guid == nullptr) { |
| 1413 { | 1417 return 0; |
| 1414 return 0; | |
| 1415 } | 1418 } |
| 1416 | 1419 |
| 1417 // It is possible to get the unique endpoint ID string using the Wave API. | 1420 // It is possible to get the unique endpoint ID string using the Wave API. |
| 1418 // However, it is only supported on Windows Vista and Windows 7. | 1421 // However, it is only supported on Windows Vista and Windows 7. |
| 1419 | 1422 |
| 1420 size_t cbEndpointId(0); | 1423 size_t cbEndpointId(0); |
| 1421 | 1424 |
| 1422 // Get the size (including the terminating null) of the endpoint ID string o
f the waveOut device. | 1425 // Get the size (including the terminating null) of the endpoint ID string o
f the waveOut device. |
| 1423 // Windows Vista supports the DRV_QUERYFUNCTIONINSTANCEIDSIZE and DRV_QUERYF
UNCTIONINSTANCEID messages. | 1426 // Windows Vista supports the DRV_QUERYFUNCTIONINSTANCEIDSIZE and DRV_QUERYF
UNCTIONINSTANCEID messages. |
| 1424 res = waveInMessage((HWAVEIN)IntToPtr(index), | 1427 res = |
| 1425 DRV_QUERYFUNCTIONINSTANCEIDSIZE, | 1428 waveInMessage((HWAVEIN)IntToPtr(index), DRV_QUERYFUNCTIONINSTANCEIDSIZE, |
| 1426 (DWORD_PTR)&cbEndpointId, NULL); | 1429 (DWORD_PTR)&cbEndpointId, NULL); |
| 1427 if (res != MMSYSERR_NOERROR) | 1430 if (res != MMSYSERR_NOERROR) |
| 1428 { | 1431 { |
| 1429 // DRV_QUERYFUNCTIONINSTANCEIDSIZE is not supported <=> earlier version
of Windows than Vista | 1432 // DRV_QUERYFUNCTIONINSTANCEIDSIZE is not supported <=> earlier version
of Windows than Vista |
| 1430 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveInMessage(DRV_QUER
YFUNCTIONINSTANCEIDSIZE) failed (err=%d)", res); | 1433 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveInMessage(DRV_QUER
YFUNCTIONINSTANCEIDSIZE) failed (err=%d)", res); |
| 1431 TraceWaveInError(res); | 1434 TraceWaveInError(res); |
| 1432 // Best we can do is to copy the friendly name and use it as guid | 1435 // Best we can do is to copy the friendly name and use it as guid |
| 1433 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, kAdmMaxGuidS
ize, NULL, NULL) == 0) | 1436 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, |
| 1434 { | 1437 kAdmMaxGuidSize, nullptr, nullptr) == 0) { |
| 1435 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiBy
te(CP_UTF8) failed with error code %d - 2", GetLastError()); | 1438 WEBRTC_TRACE( |
| 1439 kTraceError, kTraceAudioDevice, _id, |
| 1440 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 2", |
| 1441 GetLastError()); |
| 1436 } | 1442 } |
| 1437 return 0; | 1443 return 0; |
| 1438 } | 1444 } |
| 1439 | 1445 |
| 1440 // waveOutMessage(DRV_QUERYFUNCTIONINSTANCEIDSIZE) worked => we are on a Vis
ta or Windows 7 device | 1446 // waveOutMessage(DRV_QUERYFUNCTIONINSTANCEIDSIZE) worked => we are on a Vis
ta or Windows 7 device |
| 1441 | 1447 |
| 1442 WCHAR *pstrEndpointId = NULL; | 1448 WCHAR* pstrEndpointId = nullptr; |
| 1443 pstrEndpointId = (WCHAR*)CoTaskMemAlloc(cbEndpointId); | 1449 pstrEndpointId = (WCHAR*)CoTaskMemAlloc(cbEndpointId); |
| 1444 | 1450 |
| 1445 // Get the endpoint ID string for this waveOut device. | 1451 // Get the endpoint ID string for this waveOut device. |
| 1446 res = waveInMessage((HWAVEIN)IntToPtr(index), | 1452 res = waveInMessage((HWAVEIN)IntToPtr(index), |
| 1447 DRV_QUERYFUNCTIONINSTANCEID, | 1453 DRV_QUERYFUNCTIONINSTANCEID, |
| 1448 (DWORD_PTR)pstrEndpointId, | 1454 (DWORD_PTR)pstrEndpointId, |
| 1449 cbEndpointId); | 1455 cbEndpointId); |
| 1450 if (res != MMSYSERR_NOERROR) | 1456 if (res != MMSYSERR_NOERROR) |
| 1451 { | 1457 { |
| 1452 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveInMessage(DRV_QUER
YFUNCTIONINSTANCEID) failed (err=%d)", res); | 1458 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "waveInMessage(DRV_QUER
YFUNCTIONINSTANCEID) failed (err=%d)", res); |
| 1453 TraceWaveInError(res); | 1459 TraceWaveInError(res); |
| 1454 // Best we can do is to copy the friendly name and use it as guid | 1460 // Best we can do is to copy the friendly name and use it as guid |
| 1455 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, kAdmMaxGuidS
ize, NULL, NULL) == 0) | 1461 if (WideCharToMultiByte(CP_UTF8, 0, caps.szPname, -1, guid, |
| 1456 { | 1462 kAdmMaxGuidSize, nullptr, nullptr) == 0) { |
| 1457 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiBy
te(CP_UTF8) failed with error code %d - 3", GetLastError()); | 1463 WEBRTC_TRACE( |
| 1464 kTraceError, kTraceAudioDevice, _id, |
| 1465 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 3", |
| 1466 GetLastError()); |
| 1458 } | 1467 } |
| 1459 CoTaskMemFree(pstrEndpointId); | 1468 CoTaskMemFree(pstrEndpointId); |
| 1460 return 0; | 1469 return 0; |
| 1461 } | 1470 } |
| 1462 | 1471 |
| 1463 if (WideCharToMultiByte(CP_UTF8, 0, pstrEndpointId, -1, guid, kAdmMaxGuidSiz
e, NULL, NULL) == 0) | 1472 if (WideCharToMultiByte(CP_UTF8, 0, pstrEndpointId, -1, guid, |
| 1464 { | 1473 kAdmMaxGuidSize, nullptr, nullptr) == 0) { |
| 1465 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "WideCharToMultiByte(C
P_UTF8) failed with error code %d - 4", GetLastError()); | 1474 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 1475 "WideCharToMultiByte(CP_UTF8) failed with error code %d - 4", |
| 1476 GetLastError()); |
| 1466 } | 1477 } |
| 1467 CoTaskMemFree(pstrEndpointId); | 1478 CoTaskMemFree(pstrEndpointId); |
| 1468 | 1479 |
| 1469 return 0; | 1480 return 0; |
| 1470 } | 1481 } |
| 1471 | 1482 |
| 1472 // ---------------------------------------------------------------------------- | 1483 // ---------------------------------------------------------------------------- |
| 1473 // RecordingDevices | 1484 // RecordingDevices |
| 1474 // ---------------------------------------------------------------------------- | 1485 // ---------------------------------------------------------------------------- |
| 1475 | 1486 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1608 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "InitSpeaker() faile
d"); | 1619 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "InitSpeaker() faile
d"); |
| 1609 } | 1620 } |
| 1610 | 1621 |
| 1611 // Enumerate all availiable output devices | 1622 // Enumerate all availiable output devices |
| 1612 EnumeratePlayoutDevices(); | 1623 EnumeratePlayoutDevices(); |
| 1613 | 1624 |
| 1614 // Start by closing any existing wave-output devices | 1625 // Start by closing any existing wave-output devices |
| 1615 // | 1626 // |
| 1616 MMRESULT res(MMSYSERR_ERROR); | 1627 MMRESULT res(MMSYSERR_ERROR); |
| 1617 | 1628 |
| 1618 if (_hWaveOut != NULL) | 1629 if (_hWaveOut != nullptr) { |
| 1619 { | 1630 res = waveOutClose(_hWaveOut); |
| 1620 res = waveOutClose(_hWaveOut); | 1631 if (MMSYSERR_NOERROR != res) { |
| 1621 if (MMSYSERR_NOERROR != res) | 1632 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, |
| 1622 { | 1633 "waveOutClose() failed (err=%d)", res); |
| 1623 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutClose()
failed (err=%d)", res); | 1634 TraceWaveOutError(res); |
| 1624 TraceWaveOutError(res); | 1635 } |
| 1625 } | |
| 1626 } | 1636 } |
| 1627 | 1637 |
| 1628 // Set the output wave format | 1638 // Set the output wave format |
| 1629 // | 1639 // |
| 1630 WAVEFORMATEX waveFormat; | 1640 WAVEFORMATEX waveFormat; |
| 1631 | 1641 |
| 1632 waveFormat.wFormatTag = WAVE_FORMAT_PCM; | 1642 waveFormat.wFormatTag = WAVE_FORMAT_PCM; |
| 1633 waveFormat.nChannels = _playChannels; // mono <=> 1, stereo <=> 2 | 1643 waveFormat.nChannels = _playChannels; // mono <=> 1, stereo <=> 2 |
| 1634 waveFormat.nSamplesPerSec = N_PLAY_SAMPLES_PER_SEC; | 1644 waveFormat.nSamplesPerSec = N_PLAY_SAMPLES_PER_SEC; |
| 1635 waveFormat.wBitsPerSample = 16; | 1645 waveFormat.wBitsPerSample = 16; |
| 1636 waveFormat.nBlockAlign = waveFormat.nChannels * (waveFormat.wBitsPerSamp
le/8); | 1646 waveFormat.nBlockAlign = waveFormat.nChannels * (waveFormat.wBitsPerSamp
le/8); |
| 1637 waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAl
ign; | 1647 waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAl
ign; |
| 1638 waveFormat.cbSize = 0; | 1648 waveFormat.cbSize = 0; |
| 1639 | 1649 |
| 1640 // Open the given waveform-audio output device for playout | 1650 // Open the given waveform-audio output device for playout |
| 1641 // | 1651 // |
| 1642 HWAVEOUT hWaveOut(NULL); | 1652 HWAVEOUT hWaveOut(nullptr); |
| 1643 | 1653 |
| 1644 if (IsUsingOutputDeviceIndex()) | 1654 if (IsUsingOutputDeviceIndex()) |
| 1645 { | 1655 { |
| 1646 // verify settings first | 1656 // verify settings first |
| 1647 res = waveOutOpen(NULL, _outputDeviceIndex, &waveFormat, 0, 0, CALLBACK_
NULL | WAVE_FORMAT_QUERY); | 1657 res = waveOutOpen(nullptr, _outputDeviceIndex, &waveFormat, 0, 0, |
| 1658 CALLBACK_NULL | WAVE_FORMAT_QUERY); |
| 1648 if (MMSYSERR_NOERROR == res) | 1659 if (MMSYSERR_NOERROR == res) |
| 1649 { | 1660 { |
| 1650 // open the given waveform-audio output device for recording | 1661 // open the given waveform-audio output device for recording |
| 1651 res = waveOutOpen(&hWaveOut, _outputDeviceIndex, &waveFormat, 0, 0,
CALLBACK_NULL); | 1662 res = waveOutOpen(&hWaveOut, _outputDeviceIndex, &waveFormat, 0, 0, |
| 1663 CALLBACK_NULL); |
| 1652 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening output dev
ice corresponding to device ID %u", _outputDeviceIndex); | 1664 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening output dev
ice corresponding to device ID %u", _outputDeviceIndex); |
| 1653 } | 1665 } |
| 1654 } | 1666 } |
| 1655 else | 1667 else |
| 1656 { | 1668 { |
| 1657 if (_outputDevice == AudioDeviceModule::kDefaultCommunicationDevice) | 1669 if (_outputDevice == AudioDeviceModule::kDefaultCommunicationDevice) |
| 1658 { | 1670 { |
| 1659 // check if it is possible to open the default communication device
(supported on Windows 7) | 1671 // check if it is possible to open the default communication device
(supported on Windows 7) |
| 1660 res = waveOutOpen(NULL, WAVE_MAPPER, &waveFormat, 0, 0, CALLBACK_NUL
L | WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE | WAVE_FORMAT_QUERY); | 1672 res = waveOutOpen(nullptr, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1673 CALLBACK_NULL | |
| 1674 WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE | |
| 1675 WAVE_FORMAT_QUERY); |
| 1661 if (MMSYSERR_NOERROR == res) | 1676 if (MMSYSERR_NOERROR == res) |
| 1662 { | 1677 { |
| 1663 // if so, open the default communication device for real | 1678 // if so, open the default communication device for real |
| 1664 res = waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormat, 0, 0, CAL
LBACK_NULL | WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE); | 1679 res = waveOutOpen( |
| 1680 &hWaveOut, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1681 CALLBACK_NULL | WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE); |
| 1665 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening defaul
t communication device"); | 1682 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening defaul
t communication device"); |
| 1666 } | 1683 } |
| 1667 else | 1684 else |
| 1668 { | 1685 { |
| 1669 // use default device since default communication device was not
avaliable | 1686 // use default device since default communication device was not
avaliable |
| 1670 res = waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormat, 0, 0, CAL
LBACK_NULL); | 1687 res = waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1688 CALLBACK_NULL); |
| 1671 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "unable to open
default communication device => using default instead"); | 1689 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "unable to open
default communication device => using default instead"); |
| 1672 } | 1690 } |
| 1673 } | 1691 } |
| 1674 else if (_outputDevice == AudioDeviceModule::kDefaultDevice) | 1692 else if (_outputDevice == AudioDeviceModule::kDefaultDevice) |
| 1675 { | 1693 { |
| 1676 // open default device since it has been requested | 1694 // open default device since it has been requested |
| 1677 res = waveOutOpen(NULL, WAVE_MAPPER, &waveFormat, 0, 0, CALLBACK_NUL
L | WAVE_FORMAT_QUERY); | 1695 res = waveOutOpen(nullptr, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1696 CALLBACK_NULL | WAVE_FORMAT_QUERY); |
| 1678 if (MMSYSERR_NOERROR == res) | 1697 if (MMSYSERR_NOERROR == res) |
| 1679 { | 1698 { |
| 1680 res = waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormat, 0, 0, CAL
LBACK_NULL); | 1699 res = waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1681 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening defaul
t output device"); | 1700 CALLBACK_NULL); |
| 1701 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, |
| 1702 "opening default output device"); |
| 1682 } | 1703 } |
| 1683 } | 1704 } |
| 1684 } | 1705 } |
| 1685 | 1706 |
| 1686 if (MMSYSERR_NOERROR != res) | 1707 if (MMSYSERR_NOERROR != res) |
| 1687 { | 1708 { |
| 1688 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "waveOutOpen() failed
(err=%d)", res); | 1709 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "waveOutOpen() failed
(err=%d)", res); |
| 1689 TraceWaveOutError(res); | 1710 TraceWaveOutError(res); |
| 1690 return -1; | 1711 return -1; |
| 1691 } | 1712 } |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1807 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "InitMicrophone() fa
iled"); | 1828 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "InitMicrophone() fa
iled"); |
| 1808 } | 1829 } |
| 1809 | 1830 |
| 1810 // Enumerate all availiable input devices | 1831 // Enumerate all availiable input devices |
| 1811 EnumerateRecordingDevices(); | 1832 EnumerateRecordingDevices(); |
| 1812 | 1833 |
| 1813 // Start by closing any existing wave-input devices | 1834 // Start by closing any existing wave-input devices |
| 1814 // | 1835 // |
| 1815 MMRESULT res(MMSYSERR_ERROR); | 1836 MMRESULT res(MMSYSERR_ERROR); |
| 1816 | 1837 |
| 1817 if (_hWaveIn != NULL) | 1838 if (_hWaveIn != nullptr) { |
| 1818 { | 1839 res = waveInClose(_hWaveIn); |
| 1819 res = waveInClose(_hWaveIn); | 1840 if (MMSYSERR_NOERROR != res) { |
| 1820 if (MMSYSERR_NOERROR != res) | 1841 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, |
| 1821 { | 1842 "waveInClose() failed (err=%d)", res); |
| 1822 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveInClose() f
ailed (err=%d)", res); | 1843 TraceWaveInError(res); |
| 1823 TraceWaveInError(res); | 1844 } |
| 1824 } | |
| 1825 } | 1845 } |
| 1826 | 1846 |
| 1827 // Set the input wave format | 1847 // Set the input wave format |
| 1828 // | 1848 // |
| 1829 WAVEFORMATEX waveFormat; | 1849 WAVEFORMATEX waveFormat; |
| 1830 | 1850 |
| 1831 waveFormat.wFormatTag = WAVE_FORMAT_PCM; | 1851 waveFormat.wFormatTag = WAVE_FORMAT_PCM; |
| 1832 waveFormat.nChannels = _recChannels; // mono <=> 1, stereo <=> 2 | 1852 waveFormat.nChannels = _recChannels; // mono <=> 1, stereo <=> 2 |
| 1833 waveFormat.nSamplesPerSec = N_REC_SAMPLES_PER_SEC; | 1853 waveFormat.nSamplesPerSec = N_REC_SAMPLES_PER_SEC; |
| 1834 waveFormat.wBitsPerSample = 16; | 1854 waveFormat.wBitsPerSample = 16; |
| 1835 waveFormat.nBlockAlign = waveFormat.nChannels * (waveFormat.wBitsPerSamp
le/8); | 1855 waveFormat.nBlockAlign = waveFormat.nChannels * (waveFormat.wBitsPerSamp
le/8); |
| 1836 waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAl
ign; | 1856 waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAl
ign; |
| 1837 waveFormat.cbSize = 0; | 1857 waveFormat.cbSize = 0; |
| 1838 | 1858 |
| 1839 // Open the given waveform-audio input device for recording | 1859 // Open the given waveform-audio input device for recording |
| 1840 // | 1860 // |
| 1841 HWAVEIN hWaveIn(NULL); | 1861 HWAVEIN hWaveIn(nullptr); |
| 1842 | 1862 |
| 1843 if (IsUsingInputDeviceIndex()) | 1863 if (IsUsingInputDeviceIndex()) |
| 1844 { | 1864 { |
| 1845 // verify settings first | 1865 // verify settings first |
| 1846 res = waveInOpen(NULL, _inputDeviceIndex, &waveFormat, 0, 0, CALLBACK_NU
LL | WAVE_FORMAT_QUERY); | 1866 res = waveInOpen(nullptr, _inputDeviceIndex, &waveFormat, 0, 0, |
| 1867 CALLBACK_NULL | WAVE_FORMAT_QUERY); |
| 1847 if (MMSYSERR_NOERROR == res) | 1868 if (MMSYSERR_NOERROR == res) |
| 1848 { | 1869 { |
| 1849 // open the given waveform-audio input device for recording | 1870 // open the given waveform-audio input device for recording |
| 1850 res = waveInOpen(&hWaveIn, _inputDeviceIndex, &waveFormat, 0, 0, CAL
LBACK_NULL); | 1871 res = waveInOpen(&hWaveIn, _inputDeviceIndex, &waveFormat, 0, 0, |
| 1872 CALLBACK_NULL); |
| 1851 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening input devi
ce corresponding to device ID %u", _inputDeviceIndex); | 1873 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening input devi
ce corresponding to device ID %u", _inputDeviceIndex); |
| 1852 } | 1874 } |
| 1853 } | 1875 } |
| 1854 else | 1876 else |
| 1855 { | 1877 { |
| 1856 if (_inputDevice == AudioDeviceModule::kDefaultCommunicationDevice) | 1878 if (_inputDevice == AudioDeviceModule::kDefaultCommunicationDevice) |
| 1857 { | 1879 { |
| 1858 // check if it is possible to open the default communication device
(supported on Windows 7) | 1880 // check if it is possible to open the default communication device
(supported on Windows 7) |
| 1859 res = waveInOpen(NULL, WAVE_MAPPER, &waveFormat, 0, 0, CALLBACK_NULL
| WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE | WAVE_FORMAT_QUERY); | 1881 res = waveInOpen(nullptr, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1882 CALLBACK_NULL | |
| 1883 WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE | |
| 1884 WAVE_FORMAT_QUERY); |
| 1860 if (MMSYSERR_NOERROR == res) | 1885 if (MMSYSERR_NOERROR == res) |
| 1861 { | 1886 { |
| 1862 // if so, open the default communication device for real | 1887 // if so, open the default communication device for real |
| 1863 res = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveFormat, 0, 0, CALLB
ACK_NULL | WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE); | 1888 res = waveInOpen( |
| 1889 &hWaveIn, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1890 CALLBACK_NULL | WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE); |
| 1864 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening defaul
t communication device"); | 1891 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening defaul
t communication device"); |
| 1865 } | 1892 } |
| 1866 else | 1893 else |
| 1867 { | 1894 { |
| 1868 // use default device since default communication device was not
avaliable | 1895 // use default device since default communication device was not
avaliable |
| 1869 res = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveFormat, 0, 0, CALLB
ACK_NULL); | 1896 res = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1897 CALLBACK_NULL); |
| 1870 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "unable to open
default communication device => using default instead"); | 1898 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "unable to open
default communication device => using default instead"); |
| 1871 } | 1899 } |
| 1872 } | 1900 } |
| 1873 else if (_inputDevice == AudioDeviceModule::kDefaultDevice) | 1901 else if (_inputDevice == AudioDeviceModule::kDefaultDevice) |
| 1874 { | 1902 { |
| 1875 // open default device since it has been requested | 1903 // open default device since it has been requested |
| 1876 res = waveInOpen(NULL, WAVE_MAPPER, &waveFormat, 0, 0, CALLBACK_NULL
| WAVE_FORMAT_QUERY); | 1904 res = waveInOpen(nullptr, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1905 CALLBACK_NULL | WAVE_FORMAT_QUERY); |
| 1877 if (MMSYSERR_NOERROR == res) | 1906 if (MMSYSERR_NOERROR == res) |
| 1878 { | 1907 { |
| 1879 res = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveFormat, 0, 0, CALLB
ACK_NULL); | 1908 res = waveInOpen(&hWaveIn, WAVE_MAPPER, &waveFormat, 0, 0, |
| 1880 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "opening defaul
t input device"); | 1909 CALLBACK_NULL); |
| 1910 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, |
| 1911 "opening default input device"); |
| 1881 } | 1912 } |
| 1882 } | 1913 } |
| 1883 } | 1914 } |
| 1884 | 1915 |
| 1885 if (MMSYSERR_NOERROR != res) | 1916 if (MMSYSERR_NOERROR != res) |
| 1886 { | 1917 { |
| 1887 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "waveInOpen() failed (
err=%d)", res); | 1918 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "waveInOpen() failed (
err=%d)", res); |
| 1888 TraceWaveInError(res); | 1919 TraceWaveInError(res); |
| 1889 return -1; | 1920 return -1; |
| 1890 } | 1921 } |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1974 int32_t AudioDeviceWindowsWave::StopRecording() | 2005 int32_t AudioDeviceWindowsWave::StopRecording() |
| 1975 { | 2006 { |
| 1976 | 2007 |
| 1977 CriticalSectionScoped lock(&_critSect); | 2008 CriticalSectionScoped lock(&_critSect); |
| 1978 | 2009 |
| 1979 if (!_recIsInitialized) | 2010 if (!_recIsInitialized) |
| 1980 { | 2011 { |
| 1981 return 0; | 2012 return 0; |
| 1982 } | 2013 } |
| 1983 | 2014 |
| 1984 if (_hWaveIn == NULL) | 2015 if (_hWaveIn == nullptr) { |
| 1985 { | 2016 return -1; |
| 1986 return -1; | |
| 1987 } | 2017 } |
| 1988 | 2018 |
| 1989 bool wasRecording = _recording; | 2019 bool wasRecording = _recording; |
| 1990 _recIsInitialized = false; | 2020 _recIsInitialized = false; |
| 1991 _recording = false; | 2021 _recording = false; |
| 1992 | 2022 |
| 1993 MMRESULT res; | 2023 MMRESULT res; |
| 1994 | 2024 |
| 1995 // Stop waveform-adio input. If there are any buffers in the queue, the | 2025 // Stop waveform-adio input. If there are any buffers in the queue, the |
| 1996 // current buffer will be marked as done (the dwBytesRecorded member in | 2026 // current buffer will be marked as done (the dwBytesRecorded member in |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2034 | 2064 |
| 2035 // Close the given waveform-audio input device. | 2065 // Close the given waveform-audio input device. |
| 2036 // | 2066 // |
| 2037 res = waveInClose(_hWaveIn); | 2067 res = waveInClose(_hWaveIn); |
| 2038 if (MMSYSERR_NOERROR != res) | 2068 if (MMSYSERR_NOERROR != res) |
| 2039 { | 2069 { |
| 2040 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveInClose() faile
d (err=%d)", res); | 2070 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveInClose() faile
d (err=%d)", res); |
| 2041 TraceWaveInError(res); | 2071 TraceWaveInError(res); |
| 2042 } | 2072 } |
| 2043 | 2073 |
| 2044 // Set the wave input handle to NULL | 2074 // Set the wave input handle to null |
| 2045 // | 2075 // |
| 2046 _hWaveIn = NULL; | 2076 _hWaveIn = nullptr; |
| 2047 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "_hWaveIn is now set to NUL
L"); | 2077 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, |
| 2078 "_hWaveIn is now set to null"); |
| 2048 | 2079 |
| 2049 return 0; | 2080 return 0; |
| 2050 } | 2081 } |
| 2051 | 2082 |
| 2052 // ---------------------------------------------------------------------------- | 2083 // ---------------------------------------------------------------------------- |
| 2053 // RecordingIsInitialized | 2084 // RecordingIsInitialized |
| 2054 // ---------------------------------------------------------------------------- | 2085 // ---------------------------------------------------------------------------- |
| 2055 | 2086 |
| 2056 bool AudioDeviceWindowsWave::RecordingIsInitialized() const | 2087 bool AudioDeviceWindowsWave::RecordingIsInitialized() const |
| 2057 { | 2088 { |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2125 int32_t AudioDeviceWindowsWave::StopPlayout() | 2156 int32_t AudioDeviceWindowsWave::StopPlayout() |
| 2126 { | 2157 { |
| 2127 | 2158 |
| 2128 CriticalSectionScoped lock(&_critSect); | 2159 CriticalSectionScoped lock(&_critSect); |
| 2129 | 2160 |
| 2130 if (!_playIsInitialized) | 2161 if (!_playIsInitialized) |
| 2131 { | 2162 { |
| 2132 return 0; | 2163 return 0; |
| 2133 } | 2164 } |
| 2134 | 2165 |
| 2135 if (_hWaveOut == NULL) | 2166 if (_hWaveOut == nullptr) { |
| 2136 { | 2167 return -1; |
| 2137 return -1; | |
| 2138 } | 2168 } |
| 2139 | 2169 |
| 2140 _playIsInitialized = false; | 2170 _playIsInitialized = false; |
| 2141 _playing = false; | 2171 _playing = false; |
| 2142 _sndCardPlayDelay = 0; | 2172 _sndCardPlayDelay = 0; |
| 2143 _sndCardRecDelay = 0; | 2173 _sndCardRecDelay = 0; |
| 2144 | 2174 |
| 2145 MMRESULT res; | 2175 MMRESULT res; |
| 2146 | 2176 |
| 2147 // The waveOutReset function stops playback on the given waveform-audio | 2177 // The waveOutReset function stops playback on the given waveform-audio |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2178 // waveOutClose, the application must wait for all buffers to finish playing | 2208 // waveOutClose, the application must wait for all buffers to finish playing |
| 2179 // or call the waveOutReset function to terminate playback. | 2209 // or call the waveOutReset function to terminate playback. |
| 2180 // | 2210 // |
| 2181 res = waveOutClose(_hWaveOut); | 2211 res = waveOutClose(_hWaveOut); |
| 2182 if (MMSYSERR_NOERROR != res) | 2212 if (MMSYSERR_NOERROR != res) |
| 2183 { | 2213 { |
| 2184 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutClose() fail
ed (err=%d)", res); | 2214 WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "waveOutClose() fail
ed (err=%d)", res); |
| 2185 TraceWaveOutError(res); | 2215 TraceWaveOutError(res); |
| 2186 } | 2216 } |
| 2187 | 2217 |
| 2188 _hWaveOut = NULL; | 2218 _hWaveOut = nullptr; |
| 2189 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "_hWaveOut is now set to NU
LL"); | 2219 WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, |
| 2220 "_hWaveOut is now set to null"); |
| 2190 | 2221 |
| 2191 return 0; | 2222 return 0; |
| 2192 } | 2223 } |
| 2193 | 2224 |
| 2194 // ---------------------------------------------------------------------------- | 2225 // ---------------------------------------------------------------------------- |
| 2195 // PlayoutDelay | 2226 // PlayoutDelay |
| 2196 // ---------------------------------------------------------------------------- | 2227 // ---------------------------------------------------------------------------- |
| 2197 | 2228 |
| 2198 int32_t AudioDeviceWindowsWave::PlayoutDelay(uint16_t& delayMS) const | 2229 int32_t AudioDeviceWindowsWave::PlayoutDelay(uint16_t& delayMS) const |
| 2199 { | 2230 { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2343 // ============================================================================ | 2374 // ============================================================================ |
| 2344 // Private Methods | 2375 // Private Methods |
| 2345 // ============================================================================ | 2376 // ============================================================================ |
| 2346 | 2377 |
| 2347 // ---------------------------------------------------------------------------- | 2378 // ---------------------------------------------------------------------------- |
| 2348 // InputSanityCheckAfterUnlockedPeriod | 2379 // InputSanityCheckAfterUnlockedPeriod |
| 2349 // ---------------------------------------------------------------------------- | 2380 // ---------------------------------------------------------------------------- |
| 2350 | 2381 |
| 2351 int32_t AudioDeviceWindowsWave::InputSanityCheckAfterUnlockedPeriod() const | 2382 int32_t AudioDeviceWindowsWave::InputSanityCheckAfterUnlockedPeriod() const |
| 2352 { | 2383 { |
| 2353 if (_hWaveIn == NULL) | 2384 if (_hWaveIn == nullptr) { |
| 2354 { | 2385 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 2355 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "input state has been
modified during unlocked period"); | 2386 "input state has been modified during unlocked period"); |
| 2356 return -1; | 2387 return -1; |
| 2357 } | 2388 } |
| 2358 return 0; | 2389 return 0; |
| 2359 } | 2390 } |
| 2360 | 2391 |
| 2361 // ---------------------------------------------------------------------------- | 2392 // ---------------------------------------------------------------------------- |
| 2362 // OutputSanityCheckAfterUnlockedPeriod | 2393 // OutputSanityCheckAfterUnlockedPeriod |
| 2363 // ---------------------------------------------------------------------------- | 2394 // ---------------------------------------------------------------------------- |
| 2364 | 2395 |
| 2365 int32_t AudioDeviceWindowsWave::OutputSanityCheckAfterUnlockedPeriod() const | 2396 int32_t AudioDeviceWindowsWave::OutputSanityCheckAfterUnlockedPeriod() const |
| 2366 { | 2397 { |
| 2367 if (_hWaveOut == NULL) | 2398 if (_hWaveOut == nullptr) { |
| 2368 { | 2399 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, |
| 2369 WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "output state has been
modified during unlocked period"); | 2400 "output state has been modified during unlocked period"); |
| 2370 return -1; | 2401 return -1; |
| 2371 } | 2402 } |
| 2372 return 0; | 2403 return 0; |
| 2373 } | 2404 } |
| 2374 | 2405 |
| 2375 // ---------------------------------------------------------------------------- | 2406 // ---------------------------------------------------------------------------- |
| 2376 // EnumeratePlayoutDevices | 2407 // EnumeratePlayoutDevices |
| 2377 // ---------------------------------------------------------------------------- | 2408 // ---------------------------------------------------------------------------- |
| 2378 | 2409 |
| 2379 int32_t AudioDeviceWindowsWave::EnumeratePlayoutDevices() | 2410 int32_t AudioDeviceWindowsWave::EnumeratePlayoutDevices() |
| 2380 { | 2411 { |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2551 | 2582 |
| 2552 // ---------------------------------------------------------------------------- | 2583 // ---------------------------------------------------------------------------- |
| 2553 // PrepareStartPlayout | 2584 // PrepareStartPlayout |
| 2554 // ---------------------------------------------------------------------------- | 2585 // ---------------------------------------------------------------------------- |
| 2555 | 2586 |
| 2556 int32_t AudioDeviceWindowsWave::PrepareStartPlayout() | 2587 int32_t AudioDeviceWindowsWave::PrepareStartPlayout() |
| 2557 { | 2588 { |
| 2558 | 2589 |
| 2559 CriticalSectionScoped lock(&_critSect); | 2590 CriticalSectionScoped lock(&_critSect); |
| 2560 | 2591 |
| 2561 if (_hWaveOut == NULL) | 2592 if (_hWaveOut == nullptr) { |
| 2562 { | 2593 return -1; |
| 2563 return -1; | |
| 2564 } | 2594 } |
| 2565 | 2595 |
| 2566 // A total of 30ms of data is immediately placed in the SC buffer | 2596 // A total of 30ms of data is immediately placed in the SC buffer |
| 2567 // | 2597 // |
| 2568 int8_t zeroVec[4*PLAY_BUF_SIZE_IN_SAMPLES]; // max allocation | 2598 int8_t zeroVec[4*PLAY_BUF_SIZE_IN_SAMPLES]; // max allocation |
| 2569 memset(zeroVec, 0, 4*PLAY_BUF_SIZE_IN_SAMPLES); | 2599 memset(zeroVec, 0, 4*PLAY_BUF_SIZE_IN_SAMPLES); |
| 2570 | 2600 |
| 2571 { | 2601 { |
| 2572 Write(zeroVec, PLAY_BUF_SIZE_IN_SAMPLES); | 2602 Write(zeroVec, PLAY_BUF_SIZE_IN_SAMPLES); |
| 2573 Write(zeroVec, PLAY_BUF_SIZE_IN_SAMPLES); | 2603 Write(zeroVec, PLAY_BUF_SIZE_IN_SAMPLES); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2588 | 2618 |
| 2589 // ---------------------------------------------------------------------------- | 2619 // ---------------------------------------------------------------------------- |
| 2590 // PrepareStartRecording | 2620 // PrepareStartRecording |
| 2591 // ---------------------------------------------------------------------------- | 2621 // ---------------------------------------------------------------------------- |
| 2592 | 2622 |
| 2593 int32_t AudioDeviceWindowsWave::PrepareStartRecording() | 2623 int32_t AudioDeviceWindowsWave::PrepareStartRecording() |
| 2594 { | 2624 { |
| 2595 | 2625 |
| 2596 CriticalSectionScoped lock(&_critSect); | 2626 CriticalSectionScoped lock(&_critSect); |
| 2597 | 2627 |
| 2598 if (_hWaveIn == NULL) | 2628 if (_hWaveIn == nullptr) { |
| 2599 { | 2629 return -1; |
| 2600 return -1; | |
| 2601 } | 2630 } |
| 2602 | 2631 |
| 2603 _playAcc = 0; | 2632 _playAcc = 0; |
| 2604 _recordedBytes = 0; | 2633 _recordedBytes = 0; |
| 2605 _recPutBackDelay = REC_PUT_BACK_DELAY; | 2634 _recPutBackDelay = REC_PUT_BACK_DELAY; |
| 2606 | 2635 |
| 2607 MMRESULT res; | 2636 MMRESULT res; |
| 2608 MMTIME mmtime; | 2637 MMTIME mmtime; |
| 2609 mmtime.wType = TIME_SAMPLES; | 2638 mmtime.wType = TIME_SAMPLES; |
| 2610 | 2639 |
| (...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3511 | 3540 |
| 3512 return (0); | 3541 return (0); |
| 3513 } | 3542 } |
| 3514 | 3543 |
| 3515 // ---------------------------------------------------------------------------- | 3544 // ---------------------------------------------------------------------------- |
| 3516 // Write | 3545 // Write |
| 3517 // ---------------------------------------------------------------------------- | 3546 // ---------------------------------------------------------------------------- |
| 3518 | 3547 |
| 3519 int32_t AudioDeviceWindowsWave::Write(int8_t* data, uint16_t nSamples) | 3548 int32_t AudioDeviceWindowsWave::Write(int8_t* data, uint16_t nSamples) |
| 3520 { | 3549 { |
| 3521 if (_hWaveOut == NULL) | 3550 if (_hWaveOut == nullptr) { |
| 3522 { | 3551 return -1; |
| 3523 return -1; | |
| 3524 } | 3552 } |
| 3525 | 3553 |
| 3526 if (_playIsInitialized) | 3554 if (_playIsInitialized) |
| 3527 { | 3555 { |
| 3528 MMRESULT res; | 3556 MMRESULT res; |
| 3529 | 3557 |
| 3530 const uint16_t bufCount(_playBufCount); | 3558 const uint16_t bufCount(_playBufCount); |
| 3531 | 3559 |
| 3532 // Place data in the memory associated with _waveHeaderOut[bufCount] | 3560 // Place data in the memory associated with _waveHeaderOut[bufCount] |
| 3533 // | 3561 // |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3714 bool AudioDeviceWindowsWave::KeyPressed() const{ | 3742 bool AudioDeviceWindowsWave::KeyPressed() const{ |
| 3715 | 3743 |
| 3716 int key_down = 0; | 3744 int key_down = 0; |
| 3717 for (int key = VK_SPACE; key < VK_NUMLOCK; key++) { | 3745 for (int key = VK_SPACE; key < VK_NUMLOCK; key++) { |
| 3718 short res = GetAsyncKeyState(key); | 3746 short res = GetAsyncKeyState(key); |
| 3719 key_down |= res & 0x1; // Get the LSB | 3747 key_down |= res & 0x1; // Get the LSB |
| 3720 } | 3748 } |
| 3721 return (key_down > 0); | 3749 return (key_down > 0); |
| 3722 } | 3750 } |
| 3723 } // namespace webrtc | 3751 } // namespace webrtc |
| OLD | NEW |