From 7d3e9498bcf66e1a0d3c5bfdfe2bb3ff913efd75 Mon Sep 17 00:00:00 2001 From: "braveyao@webrtc.org" Date: Wed, 23 Nov 2011 03:35:42 +0000 Subject: [PATCH] This CL is to support certain audio devices which don't offer volume control. Try to be more compatible to those rare cases. Review URL: http://webrtc-codereview.appspot.com/276011 git-svn-id: http://webrtc.googlecode.com/svn/trunk@997 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../main/source/win/audio_device_wave_win.cc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) 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; }