OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/media_stream_audio_processor.h" | 5 #include "content/renderer/media/media_stream_audio_processor.h" |
6 | 6 |
7 #include "base/command_line.h" | |
8 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
9 #if defined(OS_MACOSX) | 8 #if defined(OS_MACOSX) |
10 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
11 #endif | 10 #endif |
12 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
13 #include "content/public/common/content_switches.h" | |
14 #include "content/renderer/media/media_stream_audio_processor_options.h" | 12 #include "content/renderer/media/media_stream_audio_processor_options.h" |
15 #include "content/renderer/media/rtc_media_constraints.h" | 13 #include "content/renderer/media/rtc_media_constraints.h" |
16 #include "content/renderer/media/webrtc_audio_device_impl.h" | 14 #include "content/renderer/media/webrtc_audio_device_impl.h" |
17 #include "media/audio/audio_parameters.h" | 15 #include "media/audio/audio_parameters.h" |
18 #include "media/base/audio_converter.h" | 16 #include "media/base/audio_converter.h" |
19 #include "media/base/audio_fifo.h" | 17 #include "media/base/audio_fifo.h" |
20 #include "media/base/channel_layout.h" | 18 #include "media/base/channel_layout.h" |
21 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | 19 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
22 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface
.h" | 20 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface
.h" |
23 #include "third_party/webrtc/modules/audio_processing/typing_detection.h" | 21 #include "third_party/webrtc/modules/audio_processing/typing_detection.h" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 base::ThreadChecker thread_checker_; | 196 base::ThreadChecker thread_checker_; |
199 const int source_channels_; // For a DCHECK. | 197 const int source_channels_; // For a DCHECK. |
200 const int source_frames_; // For a DCHECK. | 198 const int source_frames_; // For a DCHECK. |
201 scoped_ptr<media::AudioBus> audio_source_intermediate_; | 199 scoped_ptr<media::AudioBus> audio_source_intermediate_; |
202 scoped_ptr<MediaStreamAudioBus> destination_; | 200 scoped_ptr<MediaStreamAudioBus> destination_; |
203 scoped_ptr<media::AudioFifo> fifo_; | 201 scoped_ptr<media::AudioFifo> fifo_; |
204 // Only used when the FIFO is disabled; | 202 // Only used when the FIFO is disabled; |
205 bool data_available_; | 203 bool data_available_; |
206 }; | 204 }; |
207 | 205 |
208 bool MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled() { | |
209 return !CommandLine::ForCurrentProcess()->HasSwitch( | |
210 switches::kDisableAudioTrackProcessing); | |
211 } | |
212 | |
213 MediaStreamAudioProcessor::MediaStreamAudioProcessor( | 206 MediaStreamAudioProcessor::MediaStreamAudioProcessor( |
214 const blink::WebMediaConstraints& constraints, | 207 const blink::WebMediaConstraints& constraints, |
215 int effects, | 208 int effects, |
216 WebRtcPlayoutDataSource* playout_data_source) | 209 WebRtcPlayoutDataSource* playout_data_source) |
217 : render_delay_ms_(0), | 210 : render_delay_ms_(0), |
218 playout_data_source_(playout_data_source), | 211 playout_data_source_(playout_data_source), |
219 audio_mirroring_(false), | 212 audio_mirroring_(false), |
220 typing_detected_(false), | 213 typing_detected_(false), |
221 stopped_(false) { | 214 stopped_(false) { |
222 capture_thread_checker_.DetachFromThread(); | 215 capture_thread_checker_.DetachFromThread(); |
223 render_thread_checker_.DetachFromThread(); | 216 render_thread_checker_.DetachFromThread(); |
224 InitializeAudioProcessingModule(constraints, effects); | 217 InitializeAudioProcessingModule(constraints, effects); |
225 if (IsAudioTrackProcessingEnabled()) { | 218 |
226 aec_dump_message_filter_ = AecDumpMessageFilter::Get(); | 219 aec_dump_message_filter_ = AecDumpMessageFilter::Get(); |
227 // In unit tests not creating a message filter, |aec_dump_message_filter_| | 220 // In unit tests not creating a message filter, |aec_dump_message_filter_| |
228 // will be NULL. We can just ignore that. Other unit tests and browser tests | 221 // will be NULL. We can just ignore that. Other unit tests and browser tests |
229 // ensure that we do get the filter when we should. | 222 // ensure that we do get the filter when we should. |
230 if (aec_dump_message_filter_.get()) | 223 if (aec_dump_message_filter_.get()) |
231 aec_dump_message_filter_->AddDelegate(this); | 224 aec_dump_message_filter_->AddDelegate(this); |
232 } | |
233 } | 225 } |
234 | 226 |
235 MediaStreamAudioProcessor::~MediaStreamAudioProcessor() { | 227 MediaStreamAudioProcessor::~MediaStreamAudioProcessor() { |
236 DCHECK(main_thread_checker_.CalledOnValidThread()); | 228 DCHECK(main_thread_checker_.CalledOnValidThread()); |
237 Stop(); | 229 Stop(); |
238 } | 230 } |
239 | 231 |
240 void MediaStreamAudioProcessor::OnCaptureFormatChanged( | 232 void MediaStreamAudioProcessor::OnCaptureFormatChanged( |
241 const media::AudioParameters& input_format) { | 233 const media::AudioParameters& input_format) { |
242 DCHECK(main_thread_checker_.CalledOnValidThread()); | 234 DCHECK(main_thread_checker_.CalledOnValidThread()); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 DCHECK(main_thread_checker_.CalledOnValidThread()); | 386 DCHECK(main_thread_checker_.CalledOnValidThread()); |
395 DCHECK(!audio_processing_); | 387 DCHECK(!audio_processing_); |
396 | 388 |
397 MediaAudioConstraints audio_constraints(constraints, effects); | 389 MediaAudioConstraints audio_constraints(constraints, effects); |
398 | 390 |
399 // Audio mirroring can be enabled even though audio processing is otherwise | 391 // Audio mirroring can be enabled even though audio processing is otherwise |
400 // disabled. | 392 // disabled. |
401 audio_mirroring_ = audio_constraints.GetProperty( | 393 audio_mirroring_ = audio_constraints.GetProperty( |
402 MediaAudioConstraints::kGoogAudioMirroring); | 394 MediaAudioConstraints::kGoogAudioMirroring); |
403 | 395 |
404 if (!IsAudioTrackProcessingEnabled()) { | |
405 RecordProcessingState(AUDIO_PROCESSING_IN_WEBRTC); | |
406 return; | |
407 } | |
408 | |
409 #if defined(OS_IOS) | 396 #if defined(OS_IOS) |
410 // On iOS, VPIO provides built-in AGC and AEC. | 397 // On iOS, VPIO provides built-in AGC and AEC. |
411 const bool echo_cancellation = false; | 398 const bool echo_cancellation = false; |
412 const bool goog_agc = false; | 399 const bool goog_agc = false; |
413 #else | 400 #else |
414 const bool echo_cancellation = | 401 const bool echo_cancellation = |
415 audio_constraints.GetEchoCancellationProperty(); | 402 audio_constraints.GetEchoCancellationProperty(); |
416 const bool goog_agc = audio_constraints.GetProperty( | 403 const bool goog_agc = audio_constraints.GetProperty( |
417 MediaAudioConstraints::kGoogAutoGainControl); | 404 MediaAudioConstraints::kGoogAutoGainControl); |
418 #endif | 405 #endif |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 vad->stream_has_voice()); | 617 vad->stream_has_voice()); |
631 base::subtle::Release_Store(&typing_detected_, detected); | 618 base::subtle::Release_Store(&typing_detected_, detected); |
632 } | 619 } |
633 | 620 |
634 // Return 0 if the volume hasn't been changed, and otherwise the new volume. | 621 // Return 0 if the volume hasn't been changed, and otherwise the new volume. |
635 return (agc->stream_analog_level() == volume) ? | 622 return (agc->stream_analog_level() == volume) ? |
636 0 : agc->stream_analog_level(); | 623 0 : agc->stream_analog_level(); |
637 } | 624 } |
638 | 625 |
639 } // namespace content | 626 } // namespace content |
OLD | NEW |