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

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

Issue 2787123003: Correction of the AEC3 underrun behavior and minor other corrections (Closed)
Patch Set: Rebase Created 3 years, 8 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"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 data_dumper_->DumpWav("aec3_processblock_capture_input2", kBlockSize, 94 data_dumper_->DumpWav("aec3_processblock_capture_input2", kBlockSize,
95 &(*capture_block)[0][0], 95 &(*capture_block)[0][0],
96 LowestBandRate(sample_rate_hz_), 1); 96 LowestBandRate(sample_rate_hz_), 1);
97 97
98 bool render_buffer_underrun = false; 98 bool render_buffer_underrun = false;
99 if (render_buffer_overrun_occurred_) { 99 if (render_buffer_overrun_occurred_) {
100 // Reset the render buffers and the alignment functionality when there has 100 // Reset the render buffers and the alignment functionality when there has
101 // been a render buffer overrun as the buffer alignment may be noncausal. 101 // been a render buffer overrun as the buffer alignment may be noncausal.
102 delay_controller_->Reset(); 102 delay_controller_->Reset();
103 render_buffer_->Reset(); 103 render_buffer_->Reset();
104 } else { 104 }
105 // Update the render buffers with new render data, filling the buffers with
106 // empty blocks when there is no render data available.
107 render_buffer_underrun = !render_buffer_->UpdateBuffers();
108 105
109 // Compute and and apply the render delay required to achieve proper signal 106 // Update the render buffers with new render data, filling the buffers with
110 // alignment. 107 // empty blocks when there is no render data available.
111 const size_t old_delay = render_buffer_->Delay(); 108 render_buffer_underrun = !render_buffer_->UpdateBuffers();
112 const size_t new_delay = delay_controller_->GetDelay(
113 render_buffer_->GetDownsampledRenderBuffer(), (*capture_block)[0]);
114 render_buffer_->SetDelay(new_delay);
115 const size_t achieved_delay = render_buffer_->Delay();
116 109
117 // Inform the delay controller of the actually set delay to allow it to 110 // Compute and and apply the render delay required to achieve proper signal
118 // properly react to a non-feasible delay. 111 // alignment.
119 delay_controller_->SetDelay(achieved_delay); 112 const size_t old_delay = render_buffer_->Delay();
113 const size_t new_delay = delay_controller_->GetDelay(
114 render_buffer_->GetDownsampledRenderBuffer(), (*capture_block)[0]);
115 render_buffer_->SetDelay(new_delay);
116 const size_t achieved_delay = render_buffer_->Delay();
120 117
121 // Remove the echo from the capture signal. 118 // Inform the delay controller of the actually set delay to allow it to
122 echo_remover_->ProcessCapture( 119 // properly react to a non-feasible delay.
123 delay_controller_->AlignmentHeadroomSamples(), 120 delay_controller_->SetDelay(achieved_delay);
124 EchoPathVariability(echo_path_gain_change, 121
125 old_delay != achieved_delay || 122 // Remove the echo from the capture signal.
126 old_delay != new_delay || 123 echo_remover_->ProcessCapture(
127 render_buffer_overrun_occurred_), 124 delay_controller_->AlignmentHeadroomSamples(),
128 capture_signal_saturation, render_buffer_->GetRenderBuffer(), 125 EchoPathVariability(echo_path_gain_change,
129 capture_block); 126 old_delay != achieved_delay ||
130 } 127 old_delay != new_delay ||
128 render_buffer_overrun_occurred_),
129 capture_signal_saturation, render_buffer_->GetRenderBuffer(),
130 capture_block);
131 131
132 // Update the metrics. 132 // Update the metrics.
133 metrics_.UpdateCapture(render_buffer_underrun); 133 metrics_.UpdateCapture(render_buffer_underrun);
134 134
135 render_buffer_overrun_occurred_ = false; 135 render_buffer_overrun_occurred_ = false;
136 } 136 }
137 137
138 void BlockProcessorImpl::BufferRender( 138 void BlockProcessorImpl::BufferRender(
139 const std::vector<std::vector<float>>& block) { 139 const std::vector<std::vector<float>>& block) {
140 RTC_DCHECK_EQ(NumBandsForRate(sample_rate_hz_), block.size()); 140 RTC_DCHECK_EQ(NumBandsForRate(sample_rate_hz_), block.size());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 int sample_rate_hz, 194 int sample_rate_hz,
195 std::unique_ptr<RenderDelayBuffer> render_buffer, 195 std::unique_ptr<RenderDelayBuffer> render_buffer,
196 std::unique_ptr<RenderDelayController> delay_controller, 196 std::unique_ptr<RenderDelayController> delay_controller,
197 std::unique_ptr<EchoRemover> echo_remover) { 197 std::unique_ptr<EchoRemover> echo_remover) {
198 return new BlockProcessorImpl(sample_rate_hz, std::move(render_buffer), 198 return new BlockProcessorImpl(sample_rate_hz, std::move(render_buffer),
199 std::move(delay_controller), 199 std::move(delay_controller),
200 std::move(echo_remover)); 200 std::move(echo_remover));
201 } 201 }
202 202
203 } // namespace webrtc 203 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/aec3/aec3_common.h ('k') | webrtc/modules/audio_processing/aec3/render_delay_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698