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

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: Added macro call to limit copy and assign access 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_new_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;
(...skipping 1384 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); 1478 debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config);
1544 1479
1545 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), 1480 RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(),
1546 &debug_dump_.num_bytes_left_for_log_, 1481 &debug_dump_.num_bytes_left_for_log_,
1547 &crit_debug_, &debug_dump_.capture)); 1482 &crit_debug_, &debug_dump_.capture));
1548 return kNoError; 1483 return kNoError;
1549 } 1484 }
1550 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP 1485 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
1551 1486
1552 } // namespace webrtc 1487 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698