diff --git a/src/modules/audio_device/main/source/win/audio_device_wave_win.cc b/src/modules/audio_device/main/source/win/audio_device_wave_win.cc index 138d67593a..1168e38a56 100644 --- a/src/modules/audio_device/main/source/win/audio_device_wave_win.cc +++ b/src/modules/audio_device/main/source/win/audio_device_wave_win.cc @@ -113,7 +113,7 @@ AudioDeviceWindowsWave::AudioDeviceWindowsWave(const WebRtc_Word32 id) : _recError(0), _newMicLevel(0), _minMicVolume(0), - _maxMicVolume(1) + _maxMicVolume(0) { WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id, "%s created", __FUNCTION__); @@ -628,18 +628,16 @@ WebRtc_Word32 AudioDeviceWindowsWave::InitMicrophone() WebRtc_UWord32 maxVol = 0; if (_mixerManager.MaxMicrophoneVolume(maxVol) == -1) { - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, + WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, " unable to retrieve max microphone volume"); - return -1; } _maxMicVolume = maxVol; WebRtc_UWord32 minVol = 0; if (_mixerManager.MinMicrophoneVolume(minVol) == -1) { - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, + WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, " unable to retrieve min microphone volume"); - return -1; } _minMicVolume = minVol; @@ -1304,6 +1302,16 @@ WebRtc_Word32 AudioDeviceWindowsWave::MicrophoneVolume(WebRtc_UWord32& volume) c WebRtc_Word32 AudioDeviceWindowsWave::MaxMicrophoneVolume(WebRtc_UWord32& maxVolume) const { + // _maxMicVolume can be zero in AudioMixerManager::MaxMicrophoneVolume(): + // (1) API GetLineControl() returns failure at querying the max Mic level. + // (2) API GetLineControl() returns maxVolume as zero in rare cases. + // Both cases show we don't have access to the mixer controls. + // We return -1 here to indicate that. + if (_maxMicVolume == 0) + { + return -1; + } + maxVolume = _maxMicVolume;; return 0; }