Chromium Code Reviews| Index: content/renderer/media/webrtc_audio_device_impl.cc |
| diff --git a/content/renderer/media/webrtc_audio_device_impl.cc b/content/renderer/media/webrtc_audio_device_impl.cc |
| index 300439d6012095d550e52095341d8ac38216919f..f05beb32d6c7a6a62c05df831f062a75e8e7ed05 100644 |
| --- a/content/renderer/media/webrtc_audio_device_impl.cc |
| +++ b/content/renderer/media/webrtc_audio_device_impl.cc |
| @@ -300,7 +300,11 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
| static_cast<int>(audio_hardware::GetInputSampleRate()); |
| DVLOG(1) << "Audio input hardware sample rate: " << input_sample_rate; |
| - int input_channels = 0; |
| + // Ask the browser for the default number of audio input channels. |
| + // This request is based on a synchronous IPC message. |
| + int input_channels = audio_hardware::GetInputChannelCount(); |
| + DVLOG(1) << "Audio input hardware channels: " << input_channels; |
| + |
| int output_channels = 0; |
| size_t input_buffer_size = 0; |
| @@ -308,21 +312,17 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
| // Windows |
| #if defined(OS_WIN) |
| - if (input_sample_rate != 48000 && input_sample_rate != 44100) { |
| - DLOG(ERROR) << "Only 48 and 44.1kHz input rates are supported on Windows."; |
| + if (input_sample_rate != 48000 && input_sample_rate != 44100 && |
| + input_sample_rate != 32000 && input_sample_rate != 16000) { |
| + DLOG(ERROR) << "Only 48, 44.1, 32 and 16kHz input rates are supported."; |
| return -1; |
| } |
| if (output_sample_rate != 48000 && output_sample_rate != 44100) { |
| - DLOG(ERROR) << "Only 48 and 44.1kHz output rates are supported on Windows."; |
| + DLOG(ERROR) << "Only 48 and 44.1kHz output rates are supported."; |
| return -1; |
| } |
| - // Use stereo recording on Windows since low-latency Core Audio (WASAPI) |
| - // does not support mono. |
| - input_channels = 2; |
| - |
| - // Use stereo rendering on Windows to make input and output sides |
| - // symmetric. WASAPI supports both stereo and mono. |
| + // Always use stereo rendering on Windows. |
| output_channels = 2; |
| // Capture side: AUDIO_PCM_LOW_LATENCY is based on the Core Audio (WASAPI) |
| @@ -331,12 +331,12 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
| // size of 10ms works well for both these implementations. |
| // Use different buffer sizes depending on the current hardware sample rate. |
| - if (input_sample_rate == 48000) { |
| - input_buffer_size = 480; |
| - } else { |
| + if (input_sample_rate == 44100) { |
| // 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; |
| + } else { |
| + input_buffer_size = (input_sample_rate / 100); |
| } |
| // Render side: AUDIO_PCM_LOW_LATENCY is based on the Core Audio (WASAPI) |
| @@ -357,7 +357,7 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
| // 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) { |
| + if (!media::IsWASAPISupported()) { |
| 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."; |
| @@ -365,8 +365,9 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
| // Mac OS X |
| #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."; |
| + if (input_sample_rate != 48000 && input_sample_rate != 44100 && |
| + input_sample_rate != 32000 && input_sample_rate != 16000) { |
|
scherkus (not reviewing)
2012/01/18 18:19:38
your initial CL comment says only windows is suppo
henrika (OOO until Aug 14)
2012/01/19 09:42:24
You might be referring to "First patch works for W
|
| + DLOG(ERROR) << "Only 48, 44.1, 32 and 16kHz input rates are supported."; |
| return -1; |
| } |
| if (output_sample_rate != 48000 && output_sample_rate != 44100) { |
| @@ -374,7 +375,6 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
| return -1; |
| } |
| - input_channels = 1; |
| output_channels = 1; |
| // Capture side: AUDIO_PCM_LOW_LATENCY on Mac OS X is based on a callback- |
| @@ -382,12 +382,12 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
| // frame size to use, both for 48kHz and 44.1kHz. |
| // Use different buffer sizes depending on the current hardware sample rate. |
| - if (input_sample_rate == 48000) { |
| - input_buffer_size = 480; |
| - } else { |
| + if (input_sample_rate == 44100) { |
| // 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; |
| + } else { |
| + input_buffer_size = (input_sample_rate / 100); |
| } |
| // Render side: AUDIO_PCM_LOW_LATENCY on Mac OS X is based on a callback- |
| @@ -618,9 +618,6 @@ bool WebRtcAudioDeviceImpl::Playing() const { |
| int32_t WebRtcAudioDeviceImpl::StartRecording() { |
| DVLOG(1) << "StartRecording()"; |
| -#if defined(OS_MACOSX) |
| - DLOG(WARNING) << "Real-time recording is not yet fully supported on Mac OS X"; |
| -#endif |
| LOG_IF(ERROR, !audio_transport_callback_) << "Audio transport is missing"; |
| if (!audio_transport_callback_) { |
| LOG(ERROR) << "Audio transport is missing"; |