OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |