Chromium Code Reviews| Index: content/renderer/media/webrtc_audio_device_impl.cc |
| =================================================================== |
| --- content/renderer/media/webrtc_audio_device_impl.cc (revision 109830) |
| +++ content/renderer/media/webrtc_audio_device_impl.cc (working copy) |
| @@ -6,6 +6,7 @@ |
| #include "base/bind.h" |
| #include "base/string_util.h" |
| +#include "base/win/windows_version.h" |
| #include "content/common/view_messages.h" |
| #include "content/renderer/render_thread_impl.h" |
| #include "media/audio/audio_util.h" |
| @@ -40,13 +41,13 @@ |
| initialized_(false), |
| playing_(false), |
| recording_(false) { |
| - VLOG(1) << "WebRtcAudioDeviceImpl::WebRtcAudioDeviceImpl()"; |
| + DVLOG(1) << "WebRtcAudioDeviceImpl::WebRtcAudioDeviceImpl()"; |
| DCHECK(RenderThreadImpl::current()) << |
| "WebRtcAudioDeviceImpl must be constructed on the render thread"; |
| } |
| WebRtcAudioDeviceImpl::~WebRtcAudioDeviceImpl() { |
| - VLOG(1) << "WebRtcAudioDeviceImpl::~WebRtcAudioDeviceImpl()"; |
| + DVLOG(1) << "WebRtcAudioDeviceImpl::~WebRtcAudioDeviceImpl()"; |
| if (playing_) |
| StopPlayout(); |
| if (recording_) |
| @@ -174,7 +175,7 @@ |
| } |
| void WebRtcAudioDeviceImpl::OnDeviceStarted(int device_index) { |
| - VLOG(1) << "OnDeviceStarted (device_index=" << device_index << ")"; |
| + DVLOG(1) << "OnDeviceStarted (device_index=" << device_index << ")"; |
| // -1 is an invalid device index. Do nothing if a valid device has |
| // been started. Otherwise update the |recording_| state to false. |
| if (device_index != -1) |
| @@ -186,7 +187,7 @@ |
| } |
| void WebRtcAudioDeviceImpl::OnDeviceStopped() { |
| - VLOG(1) << "OnDeviceStopped"; |
| + DVLOG(1) << "OnDeviceStopped"; |
| base::AutoLock auto_lock(lock_); |
| if (recording_) |
| recording_ = false; |
| @@ -195,7 +196,7 @@ |
| int32_t WebRtcAudioDeviceImpl::Version(char* version, |
| uint32_t& remaining_buffer_in_bytes, |
| uint32_t& position) const { |
| - VLOG(1) << "Version()"; |
| + DVLOG(1) << "Version()"; |
| DCHECK(version); |
| if (version == NULL) |
| return -1; |
| @@ -207,7 +208,7 @@ |
| base::strlcpy(&version[position], kVersion, arr_size - 1); |
| remaining_buffer_in_bytes -= arr_size; |
| position += arr_size; |
| - VLOG(1) << "version: " << version; |
| + DVLOG(1) << "version: " << version; |
| return 0; |
| } |
| @@ -245,14 +246,14 @@ |
| int32_t WebRtcAudioDeviceImpl::RegisterEventObserver( |
| webrtc::AudioDeviceObserver* event_callback) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::RegisterEventObserver() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::RegisterEventObserver() " |
| + << "NOT IMPLEMENTED"; |
| return -1; |
| } |
| int32_t WebRtcAudioDeviceImpl::RegisterAudioCallback( |
| webrtc::AudioTransport* audio_callback) { |
| - VLOG(1) << "RegisterAudioCallback()"; |
| + DVLOG(1) << "RegisterAudioCallback()"; |
| if (playing_ || recording_) { |
| LOG(ERROR) << "Unable to (de)register transport during active media"; |
| return -1; |
| @@ -262,7 +263,7 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::Init() { |
| - VLOG(1) << "Init()"; |
| + DVLOG(1) << "Init()"; |
| if (!render_loop_->BelongsToCurrentThread()) { |
| int32_t error = 0; |
| @@ -290,12 +291,12 @@ |
| // This request is based on a synchronous IPC message. |
| int output_sample_rate = |
| static_cast<int>(AudioDevice::GetAudioHardwareSampleRate()); |
| - VLOG(1) << "Audio output hardware sample rate: " << output_sample_rate; |
| + DVLOG(1) << "Audio output hardware sample rate: " << output_sample_rate; |
| // Ask the browser for the default audio input hardware sample-rate. |
| // This request is based on a synchronous IPC message. |
| int input_sample_rate = GetAudioInputHardwareSampleRate(); |
| - VLOG(1) << "Audio input hardware sample rate: " << input_sample_rate; |
| + DVLOG(1) << "Audio input hardware sample rate: " << input_sample_rate; |
| int input_channels = 0; |
| int output_channels = 0; |
| @@ -303,20 +304,25 @@ |
| size_t input_buffer_size = 0; |
| size_t output_buffer_size = 0; |
| - // For real-time audio (in combination with the webrtc::VoiceEngine) it |
| - // is convenient to use audio buffers of size N*10ms. |
| - |
| +// Windows |
| #if defined(OS_WIN) |
| - if (output_sample_rate != 48000) { |
| - DLOG(ERROR) << "Only 48kHz sample rate is supported on Windows."; |
| + if (input_sample_rate != 48000 && input_sample_rate != 44100) { |
| + DLOG(ERROR) << "Only 48 and 44.1kHz input rates are supported on Windows."; |
| return -1; |
| } |
| + if (output_sample_rate != 48000 && output_sample_rate != 44100) { |
| + DLOG(ERROR) << "Only 48 and 44.1kHz output rates are supported on Windows."; |
| + return -1; |
| + } |
| // Use stereo recording on Windows since low-latency Core Audio (WASAPI) |
| // does not support mono. |
| input_channels = 2; |
| - output_channels = 1; |
| + // Use stereo rendering on Windows to make input and output sides |
| + // symmetric. WASAPI supports both stereo and mono. |
| + output_channels = 2; |
| + |
| // Capture side: AUDIO_PCM_LOW_LATENCY is based on the Core Audio (WASAPI) |
| // API which was introduced in Windows Vista. For lower Windows versions, |
| // a callback-driven Wave implementation is used instead. An input buffer |
| @@ -331,41 +337,70 @@ |
| input_buffer_size = 440; |
| } |
| - // Rendering side: AUDIO_PCM_LOW_LATENCY on Windows is based on a callback- |
| - // driven Wave implementation where 2 buffers are fed to the audio driver |
| - // before actual rendering starts. Initial real-time tests have shown that |
| - // 20ms buffer size (corresponds to ~40ms total delay) is not enough but |
| - // can lead to buffer underruns. The next even multiple of 10ms is 30ms |
| - // (<=> ~60ms total delay) and it works fine also under high load. |
| - output_buffer_size = 3 * 480; |
| + // Render side: AUDIO_PCM_LOW_LATENCY is based on the Core Audio (WASAPI) |
| + // API which was introduced in Windows Vista. For lower Windows versions, |
| + // a callback-driven Wave implementation is used instead. An output buffer |
| + // size of 10ms works well for WASAPI but 30ms is needed for Wave. |
| + |
| + // Use different buffer sizes depending on the current hardware sample rate. |
| + if (output_sample_rate == 48000) { |
| + output_buffer_size = 480; |
| + } else { |
| + // We do run at 44.1kHz at the actual audio layer, but ask for frames |
| + // at 44.0kHz to ensure that we can feed them to the webrtc::VoiceEngine. |
| + // TODO(henrika): figure out why we seem to need 20ms here for glitch- |
| + // free audio. |
| + output_buffer_size = 2 * 440; |
| + } |
| + |
| + // Windows XP and lower can't cope with 10 ms output buffer size. |
| + // It must be extended to 30 ms (60 ms will be used internally by WaveOut). |
| + if (base::win::GetVersion() <= base::win::VERSION_XP) { |
| + output_buffer_size = 3 * output_buffer_size; |
| + DLOG(WARNING) << "Extending the output buffer size by a factor of three " |
| + << "since Windows XP has been detected."; |
| + } |
| + |
| +// Mac OS X |
|
tommi (sloooow) - chröme
2011/11/14 17:25:35
align comment to code and move into the mac sectio
henrika (OOO until Aug 14)
2011/11/15 09:27:39
This file has been removed from the CL. Sorry.
|
| #elif defined(OS_MACOSX) |
| + if (input_sample_rate != 48000 && input_sample_rate != 44100) { |
| + DLOG(ERROR) << "Only 48 and 44.1kHz input rates are supported on Mac OSX."; |
| + return -1; |
| + } |
| if (output_sample_rate != 48000 && output_sample_rate != 44100) { |
| - DLOG(ERROR) << "Only 48 and 44.1kHz sample rates are supported on Mac OSX."; |
| + DLOG(ERROR) << "Only 48 and 44.1kHz output rates are supported on Mac OSX."; |
| return -1; |
| } |
| + |
| input_channels = 1; |
| output_channels = 1; |
| - // Rendering side: AUDIO_PCM_LOW_LATENCY on Mac OS X is based on a callback- |
| + // Capture side: AUDIO_PCM_LOW_LATENCY on Mac OS X is based on a callback- |
| // driven Core Audio implementation. Tests have shown that 10ms is a suitable |
| // frame size to use, both for 48kHz and 44.1kHz. |
| - // Capturing side: AUDIO_PCM_LINEAR on Mac OS X uses the Audio Queue Services |
| - // API which is not well suited for real-time applications since the delay |
| - // is very high. We set buffer sizes to 10ms for the input side here as well |
| - // but none of them will work. |
| - // TODO(henrika): add support for AUDIO_PCM_LOW_LATENCY on the capture side |
| - // based on the Mac OS X Core Audio API. |
| // Use different buffer sizes depending on the current hardware sample rate. |
| + if (input_sample_rate == 48000) { |
| + input_buffer_size = 480; |
| + } else { |
| + // We do run at 44.1kHz at the actual audio layer, but ask for frames |
| + // at 44.0kHz to ensure that we can feed them to the webrtc::VoiceEngine. |
| + input_buffer_size = 440; |
| + } |
| + |
| + // Render side: AUDIO_PCM_LOW_LATENCY on Mac OS X is based on a callback- |
| + // driven Core Audio implementation. Tests have shown that 10ms is a suitable |
| + // frame size to use, both for 48kHz and 44.1kHz. |
| + |
| + // Use different buffer sizes depending on the current hardware sample rate. |
| if (output_sample_rate == 48000) { |
| - input_buffer_size = 480; |
| output_buffer_size = 480; |
| } else { |
| // We do run at 44.1kHz at the actual audio layer, but ask for frames |
| // at 44.0kHz to ensure that we can feed them to the webrtc::VoiceEngine. |
| - input_buffer_size = 440; |
| output_buffer_size = 440; |
| } |
| +// Linux |
|
tommi (sloooow) - chröme
2011/11/14 17:25:35
same for this comment. actually, I don't think th
henrika (OOO until Aug 14)
2011/11/15 09:27:39
This file has been removed from the CL. Sorry.
|
| #elif defined(OS_LINUX) || defined(OS_OPENBSD) |
| if (output_sample_rate != 48000) { |
| DLOG(ERROR) << "Only 48kHz sample rate is supported on Linux."; |
| @@ -421,12 +456,12 @@ |
| initialized_ = true; |
| - VLOG(1) << "Capture parameters (size/channels/rate): (" |
| - << input_buffer_size_ << "/" << input_channels_ << "/" |
| - << input_sample_rate_ << ")"; |
| - VLOG(1) << "Render parameters (size/channels/rate): (" |
| - << output_buffer_size_ << "/" << output_channels_ << "/" |
| - << output_sample_rate_ << ")"; |
| + DVLOG(1) << "Capture parameters (size/channels/rate): (" |
| + << input_buffer_size_ << "/" << input_channels_ << "/" |
| + << input_sample_rate_ << ")"; |
| + DVLOG(1) << "Render parameters (size/channels/rate): (" |
| + << output_buffer_size_ << "/" << output_channels_ << "/" |
| + << output_sample_rate_ << ")"; |
| return 0; |
| } |
| @@ -438,7 +473,7 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::Terminate() { |
| - VLOG(1) << "Terminate()"; |
| + DVLOG(1) << "Terminate()"; |
| // Calling Terminate() multiple times in a row is OK. |
| if (!initialized_) |
| @@ -490,65 +525,65 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::SetPlayoutDevice(uint16_t index) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetPlayoutDevice() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetPlayoutDevice() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::SetPlayoutDevice(WindowsDeviceType device) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetPlayoutDevice() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetPlayoutDevice() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::SetRecordingDevice(uint16_t index) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetRecordingDevice() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetRecordingDevice() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::SetRecordingDevice(WindowsDeviceType device) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetRecordingDevice() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetRecordingDevice() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::PlayoutIsAvailable(bool* available) { |
| - VLOG(1) << "PlayoutIsAvailable()"; |
| + DVLOG(1) << "PlayoutIsAvailable()"; |
| *available = (audio_output_device_ != NULL); |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::InitPlayout() { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitPlayout() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitPlayout() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| bool WebRtcAudioDeviceImpl::PlayoutIsInitialized() const { |
| - VLOG(1) << "PlayoutIsInitialized()"; |
| + DVLOG(1) << "PlayoutIsInitialized()"; |
| return (audio_output_device_ != NULL); |
| } |
| int32_t WebRtcAudioDeviceImpl::RecordingIsAvailable(bool* available) { |
| - VLOG(1) << "RecordingIsAvailable()"; |
| + DVLOG(1) << "RecordingIsAvailable()"; |
| *available = (audio_input_device_ != NULL); |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::InitRecording() { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitRecording() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitRecording() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| bool WebRtcAudioDeviceImpl::RecordingIsInitialized() const { |
| - VLOG(1) << "RecordingIsInitialized()"; |
| + DVLOG(1) << "RecordingIsInitialized()"; |
| return (audio_input_device_ != NULL); |
| } |
| int32_t WebRtcAudioDeviceImpl::StartPlayout() { |
| - VLOG(1) << "StartPlayout()"; |
| + DVLOG(1) << "StartPlayout()"; |
| if (!audio_transport_callback_) { |
| LOG(ERROR) << "Audio transport is missing"; |
| return -1; |
| @@ -556,7 +591,6 @@ |
| if (playing_) { |
| // webrtc::VoiceEngine assumes that it is OK to call Start() twice and |
| // that the call is ignored the second time. |
| - LOG(WARNING) << "Playout is already active"; |
| return 0; |
| } |
| audio_output_device_->Start(); |
| @@ -565,11 +599,10 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::StopPlayout() { |
| - VLOG(1) << "StopPlayout()"; |
| + DVLOG(1) << "StopPlayout()"; |
| DCHECK(audio_output_device_); |
| if (!playing_) { |
| // webrtc::VoiceEngine assumes that it is OK to call Stop() just in case. |
| - LOG(WARNING) << "Playout was already stopped"; |
| return 0; |
| } |
| playing_ = !audio_output_device_->Stop(); |
| @@ -581,7 +614,7 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::StartRecording() { |
| - VLOG(1) << "StartRecording()"; |
| + DVLOG(1) << "StartRecording()"; |
| #if defined(OS_MACOSX) |
| DLOG(WARNING) << "Real-time recording is not yet fully supported on Mac OS X"; |
| #endif |
| @@ -602,7 +635,6 @@ |
| if (recording_) { |
| // webrtc::VoiceEngine assumes that it is OK to call Start() twice and |
| // that the call is ignored the second time. |
| - LOG(WARNING) << "Recording is already active"; |
| return 0; |
| } |
| @@ -614,13 +646,12 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::StopRecording() { |
| - VLOG(1) << "StopRecording()"; |
| + DVLOG(1) << "StopRecording()"; |
| DCHECK(audio_input_device_); |
| base::AutoLock auto_lock(lock_); |
| if (!recording_) { |
| // webrtc::VoiceEngine assumes that it is OK to call Stop() just in case. |
| - LOG(WARNING) << "Recording was already stopped"; |
| return 0; |
| } |
| recording_ = !audio_input_device_->Stop(); |
| @@ -632,14 +663,12 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::SetAGC(bool enable) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetAGC() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetAGC() " << "NOT IMPLEMENTED"; |
| return -1; |
| } |
| bool WebRtcAudioDeviceImpl::AGC() const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::AGC() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::AGC() " << "NOT IMPLEMENTED"; |
| return false; |
| } |
| @@ -656,34 +685,34 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::SpeakerIsAvailable(bool* available) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SpeakerIsAvailable() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SpeakerIsAvailable() " |
| + << "NOT IMPLEMENTED"; |
| *available = true; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::InitSpeaker() { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitSpeaker() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitSpeaker() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| bool WebRtcAudioDeviceImpl::SpeakerIsInitialized() const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SpeakerIsInitialized() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SpeakerIsInitialized() " |
| + << "NOT IMPLEMENTED"; |
| return true; |
| } |
| int32_t WebRtcAudioDeviceImpl::MicrophoneIsAvailable(bool* available) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::MicrophoneIsAvailable() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::MicrophoneIsAvailable() " |
| + << "NOT IMPLEMENTED"; |
| *available = true; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::InitMicrophone() { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitMicrophone() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::InitMicrophone() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| @@ -742,15 +771,15 @@ |
| int32_t WebRtcAudioDeviceImpl::MaxMicrophoneVolume( |
| uint32_t* max_volume) const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::MaxMicrophoneVolume() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::MaxMicrophoneVolume() " |
| + << "NOT IMPLEMENTED"; |
| return -1; |
| } |
| int32_t WebRtcAudioDeviceImpl::MinMicrophoneVolume( |
| uint32_t* min_volume) const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::MinMicrophoneVolume() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::MinMicrophoneVolume() " |
| + << "NOT IMPLEMENTED"; |
| return -1; |
| } |
| @@ -807,40 +836,40 @@ |
| } |
| int32_t WebRtcAudioDeviceImpl::StereoPlayoutIsAvailable(bool* available) const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoPlayoutIsAvailable() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoPlayoutIsAvailable() " |
| + << "NOT IMPLEMENTED"; |
| *available = false; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::SetStereoPlayout(bool enable) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetStereoPlayout() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetStereoPlayout() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::StereoPlayout(bool* enabled) const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoPlayout() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoPlayout() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::StereoRecordingIsAvailable( |
| bool* available) const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoRecordingIsAvailable() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoRecordingIsAvailable() " |
| + << "NOT IMPLEMENTED"; |
| return 0; |
| } |
| int32_t WebRtcAudioDeviceImpl::SetStereoRecording(bool enable) { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetStereoRecording() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::SetStereoRecording() " |
| + << "NOT IMPLEMENTED"; |
| return -1; |
| } |
| int32_t WebRtcAudioDeviceImpl::StereoRecording(bool* enabled) const { |
| - VLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoRecording() " |
| - << "NOT IMPLEMENTED"; |
| + DVLOG(2) << "WARNING: WebRtcAudioDeviceImpl::StereoRecording() " |
| + << "NOT IMPLEMENTED"; |
| return -1; |
| } |