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

Side by Side Diff: content/renderer/media/media_stream_audio_processor.cc

Issue 2928133002: Launch new gain control tuning value for WebRTC's AGC (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 114 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
115 switches::kAgcStartupMinVolume)); 115 switches::kAgcStartupMinVolume));
116 int startup_min_volume; 116 int startup_min_volume;
117 if (min_volume_str.empty() || 117 if (min_volume_str.empty() ||
118 !base::StringToInt(min_volume_str, &startup_min_volume)) { 118 !base::StringToInt(min_volume_str, &startup_min_volume)) {
119 return base::Optional<int>(); 119 return base::Optional<int>();
120 } 120 }
121 return base::Optional<int>(startup_min_volume); 121 return base::Optional<int>(startup_min_volume);
122 } 122 }
123 123
124 // Features for http://crbug.com/672476. These values will be given to WebRTC's
125 // gain control (AGC) as lower bounds for the gain reduction during clipping.
126 const base::Feature kTunedClippingLevelMin30{
127 "TunedClippingLevelMin30", base::FEATURE_DISABLED_BY_DEFAULT};
128 const base::Feature kTunedClippingLevelMin70{
129 "TunedClippingLevelMin70", base::FEATURE_DISABLED_BY_DEFAULT};
130 const base::Feature kTunedClippingLevelMin110{
131 "TunedClippingLevelMin110", base::FEATURE_DISABLED_BY_DEFAULT};
132 const base::Feature kTunedClippingLevelMin150{
133 "TunedClippingLevelMin150", base::FEATURE_DISABLED_BY_DEFAULT};
134 const base::Feature kTunedClippingLevelMin170{
135 "TunedClippingLevelMin170", base::FEATURE_DISABLED_BY_DEFAULT};
136
137 base::Optional<int> GetClippingLevelMin() {
138 if (base::FeatureList::IsEnabled(kTunedClippingLevelMin30))
139 return base::Optional<int>(30);
140 if (base::FeatureList::IsEnabled(kTunedClippingLevelMin70))
141 return base::Optional<int>(70);
142 if (base::FeatureList::IsEnabled(kTunedClippingLevelMin110))
143 return base::Optional<int>(110);
144 if (base::FeatureList::IsEnabled(kTunedClippingLevelMin150))
145 return base::Optional<int>(150);
146 if (base::FeatureList::IsEnabled(kTunedClippingLevelMin170))
147 return base::Optional<int>(170);
148 return base::Optional<int>();
149 }
150
151 // Checks if the AEC's refined adaptive filter tuning was enabled on the command 124 // Checks if the AEC's refined adaptive filter tuning was enabled on the command
152 // line. 125 // line.
153 bool UseAecRefinedAdaptiveFilter() { 126 bool UseAecRefinedAdaptiveFilter() {
154 return base::CommandLine::ForCurrentProcess()->HasSwitch( 127 return base::CommandLine::ForCurrentProcess()->HasSwitch(
155 switches::kAecRefinedAdaptiveFilter); 128 switches::kAecRefinedAdaptiveFilter);
156 } 129 }
157 130
158 } // namespace 131 } // namespace
159 132
160 // Wraps AudioBus to provide access to the array of channel pointers, since this 133 // Wraps AudioBus to provide access to the array of channel pointers, since this
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 GetArrayGeometryPreferringConstraints(audio_constraints, input_params); 639 GetArrayGeometryPreferringConstraints(audio_constraints, input_params);
667 640
668 // Only enable beamforming if we have at least two mics. 641 // Only enable beamforming if we have at least two mics.
669 config.Set<webrtc::Beamforming>( 642 config.Set<webrtc::Beamforming>(
670 new webrtc::Beamforming(geometry.size() > 1, geometry)); 643 new webrtc::Beamforming(geometry.size() > 1, geometry));
671 } 644 }
672 645
673 // If the experimental AGC is enabled, check for overridden config params. 646 // If the experimental AGC is enabled, check for overridden config params.
674 if (audio_constraints.GetGoogExperimentalAutoGainControl()) { 647 if (audio_constraints.GetGoogExperimentalAutoGainControl()) {
675 auto startup_min_volume = GetStartupMinVolumeForAgc(); 648 auto startup_min_volume = GetStartupMinVolumeForAgc();
676 auto clipping_level_min = GetClippingLevelMin(); 649 constexpr int kClippingLevelMin = 70;
677 if (startup_min_volume || clipping_level_min) { 650 // TODO(hlundin) Make this value default in WebRTC and clean up here.
678 config.Set<webrtc::ExperimentalAgc>(new webrtc::ExperimentalAgc( 651 config.Set<webrtc::ExperimentalAgc>(new webrtc::ExperimentalAgc(
679 true, startup_min_volume.value_or(0), 652 true, startup_min_volume.value_or(0), kClippingLevelMin));
680 clipping_level_min.value_or(webrtc::kClippedLevelMin)));
681 }
682 } 653 }
683 654
684 // Create and configure the webrtc::AudioProcessing. 655 // Create and configure the webrtc::AudioProcessing.
685 audio_processing_.reset(webrtc::AudioProcessing::Create(config)); 656 audio_processing_.reset(webrtc::AudioProcessing::Create(config));
686 657
687 // Enable the audio processing components. 658 // Enable the audio processing components.
688 webrtc::AudioProcessing::Config apm_config; 659 webrtc::AudioProcessing::Config apm_config;
689 660
690 if (playout_data_source_) { 661 if (playout_data_source_) {
691 playout_data_source_->AddPlayoutSink(this); 662 playout_data_source_->AddPlayoutSink(this);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 0 : agc->stream_analog_level(); 860 0 : agc->stream_analog_level();
890 } 861 }
891 862
892 void MediaStreamAudioProcessor::UpdateAecStats() { 863 void MediaStreamAudioProcessor::UpdateAecStats() {
893 DCHECK(main_thread_runner_->BelongsToCurrentThread()); 864 DCHECK(main_thread_runner_->BelongsToCurrentThread());
894 if (echo_information_) 865 if (echo_information_)
895 echo_information_->UpdateAecStats(audio_processing_->echo_cancellation()); 866 echo_information_->UpdateAecStats(audio_processing_->echo_cancellation());
896 } 867 }
897 868
898 } // namespace content 869 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698