| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/webrtc_audio_capturer.h" | 5 #include "content/renderer/media/webrtc_audio_capturer.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 media::AudioSampleRate asr; | 194 media::AudioSampleRate asr; |
| 195 if (media::ToAudioSampleRate(device_info_.device.input.sample_rate, &asr)) { | 195 if (media::ToAudioSampleRate(device_info_.device.input.sample_rate, &asr)) { |
| 196 UMA_HISTOGRAM_ENUMERATION( | 196 UMA_HISTOGRAM_ENUMERATION( |
| 197 "WebRTC.AudioInputSampleRate", asr, media::kAudioSampleRateMax + 1); | 197 "WebRTC.AudioInputSampleRate", asr, media::kAudioSampleRateMax + 1); |
| 198 } else { | 198 } else { |
| 199 UMA_HISTOGRAM_COUNTS("WebRTC.AudioInputSampleRateUnexpected", | 199 UMA_HISTOGRAM_COUNTS("WebRTC.AudioInputSampleRateUnexpected", |
| 200 device_info_.device.input.sample_rate); | 200 device_info_.device.input.sample_rate); |
| 201 } | 201 } |
| 202 | 202 |
| 203 // Create and configure the default audio capturing source. | 203 // Create and configure the default audio capturing source. |
| 204 SetCapturerSource(AudioDeviceFactory::NewInputDevice(render_view_id_), | 204 SetCapturerSourceInternal( |
| 205 channel_layout, | 205 AudioDeviceFactory::NewInputDevice(render_view_id_), |
| 206 static_cast<float>(device_info_.device.input.sample_rate)); | 206 channel_layout, |
| 207 static_cast<float>(device_info_.device.input.sample_rate)); |
| 207 | 208 |
| 208 // Add the capturer to the WebRtcAudioDeviceImpl since it needs some hardware | 209 // Add the capturer to the WebRtcAudioDeviceImpl since it needs some hardware |
| 209 // information from the capturer. | 210 // information from the capturer. |
| 210 if (audio_device_) | 211 if (audio_device_) |
| 211 audio_device_->AddAudioCapturer(this); | 212 audio_device_->AddAudioCapturer(this); |
| 212 | 213 |
| 213 return true; | 214 return true; |
| 214 } | 215 } |
| 215 | 216 |
| 216 WebRtcAudioCapturer::WebRtcAudioCapturer( | 217 WebRtcAudioCapturer::WebRtcAudioCapturer( |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 if (stop_source) { | 279 if (stop_source) { |
| 279 // Since WebRtcAudioCapturer does not inherit MediaStreamAudioSource, | 280 // Since WebRtcAudioCapturer does not inherit MediaStreamAudioSource, |
| 280 // and instead MediaStreamAudioSource is composed of a WebRtcAudioCapturer, | 281 // and instead MediaStreamAudioSource is composed of a WebRtcAudioCapturer, |
| 281 // we have to call StopSource on the MediaStreamSource. This will call | 282 // we have to call StopSource on the MediaStreamSource. This will call |
| 282 // MediaStreamAudioSource::DoStopSource which in turn call | 283 // MediaStreamAudioSource::DoStopSource which in turn call |
| 283 // WebRtcAudioCapturerer::Stop(); | 284 // WebRtcAudioCapturerer::Stop(); |
| 284 audio_source_->StopSource(); | 285 audio_source_->StopSource(); |
| 285 } | 286 } |
| 286 } | 287 } |
| 287 | 288 |
| 288 void WebRtcAudioCapturer::SetCapturerSource( | 289 void WebRtcAudioCapturer::SetCapturerSourceInternal( |
| 289 const scoped_refptr<media::AudioCapturerSource>& source, | 290 const scoped_refptr<media::AudioCapturerSource>& source, |
| 290 media::ChannelLayout channel_layout, | 291 media::ChannelLayout channel_layout, |
| 291 float sample_rate) { | 292 float sample_rate) { |
| 292 DCHECK(thread_checker_.CalledOnValidThread()); | 293 DCHECK(thread_checker_.CalledOnValidThread()); |
| 293 DVLOG(1) << "SetCapturerSource(channel_layout=" << channel_layout << "," | 294 DVLOG(1) << "SetCapturerSource(channel_layout=" << channel_layout << "," |
| 294 << "sample_rate=" << sample_rate << ")"; | 295 << "sample_rate=" << sample_rate << ")"; |
| 295 scoped_refptr<media::AudioCapturerSource> old_source; | 296 scoped_refptr<media::AudioCapturerSource> old_source; |
| 296 { | 297 { |
| 297 base::AutoLock auto_lock(lock_); | 298 base::AutoLock auto_lock(lock_); |
| 298 if (source_.get() == source.get()) | 299 if (source_.get() == source.get()) |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 } | 358 } |
| 358 | 359 |
| 359 // Do nothing if the current buffer size is the WebRtc native buffer size. | 360 // Do nothing if the current buffer size is the WebRtc native buffer size. |
| 360 if (GetBufferSize(input_params.sample_rate()) == | 361 if (GetBufferSize(input_params.sample_rate()) == |
| 361 input_params.frames_per_buffer()) { | 362 input_params.frames_per_buffer()) { |
| 362 return; | 363 return; |
| 363 } | 364 } |
| 364 | 365 |
| 365 // Create a new audio stream as source which will open the hardware using | 366 // Create a new audio stream as source which will open the hardware using |
| 366 // WebRtc native buffer size. | 367 // WebRtc native buffer size. |
| 367 SetCapturerSource(AudioDeviceFactory::NewInputDevice(render_view_id), | 368 SetCapturerSourceInternal(AudioDeviceFactory::NewInputDevice(render_view_id), |
| 368 input_params.channel_layout(), | 369 input_params.channel_layout(), |
| 369 static_cast<float>(input_params.sample_rate())); | 370 static_cast<float>(input_params.sample_rate())); |
| 370 } | 371 } |
| 371 | 372 |
| 372 void WebRtcAudioCapturer::Start() { | 373 void WebRtcAudioCapturer::Start() { |
| 373 DCHECK(thread_checker_.CalledOnValidThread()); | 374 DCHECK(thread_checker_.CalledOnValidThread()); |
| 374 DVLOG(1) << "WebRtcAudioCapturer::Start()"; | 375 DVLOG(1) << "WebRtcAudioCapturer::Start()"; |
| 375 base::AutoLock auto_lock(lock_); | 376 base::AutoLock auto_lock(lock_); |
| 376 if (running_ || !source_.get()) | 377 if (running_ || !source_.get()) |
| 377 return; | 378 return; |
| 378 | 379 |
| 379 // Start the data source, i.e., start capturing data from the current source. | 380 // Start the data source, i.e., start capturing data from the current source. |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 hardware_buffer_size <= peer_connection_buffer_size && | 579 hardware_buffer_size <= peer_connection_buffer_size && |
| 579 !audio_processor_->has_audio_processing()) { | 580 !audio_processor_->has_audio_processing()) { |
| 580 DVLOG(1) << "WebRtcAudioCapturer is using hardware buffer size " | 581 DVLOG(1) << "WebRtcAudioCapturer is using hardware buffer size " |
| 581 << hardware_buffer_size; | 582 << hardware_buffer_size; |
| 582 return hardware_buffer_size; | 583 return hardware_buffer_size; |
| 583 } | 584 } |
| 584 | 585 |
| 585 return (sample_rate / 100); | 586 return (sample_rate / 100); |
| 586 } | 587 } |
| 587 | 588 |
| 588 void WebRtcAudioCapturer::SetCapturerSourceForTesting( | 589 void WebRtcAudioCapturer::SetCapturerSource( |
| 589 const scoped_refptr<media::AudioCapturerSource>& source, | 590 const scoped_refptr<media::AudioCapturerSource>& source, |
| 590 media::AudioParameters params) { | 591 media::AudioParameters params) { |
| 591 // Create a new audio stream as source which uses the new source. | 592 // Create a new audio stream as source which uses the new source. |
| 592 SetCapturerSource(source, params.channel_layout(), | 593 SetCapturerSourceInternal(source, params.channel_layout(), |
| 593 static_cast<float>(params.sample_rate())); | 594 static_cast<float>(params.sample_rate())); |
| 594 } | 595 } |
| 595 | 596 |
| 596 } // namespace content | 597 } // namespace content |
| OLD | NEW |