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

Side by Side Diff: webrtc/modules/audio_processing/aec3/block_processor.cc

Issue 2967603002: Added the ability to adjust the AEC3 performance for large rooms (Closed)
Patch Set: Created 3 years, 5 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) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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 #include "webrtc/modules/audio_processing/aec3/block_processor.h" 10 #include "webrtc/modules/audio_processing/aec3/block_processor.h"
11 11
12 #include "webrtc/base/atomicops.h" 12 #include "webrtc/base/atomicops.h"
13 #include "webrtc/base/constructormagic.h" 13 #include "webrtc/base/constructormagic.h"
14 #include "webrtc/base/optional.h" 14 #include "webrtc/base/optional.h"
15 #include "webrtc/modules/audio_processing/aec3/aec3_common.h" 15 #include "webrtc/modules/audio_processing/aec3/aec3_common.h"
16 #include "webrtc/modules/audio_processing/aec3/block_processor_metrics.h" 16 #include "webrtc/modules/audio_processing/aec3/block_processor_metrics.h"
17 #include "webrtc/modules/audio_processing/aec3/echo_path_variability.h" 17 #include "webrtc/modules/audio_processing/aec3/echo_path_variability.h"
18 #include "webrtc/modules/audio_processing/logging/apm_data_dumper.h" 18 #include "webrtc/modules/audio_processing/logging/apm_data_dumper.h"
19 19
20 namespace webrtc { 20 namespace webrtc {
21 namespace { 21 namespace {
22 22
23 enum class BlockProcessorApiCall { kCapture, kRender }; 23 enum class BlockProcessorApiCall { kCapture, kRender };
24 24
25 class BlockProcessorImpl final : public BlockProcessor { 25 class BlockProcessorImpl final : public BlockProcessor {
26 public: 26 public:
27 BlockProcessorImpl(int sample_rate_hz, 27 BlockProcessorImpl(const AudioProcessing::Config::EchoCanceller3& config,
28 int sample_rate_hz,
28 std::unique_ptr<RenderDelayBuffer> render_buffer, 29 std::unique_ptr<RenderDelayBuffer> render_buffer,
29 std::unique_ptr<RenderDelayController> delay_controller, 30 std::unique_ptr<RenderDelayController> delay_controller,
30 std::unique_ptr<EchoRemover> echo_remover); 31 std::unique_ptr<EchoRemover> echo_remover);
31 32
32 ~BlockProcessorImpl() override; 33 ~BlockProcessorImpl() override;
33 34
34 void ProcessCapture(bool echo_path_gain_change, 35 void ProcessCapture(bool echo_path_gain_change,
35 bool capture_signal_saturation, 36 bool capture_signal_saturation,
36 std::vector<std::vector<float>>* capture_block) override; 37 std::vector<std::vector<float>>* capture_block) override;
37 38
(...skipping 11 matching lines...) Expand all
49 std::unique_ptr<RenderDelayController> delay_controller_; 50 std::unique_ptr<RenderDelayController> delay_controller_;
50 std::unique_ptr<EchoRemover> echo_remover_; 51 std::unique_ptr<EchoRemover> echo_remover_;
51 BlockProcessorMetrics metrics_; 52 BlockProcessorMetrics metrics_;
52 bool render_buffer_overrun_occurred_ = false; 53 bool render_buffer_overrun_occurred_ = false;
53 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(BlockProcessorImpl); 54 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(BlockProcessorImpl);
54 }; 55 };
55 56
56 int BlockProcessorImpl::instance_count_ = 0; 57 int BlockProcessorImpl::instance_count_ = 0;
57 58
58 BlockProcessorImpl::BlockProcessorImpl( 59 BlockProcessorImpl::BlockProcessorImpl(
60 const AudioProcessing::Config::EchoCanceller3& config,
ivoc 2017/06/30 11:40:03 This argument is not currently used here, why is i
peah-webrtc 2017/06/30 13:20:16 No, you are totally right. I did not realize that.
59 int sample_rate_hz, 61 int sample_rate_hz,
60 std::unique_ptr<RenderDelayBuffer> render_buffer, 62 std::unique_ptr<RenderDelayBuffer> render_buffer,
61 std::unique_ptr<RenderDelayController> delay_controller, 63 std::unique_ptr<RenderDelayController> delay_controller,
62 std::unique_ptr<EchoRemover> echo_remover) 64 std::unique_ptr<EchoRemover> echo_remover)
63 : data_dumper_( 65 : data_dumper_(
64 new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))), 66 new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))),
65 sample_rate_hz_(sample_rate_hz), 67 sample_rate_hz_(sample_rate_hz),
66 render_buffer_(std::move(render_buffer)), 68 render_buffer_(std::move(render_buffer)),
67 delay_controller_(std::move(delay_controller)), 69 delay_controller_(std::move(delay_controller)),
68 echo_remover_(std::move(echo_remover)) { 70 echo_remover_(std::move(echo_remover)) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 // Update the metrics. 163 // Update the metrics.
162 metrics_.UpdateRender(render_buffer_overrun_occurred_); 164 metrics_.UpdateRender(render_buffer_overrun_occurred_);
163 } 165 }
164 166
165 void BlockProcessorImpl::UpdateEchoLeakageStatus(bool leakage_detected) { 167 void BlockProcessorImpl::UpdateEchoLeakageStatus(bool leakage_detected) {
166 echo_remover_->UpdateEchoLeakageStatus(leakage_detected); 168 echo_remover_->UpdateEchoLeakageStatus(leakage_detected);
167 } 169 }
168 170
169 } // namespace 171 } // namespace
170 172
171 BlockProcessor* BlockProcessor::Create(int sample_rate_hz) { 173 BlockProcessor* BlockProcessor::Create(
174 const AudioProcessing::Config::EchoCanceller3& config,
175 int sample_rate_hz) {
172 std::unique_ptr<RenderDelayBuffer> render_buffer( 176 std::unique_ptr<RenderDelayBuffer> render_buffer(
173 RenderDelayBuffer::Create(NumBandsForRate(sample_rate_hz))); 177 RenderDelayBuffer::Create(NumBandsForRate(sample_rate_hz)));
174 std::unique_ptr<RenderDelayController> delay_controller( 178 std::unique_ptr<RenderDelayController> delay_controller(
175 RenderDelayController::Create(sample_rate_hz)); 179 RenderDelayController::Create(sample_rate_hz));
176 std::unique_ptr<EchoRemover> echo_remover( 180 std::unique_ptr<EchoRemover> echo_remover(
177 EchoRemover::Create(sample_rate_hz)); 181 EchoRemover::Create(config, sample_rate_hz));
178 return Create(sample_rate_hz, std::move(render_buffer), 182 return Create(config, sample_rate_hz, std::move(render_buffer),
179 std::move(delay_controller), std::move(echo_remover)); 183 std::move(delay_controller), std::move(echo_remover));
180 } 184 }
181 185
182 BlockProcessor* BlockProcessor::Create( 186 BlockProcessor* BlockProcessor::Create(
187 const AudioProcessing::Config::EchoCanceller3& config,
183 int sample_rate_hz, 188 int sample_rate_hz,
184 std::unique_ptr<RenderDelayBuffer> render_buffer) { 189 std::unique_ptr<RenderDelayBuffer> render_buffer) {
185 std::unique_ptr<RenderDelayController> delay_controller( 190 std::unique_ptr<RenderDelayController> delay_controller(
186 RenderDelayController::Create(sample_rate_hz)); 191 RenderDelayController::Create(sample_rate_hz));
187 std::unique_ptr<EchoRemover> echo_remover( 192 std::unique_ptr<EchoRemover> echo_remover(
188 EchoRemover::Create(sample_rate_hz)); 193 EchoRemover::Create(config, sample_rate_hz));
189 return Create(sample_rate_hz, std::move(render_buffer), 194 return Create(config, sample_rate_hz, std::move(render_buffer),
190 std::move(delay_controller), std::move(echo_remover)); 195 std::move(delay_controller), std::move(echo_remover));
191 } 196 }
192 197
193 BlockProcessor* BlockProcessor::Create( 198 BlockProcessor* BlockProcessor::Create(
199 const AudioProcessing::Config::EchoCanceller3& config,
194 int sample_rate_hz, 200 int sample_rate_hz,
195 std::unique_ptr<RenderDelayBuffer> render_buffer, 201 std::unique_ptr<RenderDelayBuffer> render_buffer,
196 std::unique_ptr<RenderDelayController> delay_controller, 202 std::unique_ptr<RenderDelayController> delay_controller,
197 std::unique_ptr<EchoRemover> echo_remover) { 203 std::unique_ptr<EchoRemover> echo_remover) {
198 return new BlockProcessorImpl(sample_rate_hz, std::move(render_buffer), 204 return new BlockProcessorImpl(
199 std::move(delay_controller), 205 config, sample_rate_hz, std::move(render_buffer),
200 std::move(echo_remover)); 206 std::move(delay_controller), std::move(echo_remover));
201 } 207 }
202 208
203 } // namespace webrtc 209 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698