Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2007)

Unified Diff: content/renderer/media/media_stream_audio_processor.cc

Issue 227743004: Added a kEchoCancellation constraint to turn off the audio processing. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: GetEchoCancellationProperty handles both kEchoCancellation and kGoogEchoCancellation Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..3dc58fca63de252c03db7bbd27e624f1acb07907 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,70 @@ 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.GetEchoCancellationProperty(
+ MediaAudioConstraints::kEchoCancellation);
tommi (sloooow) - chröme 2014/04/30 10:58:44 Here I was thinking that GetEchoCancellationProper
no longer working on chromium 2014/05/02 12:24:02 I think Andrew had already asked similar questions
tommi (sloooow) - chröme 2014/05/03 10:26:28 Would we still have that problem if GetEchoCancell
no longer working on chromium 2014/05/05 12:55:56 nit, tab capture needs a "false" as value if expli
tommi (sloooow) - chröme 2014/05/05 13:58:13 I don't think echo cancellation applies to tab cap
+#if defined(OS_IOS)
+ // On iOS, VPIO provides built-in AEC.
+ const bool goog_aec = false;
+#else
+ // TODO(xians): goog_aec should just be echo_cancellation.
+ const bool goog_aec = audio_constraints.GetEchoCancellationProperty(
+ MediaAudioConstraints::kGoogEchoCancellation);
+#endif
+ 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;
+ // On iOS, VPIO provides built-in AGC.
+ 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);
+ 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 +362,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);

Powered by Google App Engine
This is Rietveld 408576698