Chromium Code Reviews| Index: content/renderer/media/media_stream_audio_processor.cc |
| diff --git a/content/renderer/media/media_stream_audio_processor.cc b/content/renderer/media/media_stream_audio_processor.cc |
| index c82a1b654e0d4d05922957d4a32adf5c6c2b0bf1..8ae0f0164ab61d043ab320d0b807e2b05fa2bdc8 100644 |
| --- a/content/renderer/media/media_stream_audio_processor.cc |
| +++ b/content/renderer/media/media_stream_audio_processor.cc |
| @@ -25,7 +25,6 @@ namespace content { |
| namespace { |
| using webrtc::AudioProcessing; |
| -using webrtc::MediaConstraintsInterface; |
| #if defined(OS_ANDROID) |
| const int kAudioProcessingSampleRate = 16000; |
| @@ -167,7 +166,6 @@ bool MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled() { |
| MediaStreamAudioProcessor::MediaStreamAudioProcessor( |
| const blink::WebMediaConstraints& constraints, |
| int effects, |
| - MediaStreamType type, |
| WebRtcPlayoutDataSource* playout_data_source) |
| : render_delay_ms_(0), |
| playout_data_source_(playout_data_source), |
| @@ -175,7 +173,7 @@ MediaStreamAudioProcessor::MediaStreamAudioProcessor( |
| typing_detected_(false) { |
| capture_thread_checker_.DetachFromThread(); |
| render_thread_checker_.DetachFromThread(); |
| - InitializeAudioProcessingModule(constraints, effects, type); |
| + InitializeAudioProcessingModule(constraints, effects); |
| } |
| MediaStreamAudioProcessor::~MediaStreamAudioProcessor() { |
| @@ -286,68 +284,65 @@ void MediaStreamAudioProcessor::GetStats(AudioProcessorStats* stats) { |
| } |
| void MediaStreamAudioProcessor::InitializeAudioProcessingModule( |
| - const blink::WebMediaConstraints& constraints, int effects, |
| - MediaStreamType type) { |
| + const blink::WebMediaConstraints& constraints, int effects) { |
| DCHECK(!audio_processing_); |
| - RTCMediaConstraints native_constraints(constraints); |
| + MediaAudioConstraints audio_constraints(constraints, effects); |
| // Audio mirroring can be enabled even though audio processing is otherwise |
| // disabled. |
| - audio_mirroring_ = GetPropertyFromConstraints( |
| - &native_constraints, webrtc::MediaConstraintsInterface::kAudioMirroring); |
| + audio_mirroring_ = audio_constraints.GetProperty( |
| + MediaAudioConstraints::kGoogAudioMirroring); |
| if (!IsAudioTrackProcessingEnabled()) { |
| RecordProcessingState(AUDIO_PROCESSING_IN_WEBRTC); |
| return; |
| } |
| - // Only apply the fixed constraints for gUM of MEDIA_DEVICE_AUDIO_CAPTURE. |
| - DCHECK(IsAudioMediaType(type)); |
| - if (type == MEDIA_DEVICE_AUDIO_CAPTURE) |
| - ApplyFixedAudioConstraints(&native_constraints); |
| - |
| - if (effects & media::AudioParameters::ECHO_CANCELLER) { |
| - // If platform echo canceller is enabled, disable the software AEC. |
| - native_constraints.AddMandatory( |
| - MediaConstraintsInterface::kEchoCancellation, |
| - MediaConstraintsInterface::kValueFalse, true); |
| + // |kEchoCancellation| is used as a master control on enabling/disabling |
| + // the audio processing. |
| + // If |kEchoCancellation| is specified in |audio_constraints|, it will use |
| + // the defined value there, otherwise use the default value defined by |
| + // kDefaultAudioConstraints in media_stream_audio_processor_options.cc. |
| + const bool echo_cancellation = audio_constraints.GetProperty( |
|
tommi (sloooow) - chröme
2014/04/29 09:27:04
Can we just do audio_constraints.GetEchoCancellati
|
| + MediaAudioConstraints::kEchoCancellation); |
| + if (!echo_cancellation) { |
| + RecordProcessingState(AUDIO_PROCESSING_DISABLED); |
| + return; |
| } |
| #if defined(OS_IOS) |
| // On iOS, VPIO provides built-in AEC and AGC. |
| - const bool enable_aec = false; |
| - const bool enable_agc = false; |
| + const bool goog_aec = false; |
| + const bool goog_agc = false; |
| #else |
| - const bool enable_aec = GetPropertyFromConstraints( |
| - &native_constraints, MediaConstraintsInterface::kEchoCancellation); |
| - const bool enable_agc = GetPropertyFromConstraints( |
| - &native_constraints, webrtc::MediaConstraintsInterface::kAutoGainControl); |
| + // TODO(xians): goog_aec should just be echo_cancellation. |
| + const bool goog_aec = audio_constraints.GetEchoCancellationProperty(); |
| + const bool goog_agc = audio_constraints.GetProperty( |
| + MediaAudioConstraints::kGoogAutoGainControl); |
| #endif |
| #if defined(OS_IOS) || defined(OS_ANDROID) |
| - const bool enable_experimental_aec = false; |
| - const bool enable_typing_detection = false; |
| + const bool goog_experimental_aec = false; |
| + const bool goog_typing_detection = false; |
| #else |
| - const bool enable_experimental_aec = GetPropertyFromConstraints( |
| - &native_constraints, |
| - MediaConstraintsInterface::kExperimentalEchoCancellation); |
| - const bool enable_typing_detection = GetPropertyFromConstraints( |
| - &native_constraints, MediaConstraintsInterface::kTypingNoiseDetection); |
| + const bool goog_experimental_aec = audio_constraints.GetProperty( |
| + MediaAudioConstraints::kGoogExperimentalEchoCancellation); |
| + const bool goog_typing_detection = audio_constraints.GetProperty( |
| + MediaAudioConstraints::kGoogTypingNoiseDetection); |
| #endif |
| - const bool enable_ns = GetPropertyFromConstraints( |
| - &native_constraints, MediaConstraintsInterface::kNoiseSuppression); |
| - const bool enable_experimental_ns = GetPropertyFromConstraints( |
| - &native_constraints, |
| - MediaConstraintsInterface::kExperimentalNoiseSuppression); |
| - const bool enable_high_pass_filter = GetPropertyFromConstraints( |
| - &native_constraints, MediaConstraintsInterface::kHighpassFilter); |
| - |
| - // Return immediately if no audio processing component is enabled. |
| - if (!enable_aec && !enable_experimental_aec && !enable_ns && |
| - !enable_high_pass_filter && !enable_typing_detection && !enable_agc && |
| - !enable_experimental_ns) { |
| + const bool goog_ns = audio_constraints.GetProperty( |
| + MediaAudioConstraints::kGoogNoiseSuppression); |
| + const bool goog_experimental_ns = audio_constraints.GetProperty( |
| + MediaAudioConstraints::kGoogExperimentalNoiseSuppression); |
| + const bool goog_high_pass_filter = audio_constraints.GetProperty( |
| + MediaAudioConstraints::kGoogHighpassFilter); |
| + |
| + // Return immediately if no goog constraint is enabled. |
| + if (!goog_aec && !goog_experimental_aec && !goog_ns && |
| + !goog_high_pass_filter && !goog_typing_detection && |
| + !goog_agc && !goog_experimental_ns) { |
| RecordProcessingState(AUDIO_PROCESSING_DISABLED); |
| return; |
| } |
| @@ -362,32 +357,33 @@ void MediaStreamAudioProcessor::InitializeAudioProcessingModule( |
| kAudioProcessingChannelLayout)); |
| // Enable the audio processing components. |
| - if (enable_aec) { |
| + if (goog_aec) { |
| EnableEchoCancellation(audio_processing_.get()); |
| - if (enable_experimental_aec) |
| + |
| + if (goog_experimental_aec) |
| EnableExperimentalEchoCancellation(audio_processing_.get()); |
| if (playout_data_source_) |
| playout_data_source_->AddPlayoutSink(this); |
| } |
| - if (enable_ns) |
| + if (goog_ns) |
| EnableNoiseSuppression(audio_processing_.get()); |
| - if (enable_experimental_ns) |
| + if (goog_experimental_ns) |
| EnableExperimentalNoiseSuppression(audio_processing_.get()); |
| - if (enable_high_pass_filter) |
| + if (goog_high_pass_filter) |
| EnableHighPassFilter(audio_processing_.get()); |
| - if (enable_typing_detection) { |
| + if (goog_typing_detection) { |
| // TODO(xians): Remove this |typing_detector_| after the typing suppression |
| // is enabled by default. |
| typing_detector_.reset(new webrtc::TypingDetection()); |
| EnableTypingDetection(audio_processing_.get(), typing_detector_.get()); |
| } |
| - if (enable_agc) |
| + if (goog_agc) |
| EnableAutomaticGainControl(audio_processing_.get()); |
| RecordProcessingState(AUDIO_PROCESSING_ENABLED); |