| 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" | 7 #include "base/command_line.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "content/public/common/content_switches.h" | 9 #include "content/public/common/content_switches.h" |
| 10 #include "content/renderer/media/media_stream_audio_processor_options.h" | 10 #include "content/renderer/media/media_stream_audio_processor_options.h" |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 // Handles mixing and resampling between input and output parameters. | 136 // Handles mixing and resampling between input and output parameters. |
| 137 media::AudioConverter audio_converter_; | 137 media::AudioConverter audio_converter_; |
| 138 scoped_ptr<media::AudioBus> audio_wrapper_; | 138 scoped_ptr<media::AudioBus> audio_wrapper_; |
| 139 scoped_ptr<media::AudioFifo> fifo_; | 139 scoped_ptr<media::AudioFifo> fifo_; |
| 140 }; | 140 }; |
| 141 | 141 |
| 142 MediaStreamAudioProcessor::MediaStreamAudioProcessor( | 142 MediaStreamAudioProcessor::MediaStreamAudioProcessor( |
| 143 const media::AudioParameters& source_params, | 143 const media::AudioParameters& source_params, |
| 144 const blink::WebMediaConstraints& constraints, | 144 const blink::WebMediaConstraints& constraints, |
| 145 int effects, | 145 int effects, |
| 146 MediaStreamType type, |
| 146 WebRtcPlayoutDataSource* playout_data_source) | 147 WebRtcPlayoutDataSource* playout_data_source) |
| 147 : render_delay_ms_(0), | 148 : render_delay_ms_(0), |
| 148 playout_data_source_(playout_data_source), | 149 playout_data_source_(playout_data_source), |
| 149 audio_mirroring_(false), | 150 audio_mirroring_(false), |
| 150 typing_detected_(false) { | 151 typing_detected_(false) { |
| 151 capture_thread_checker_.DetachFromThread(); | 152 capture_thread_checker_.DetachFromThread(); |
| 152 render_thread_checker_.DetachFromThread(); | 153 render_thread_checker_.DetachFromThread(); |
| 153 InitializeAudioProcessingModule(constraints, effects); | 154 InitializeAudioProcessingModule(constraints, effects, type); |
| 154 InitializeCaptureConverter(source_params); | 155 InitializeCaptureConverter(source_params); |
| 155 } | 156 } |
| 156 | 157 |
| 157 MediaStreamAudioProcessor::~MediaStreamAudioProcessor() { | 158 MediaStreamAudioProcessor::~MediaStreamAudioProcessor() { |
| 158 DCHECK(main_thread_checker_.CalledOnValidThread()); | 159 DCHECK(main_thread_checker_.CalledOnValidThread()); |
| 159 StopAudioProcessing(); | 160 StopAudioProcessing(); |
| 160 } | 161 } |
| 161 | 162 |
| 162 void MediaStreamAudioProcessor::PushCaptureData(media::AudioBus* audio_source) { | 163 void MediaStreamAudioProcessor::PushCaptureData(media::AudioBus* audio_source) { |
| 163 DCHECK(capture_thread_checker_.CalledOnValidThread()); | 164 DCHECK(capture_thread_checker_.CalledOnValidThread()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 render_converter_.reset(); | 227 render_converter_.reset(); |
| 227 } | 228 } |
| 228 | 229 |
| 229 void MediaStreamAudioProcessor::GetStats(AudioProcessorStats* stats) { | 230 void MediaStreamAudioProcessor::GetStats(AudioProcessorStats* stats) { |
| 230 stats->typing_noise_detected = | 231 stats->typing_noise_detected = |
| 231 (base::subtle::Acquire_Load(&typing_detected_) != false); | 232 (base::subtle::Acquire_Load(&typing_detected_) != false); |
| 232 GetAecStats(audio_processing_.get(), stats); | 233 GetAecStats(audio_processing_.get(), stats); |
| 233 } | 234 } |
| 234 | 235 |
| 235 void MediaStreamAudioProcessor::InitializeAudioProcessingModule( | 236 void MediaStreamAudioProcessor::InitializeAudioProcessingModule( |
| 236 const blink::WebMediaConstraints& constraints, int effects) { | 237 const blink::WebMediaConstraints& constraints, int effects, |
| 238 MediaStreamType type) { |
| 237 DCHECK(!audio_processing_); | 239 DCHECK(!audio_processing_); |
| 238 if (!CommandLine::ForCurrentProcess()->HasSwitch( | 240 if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| 239 switches::kEnableAudioTrackProcessing)) { | 241 switches::kEnableAudioTrackProcessing)) { |
| 240 return; | 242 return; |
| 241 } | 243 } |
| 242 | 244 |
| 243 RTCMediaConstraints native_constraints(constraints); | 245 RTCMediaConstraints native_constraints(constraints); |
| 244 ApplyFixedAudioConstraints(&native_constraints); | 246 |
| 247 // Only apply the fixed constraints for gUM of MEDIA_DEVICE_AUDIO_CAPTURE. |
| 248 DCHECK(IsAudioMediaType(type)); |
| 249 if (type == MEDIA_DEVICE_AUDIO_CAPTURE) |
| 250 ApplyFixedAudioConstraints(&native_constraints); |
| 251 |
| 245 if (effects & media::AudioParameters::ECHO_CANCELLER) { | 252 if (effects & media::AudioParameters::ECHO_CANCELLER) { |
| 246 // If platform echo canceller is enabled, disable the software AEC. | 253 // If platform echo canceller is enabled, disable the software AEC. |
| 247 native_constraints.AddMandatory( | 254 native_constraints.AddMandatory( |
| 248 MediaConstraintsInterface::kEchoCancellation, | 255 MediaConstraintsInterface::kEchoCancellation, |
| 249 MediaConstraintsInterface::kValueFalse, true); | 256 MediaConstraintsInterface::kValueFalse, true); |
| 250 } | 257 } |
| 251 | 258 |
| 252 #if defined(OS_IOS) | 259 #if defined(OS_IOS) |
| 253 // On iOS, VPIO provides built-in AEC and AGC. | 260 // On iOS, VPIO provides built-in AEC and AGC. |
| 254 const bool enable_aec = false; | 261 const bool enable_aec = false; |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 if (!audio_processing_.get()) | 452 if (!audio_processing_.get()) |
| 446 return; | 453 return; |
| 447 | 454 |
| 448 if (playout_data_source_) | 455 if (playout_data_source_) |
| 449 playout_data_source_->RemovePlayoutSink(this); | 456 playout_data_source_->RemovePlayoutSink(this); |
| 450 | 457 |
| 451 audio_processing_.reset(); | 458 audio_processing_.reset(); |
| 452 } | 459 } |
| 453 | 460 |
| 454 } // namespace content | 461 } // namespace content |
| OLD | NEW |