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

Side by Side Diff: webrtc/modules/audio_processing/audio_processing_impl.cc

Issue 1678813002: Moved the GainControlForNewAGC class to a separate file. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Changed the locking test to match how the gain control is used in practice and to comply with the n… Created 4 years, 10 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 11 matching lines...) Expand all
22 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar y.h" 22 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar y.h"
23 extern "C" { 23 extern "C" {
24 #include "webrtc/modules/audio_processing/aec/aec_core.h" 24 #include "webrtc/modules/audio_processing/aec/aec_core.h"
25 } 25 }
26 #include "webrtc/modules/audio_processing/agc/agc_manager_direct.h" 26 #include "webrtc/modules/audio_processing/agc/agc_manager_direct.h"
27 #include "webrtc/modules/audio_processing/audio_buffer.h" 27 #include "webrtc/modules/audio_processing/audio_buffer.h"
28 #include "webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h" 28 #include "webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h"
29 #include "webrtc/modules/audio_processing/common.h" 29 #include "webrtc/modules/audio_processing/common.h"
30 #include "webrtc/modules/audio_processing/echo_cancellation_impl.h" 30 #include "webrtc/modules/audio_processing/echo_cancellation_impl.h"
31 #include "webrtc/modules/audio_processing/echo_control_mobile_impl.h" 31 #include "webrtc/modules/audio_processing/echo_control_mobile_impl.h"
32 #include "webrtc/modules/audio_processing/gain_control_for_experimental_agc.h"
32 #include "webrtc/modules/audio_processing/gain_control_impl.h" 33 #include "webrtc/modules/audio_processing/gain_control_impl.h"
33 #include "webrtc/modules/audio_processing/high_pass_filter_impl.h" 34 #include "webrtc/modules/audio_processing/high_pass_filter_impl.h"
34 #include "webrtc/modules/audio_processing/intelligibility/intelligibility_enhanc er.h" 35 #include "webrtc/modules/audio_processing/intelligibility/intelligibility_enhanc er.h"
35 #include "webrtc/modules/audio_processing/level_estimator_impl.h" 36 #include "webrtc/modules/audio_processing/level_estimator_impl.h"
36 #include "webrtc/modules/audio_processing/noise_suppression_impl.h" 37 #include "webrtc/modules/audio_processing/noise_suppression_impl.h"
37 #include "webrtc/modules/audio_processing/processing_component.h" 38 #include "webrtc/modules/audio_processing/processing_component.h"
38 #include "webrtc/modules/audio_processing/transient/transient_suppressor.h" 39 #include "webrtc/modules/audio_processing/transient/transient_suppressor.h"
39 #include "webrtc/modules/audio_processing/voice_detection_impl.h" 40 #include "webrtc/modules/audio_processing/voice_detection_impl.h"
40 #include "webrtc/modules/include/module_common_types.h" 41 #include "webrtc/modules/include/module_common_types.h"
41 #include "webrtc/system_wrappers/include/file_wrapper.h" 42 #include "webrtc/system_wrappers/include/file_wrapper.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 } 74 }
74 75
75 assert(false); 76 assert(false);
76 return false; 77 return false;
77 } 78 }
78 } // namespace 79 } // namespace
79 80
80 // Throughout webrtc, it's assumed that success is represented by zero. 81 // Throughout webrtc, it's assumed that success is represented by zero.
81 static_assert(AudioProcessing::kNoError == 0, "kNoError must be zero"); 82 static_assert(AudioProcessing::kNoError == 0, "kNoError must be zero");
82 83
83 // This class has two main functionalities:
84 //
85 // 1) It is returned instead of the real GainControl after the new AGC has been
86 // enabled in order to prevent an outside user from overriding compression
87 // settings. It doesn't do anything in its implementation, except for
88 // delegating the const methods and Enable calls to the real GainControl, so
89 // AGC can still be disabled.
90 //
91 // 2) It is injected into AgcManagerDirect and implements volume callbacks for
92 // getting and setting the volume level. It just caches this value to be used
93 // in VoiceEngine later.
94 class GainControlForNewAgc : public GainControl, public VolumeCallbacks {
95 public:
96 explicit GainControlForNewAgc(GainControlImpl* gain_control)
97 : real_gain_control_(gain_control), volume_(0) {}
98
99 // GainControl implementation.
100 int Enable(bool enable) override {
101 return real_gain_control_->Enable(enable);
102 }
103 bool is_enabled() const override { return real_gain_control_->is_enabled(); }
104 int set_stream_analog_level(int level) override {
105 volume_ = level;
106 return AudioProcessing::kNoError;
107 }
108 int stream_analog_level() override { return volume_; }
109 int set_mode(Mode mode) override { return AudioProcessing::kNoError; }
110 Mode mode() const override { return GainControl::kAdaptiveAnalog; }
111 int set_target_level_dbfs(int level) override {
112 return AudioProcessing::kNoError;
113 }
114 int target_level_dbfs() const override {
115 return real_gain_control_->target_level_dbfs();
116 }
117 int set_compression_gain_db(int gain) override {
118 return AudioProcessing::kNoError;
119 }
120 int compression_gain_db() const override {
121 return real_gain_control_->compression_gain_db();
122 }
123 int enable_limiter(bool enable) override { return AudioProcessing::kNoError; }
124 bool is_limiter_enabled() const override {
125 return real_gain_control_->is_limiter_enabled();
126 }
127 int set_analog_level_limits(int minimum, int maximum) override {
128 return AudioProcessing::kNoError;
129 }
130 int analog_level_minimum() const override {
131 return real_gain_control_->analog_level_minimum();
132 }
133 int analog_level_maximum() const override {
134 return real_gain_control_->analog_level_maximum();
135 }
136 bool stream_is_saturated() const override {
137 return real_gain_control_->stream_is_saturated();
138 }
139
140 // VolumeCallbacks implementation.
141 void SetMicVolume(int volume) override { volume_ = volume; }
142 int GetMicVolume() override { return volume_; }
143
144 private:
145 GainControl* real_gain_control_;
146 int volume_;
147 };
148
149 struct AudioProcessingImpl::ApmPublicSubmodules { 84 struct AudioProcessingImpl::ApmPublicSubmodules {
150 ApmPublicSubmodules() 85 ApmPublicSubmodules()
151 : echo_cancellation(nullptr), 86 : echo_cancellation(nullptr),
152 echo_control_mobile(nullptr), 87 echo_control_mobile(nullptr),
153 gain_control(nullptr) {} 88 gain_control(nullptr) {}
154 // Accessed externally of APM without any lock acquired. 89 // Accessed externally of APM without any lock acquired.
155 EchoCancellationImpl* echo_cancellation; 90 EchoCancellationImpl* echo_cancellation;
156 EchoControlMobileImpl* echo_control_mobile; 91 EchoControlMobileImpl* echo_control_mobile;
157 GainControlImpl* gain_control; 92 GainControlImpl* gain_control;
158 rtc::scoped_ptr<HighPassFilterImpl> high_pass_filter; 93 rtc::scoped_ptr<HighPassFilterImpl> high_pass_filter;
159 rtc::scoped_ptr<LevelEstimatorImpl> level_estimator; 94 rtc::scoped_ptr<LevelEstimatorImpl> level_estimator;
160 rtc::scoped_ptr<NoiseSuppressionImpl> noise_suppression; 95 rtc::scoped_ptr<NoiseSuppressionImpl> noise_suppression;
161 rtc::scoped_ptr<VoiceDetectionImpl> voice_detection; 96 rtc::scoped_ptr<VoiceDetectionImpl> voice_detection;
162 rtc::scoped_ptr<GainControlForNewAgc> gain_control_for_new_agc; 97 rtc::scoped_ptr<GainControlForExperimentalAgc>
98 gain_control_for_experimental_agc;
163 99
164 // Accessed internally from both render and capture. 100 // Accessed internally from both render and capture.
165 rtc::scoped_ptr<TransientSuppressor> transient_suppressor; 101 rtc::scoped_ptr<TransientSuppressor> transient_suppressor;
166 rtc::scoped_ptr<IntelligibilityEnhancer> intelligibility_enhancer; 102 rtc::scoped_ptr<IntelligibilityEnhancer> intelligibility_enhancer;
167 }; 103 };
168 104
169 struct AudioProcessingImpl::ApmPrivateSubmodules { 105 struct AudioProcessingImpl::ApmPrivateSubmodules {
170 explicit ApmPrivateSubmodules(Beamformer<float>* beamformer) 106 explicit ApmPrivateSubmodules(Beamformer<float>* beamformer)
171 : beamformer(beamformer) {} 107 : beamformer(beamformer) {}
172 // Accessed internally from capture or during initialization 108 // Accessed internally from capture or during initialization
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 public_submodules_->gain_control = 177 public_submodules_->gain_control =
242 new GainControlImpl(this, &crit_capture_, &crit_capture_); 178 new GainControlImpl(this, &crit_capture_, &crit_capture_);
243 public_submodules_->high_pass_filter.reset( 179 public_submodules_->high_pass_filter.reset(
244 new HighPassFilterImpl(&crit_capture_)); 180 new HighPassFilterImpl(&crit_capture_));
245 public_submodules_->level_estimator.reset( 181 public_submodules_->level_estimator.reset(
246 new LevelEstimatorImpl(&crit_capture_)); 182 new LevelEstimatorImpl(&crit_capture_));
247 public_submodules_->noise_suppression.reset( 183 public_submodules_->noise_suppression.reset(
248 new NoiseSuppressionImpl(&crit_capture_)); 184 new NoiseSuppressionImpl(&crit_capture_));
249 public_submodules_->voice_detection.reset( 185 public_submodules_->voice_detection.reset(
250 new VoiceDetectionImpl(&crit_capture_)); 186 new VoiceDetectionImpl(&crit_capture_));
251 public_submodules_->gain_control_for_new_agc.reset( 187 public_submodules_->gain_control_for_experimental_agc.reset(
252 new GainControlForNewAgc(public_submodules_->gain_control)); 188 new GainControlForExperimentalAgc(public_submodules_->gain_control));
253 189
254 private_submodules_->component_list.push_back( 190 private_submodules_->component_list.push_back(
255 public_submodules_->echo_cancellation); 191 public_submodules_->echo_cancellation);
256 private_submodules_->component_list.push_back( 192 private_submodules_->component_list.push_back(
257 public_submodules_->echo_control_mobile); 193 public_submodules_->echo_control_mobile);
258 private_submodules_->component_list.push_back( 194 private_submodules_->component_list.push_back(
259 public_submodules_->gain_control); 195 public_submodules_->gain_control);
260 } 196 }
261 197
262 SetExtraOptions(config); 198 SetExtraOptions(config);
263 } 199 }
264 200
265 AudioProcessingImpl::~AudioProcessingImpl() { 201 AudioProcessingImpl::~AudioProcessingImpl() {
266 // Depends on gain_control_ and 202 // Depends on gain_control_ and
267 // public_submodules_->gain_control_for_new_agc. 203 // public_submodules_->gain_control_for_experimental_agc.
268 private_submodules_->agc_manager.reset(); 204 private_submodules_->agc_manager.reset();
269 // Depends on gain_control_. 205 // Depends on gain_control_.
270 public_submodules_->gain_control_for_new_agc.reset(); 206 public_submodules_->gain_control_for_experimental_agc.reset();
271 while (!private_submodules_->component_list.empty()) { 207 while (!private_submodules_->component_list.empty()) {
272 ProcessingComponent* component = 208 ProcessingComponent* component =
273 private_submodules_->component_list.front(); 209 private_submodules_->component_list.front();
274 component->Destroy(); 210 component->Destroy();
275 delete component; 211 delete component;
276 private_submodules_->component_list.pop_front(); 212 private_submodules_->component_list.pop_front();
277 } 213 }
278 214
279 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 215 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
280 if (debug_dump_.debug_file->Open()) { 216 if (debug_dump_.debug_file->Open()) {
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 public_submodules_->echo_cancellation->stream_drift_samples()); 688 public_submodules_->echo_cancellation->stream_drift_samples());
753 msg->set_level(gain_control()->stream_analog_level()); 689 msg->set_level(gain_control()->stream_analog_level());
754 msg->set_keypress(capture_.key_pressed); 690 msg->set_keypress(capture_.key_pressed);
755 } 691 }
756 #endif 692 #endif
757 693
758 MaybeUpdateHistograms(); 694 MaybeUpdateHistograms();
759 695
760 AudioBuffer* ca = capture_.capture_audio.get(); // For brevity. 696 AudioBuffer* ca = capture_.capture_audio.get(); // For brevity.
761 697
762 if (constants_.use_new_agc && 698 if (constants_.use_experimental_agc &&
763 public_submodules_->gain_control->is_enabled()) { 699 public_submodules_->gain_control->is_enabled()) {
764 private_submodules_->agc_manager->AnalyzePreProcess( 700 private_submodules_->agc_manager->AnalyzePreProcess(
765 ca->channels()[0], ca->num_channels(), 701 ca->channels()[0], ca->num_channels(),
766 capture_nonlocked_.fwd_proc_format.num_frames()); 702 capture_nonlocked_.fwd_proc_format.num_frames());
767 } 703 }
768 704
769 bool data_processed = is_data_processed(); 705 bool data_processed = is_data_processed();
770 if (analysis_needed(data_processed)) { 706 if (analysis_needed(data_processed)) {
771 ca->SplitIntoFrequencyBands(); 707 ca->SplitIntoFrequencyBands();
772 } 708 }
(...skipping 17 matching lines...) Expand all
790 726
791 if (public_submodules_->echo_control_mobile->is_enabled() && 727 if (public_submodules_->echo_control_mobile->is_enabled() &&
792 public_submodules_->noise_suppression->is_enabled()) { 728 public_submodules_->noise_suppression->is_enabled()) {
793 ca->CopyLowPassToReference(); 729 ca->CopyLowPassToReference();
794 } 730 }
795 public_submodules_->noise_suppression->ProcessCaptureAudio(ca); 731 public_submodules_->noise_suppression->ProcessCaptureAudio(ca);
796 RETURN_ON_ERR( 732 RETURN_ON_ERR(
797 public_submodules_->echo_control_mobile->ProcessCaptureAudio(ca)); 733 public_submodules_->echo_control_mobile->ProcessCaptureAudio(ca));
798 public_submodules_->voice_detection->ProcessCaptureAudio(ca); 734 public_submodules_->voice_detection->ProcessCaptureAudio(ca);
799 735
800 if (constants_.use_new_agc && 736 if (constants_.use_experimental_agc &&
801 public_submodules_->gain_control->is_enabled() && 737 public_submodules_->gain_control->is_enabled() &&
802 (!capture_nonlocked_.beamformer_enabled || 738 (!capture_nonlocked_.beamformer_enabled ||
803 private_submodules_->beamformer->is_target_present())) { 739 private_submodules_->beamformer->is_target_present())) {
804 private_submodules_->agc_manager->Process( 740 private_submodules_->agc_manager->Process(
805 ca->split_bands_const(0)[kBand0To8kHz], ca->num_frames_per_band(), 741 ca->split_bands_const(0)[kBand0To8kHz], ca->num_frames_per_band(),
806 capture_nonlocked_.split_rate); 742 capture_nonlocked_.split_rate);
807 } 743 }
808 RETURN_ON_ERR(public_submodules_->gain_control->ProcessCaptureAudio(ca)); 744 RETURN_ON_ERR(public_submodules_->gain_control->ProcessCaptureAudio(ca));
809 745
810 if (synthesis_needed(data_processed)) { 746 if (synthesis_needed(data_processed)) {
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 // TODO(peah): Fix to be properly multi-threaded. 928 // TODO(peah): Fix to be properly multi-threaded.
993 rtc::CritScope cs(&crit_capture_); 929 rtc::CritScope cs(&crit_capture_);
994 public_submodules_->intelligibility_enhancer->ProcessRenderAudio( 930 public_submodules_->intelligibility_enhancer->ProcessRenderAudio(
995 ra->split_channels_f(kBand0To8kHz), capture_nonlocked_.split_rate, 931 ra->split_channels_f(kBand0To8kHz), capture_nonlocked_.split_rate,
996 ra->num_channels()); 932 ra->num_channels());
997 } 933 }
998 934
999 RETURN_ON_ERR(public_submodules_->echo_cancellation->ProcessRenderAudio(ra)); 935 RETURN_ON_ERR(public_submodules_->echo_cancellation->ProcessRenderAudio(ra));
1000 RETURN_ON_ERR( 936 RETURN_ON_ERR(
1001 public_submodules_->echo_control_mobile->ProcessRenderAudio(ra)); 937 public_submodules_->echo_control_mobile->ProcessRenderAudio(ra));
1002 if (!constants_.use_new_agc) { 938 if (!constants_.use_experimental_agc) {
1003 RETURN_ON_ERR(public_submodules_->gain_control->ProcessRenderAudio(ra)); 939 RETURN_ON_ERR(public_submodules_->gain_control->ProcessRenderAudio(ra));
1004 } 940 }
1005 941
1006 if (formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz && 942 if (formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz &&
1007 is_rev_processed()) { 943 is_rev_processed()) {
1008 ra->MergeFrequencyBands(); 944 ra->MergeFrequencyBands();
1009 } 945 }
1010 946
1011 return kNoError; 947 return kNoError;
1012 } 948 }
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1158 1094
1159 EchoControlMobile* AudioProcessingImpl::echo_control_mobile() const { 1095 EchoControlMobile* AudioProcessingImpl::echo_control_mobile() const {
1160 // Adding a lock here has no effect as it allows any access to the submodule 1096 // Adding a lock here has no effect as it allows any access to the submodule
1161 // from the returned pointer. 1097 // from the returned pointer.
1162 return public_submodules_->echo_control_mobile; 1098 return public_submodules_->echo_control_mobile;
1163 } 1099 }
1164 1100
1165 GainControl* AudioProcessingImpl::gain_control() const { 1101 GainControl* AudioProcessingImpl::gain_control() const {
1166 // Adding a lock here has no effect as it allows any access to the submodule 1102 // Adding a lock here has no effect as it allows any access to the submodule
1167 // from the returned pointer. 1103 // from the returned pointer.
1168 if (constants_.use_new_agc) { 1104 if (constants_.use_experimental_agc) {
1169 return public_submodules_->gain_control_for_new_agc.get(); 1105 return public_submodules_->gain_control_for_experimental_agc.get();
1170 } 1106 }
1171 return public_submodules_->gain_control; 1107 return public_submodules_->gain_control;
1172 } 1108 }
1173 1109
1174 HighPassFilter* AudioProcessingImpl::high_pass_filter() const { 1110 HighPassFilter* AudioProcessingImpl::high_pass_filter() const {
1175 // Adding a lock here has no effect as it allows any access to the submodule 1111 // Adding a lock here has no effect as it allows any access to the submodule
1176 // from the returned pointer. 1112 // from the returned pointer.
1177 return public_submodules_->high_pass_filter.get(); 1113 return public_submodules_->high_pass_filter.get();
1178 } 1114 }
1179 1115
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 bool AudioProcessingImpl::render_check_rev_conversion_needed() const { 1214 bool AudioProcessingImpl::render_check_rev_conversion_needed() const {
1279 return rev_conversion_needed(); 1215 return rev_conversion_needed();
1280 } 1216 }
1281 1217
1282 bool AudioProcessingImpl::rev_conversion_needed() const { 1218 bool AudioProcessingImpl::rev_conversion_needed() const {
1283 return (formats_.api_format.reverse_input_stream() != 1219 return (formats_.api_format.reverse_input_stream() !=
1284 formats_.api_format.reverse_output_stream()); 1220 formats_.api_format.reverse_output_stream());
1285 } 1221 }
1286 1222
1287 void AudioProcessingImpl::InitializeExperimentalAgc() { 1223 void AudioProcessingImpl::InitializeExperimentalAgc() {
1288 if (constants_.use_new_agc) { 1224 if (constants_.use_experimental_agc) {
1289 if (!private_submodules_->agc_manager.get()) { 1225 if (!private_submodules_->agc_manager.get()) {
1290 private_submodules_->agc_manager.reset(new AgcManagerDirect( 1226 private_submodules_->agc_manager.reset(new AgcManagerDirect(
1291 public_submodules_->gain_control, 1227 public_submodules_->gain_control,
1292 public_submodules_->gain_control_for_new_agc.get(), 1228 public_submodules_->gain_control_for_experimental_agc.get(),
1293 constants_.agc_startup_min_volume)); 1229 constants_.agc_startup_min_volume));
1294 } 1230 }
1295 private_submodules_->agc_manager->Initialize(); 1231 private_submodules_->agc_manager->Initialize();
1296 private_submodules_->agc_manager->SetCaptureMuted( 1232 private_submodules_->agc_manager->SetCaptureMuted(
1297 capture_.output_will_be_muted); 1233 capture_.output_will_be_muted);
1298 } 1234 }
1299 } 1235 }
1300 1236
1301 void AudioProcessingImpl::InitializeTransient() { 1237 void AudioProcessingImpl::InitializeTransient() {
1302 if (capture_.transient_suppressor_enabled) { 1238 if (capture_.transient_suppressor_enabled) {
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
1513 config.set_aecm_comfort_noise_enabled( 1449 config.set_aecm_comfort_noise_enabled(
1514 public_submodules_->echo_control_mobile->is_comfort_noise_enabled()); 1450 public_submodules_->echo_control_mobile->is_comfort_noise_enabled());
1515 config.set_aecm_routing_mode(static_cast<int>( 1451 config.set_aecm_routing_mode(static_cast<int>(
1516 public_submodules_->echo_control_mobile->routing_mode())); 1452 public_submodules_->echo_control_mobile->routing_mode()));
1517 1453
1518 config.set_agc_enabled(public_submodules_->gain_control->is_enabled()); 1454 config.set_agc_enabled(public_submodules_->gain_control->is_enabled());
1519 config.set_agc_mode( 1455 config.set_agc_mode(
1520 static_cast<int>(public_submodules_->gain_control->mode())); 1456 static_cast<int>(public_submodules_->gain_control->mode()));
1521 config.set_agc_limiter_enabled( 1457 config.set_agc_limiter_enabled(
1522 public_submodules_->gain_control->is_limiter_enabled()); 1458 public_submodules_->gain_control->is_limiter_enabled());
1523 config.set_noise_robust_agc_enabled(constants_.use_new_agc); 1459 config.set_noise_robust_agc_enabled(constants_.use_experimental_agc);
1524 1460
1525 config.set_hpf_enabled(public_submodules_->high_pass_filter->is_enabled()); 1461 config.set_hpf_enabled(public_submodules_->high_pass_filter->is_enabled());
1526 1462
1527 config.set_ns_enabled(public_submodules_->noise_suppression->is_enabled()); 1463 config.set_ns_enabled(public_submodules_->noise_suppression->is_enabled());
1528 config.set_ns_level( 1464 config.set_ns_level(
1529 static_cast<int>(public_submodules_->noise_suppression->level())); 1465 static_cast<int>(public_submodules_->noise_suppression->level()));
1530 1466
1531 config.set_transient_suppression_enabled( 1467 config.set_transient_suppression_enabled(
1532 capture_.transient_suppressor_enabled); 1468 capture_.transient_suppressor_enabled);
1533 1469
1534 std::string serialized_config = config.SerializeAsString(); 1470 std::string serialized_config = config.SerializeAsString();
1535 if (!forced && 1471 if (!forced &&
1536 debug_dump_.capture.last_serialized_config == serialized_config) { 1472 debug_dump_.capture.last_serialized_config == serialized_config) {
1537 return kNoError; 1473 return kNoError;
1538 } 1474 }
1539 1475
1540 debug_dump_.capture.last_serialized_config = serialized_config; 1476 debug_dump_.capture.last_serialized_config = serialized_config;
1541 1477
1542 debug_dump_.capture.event_msg->set_type(audioproc::Event::CONFIG); 1478 debug_dump_.capture.event_msg->set_type(audioproc::Event::CONFIG);
1543 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); 1479 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config);
1544 1480
1545 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 1481 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
1546 &debug_dump_.num_bytes_left_for_log_, 1482 &debug_dump_.num_bytes_left_for_log_,
1547 &crit_debug_, &debug_dump_.capture)); 1483 &crit_debug_, &debug_dump_.capture));
1548 return kNoError; 1484 return kNoError;
1549 } 1485 }
1550 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP 1486 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
1551 1487
1552 } // namespace webrtc 1488 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698