Commit graph

442 commits

Author SHA1 Message Date
Per Åhgren
251c7355aa Add a specific AEC3 behavior for setups with known clock-drift
TBR=gustaf@webrtc.org

Change-Id: I9c726fc8e1b010255a1bee166c99fe6cb75d7658
Bug: chromium:826655,webrtc:9079
Reviewed-on: https://webrtc-review.googlesource.com/64982
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22657}
2018-03-28 16:51:57 +00:00
Per Åhgren
f7ac09fca5 Changing log levels and logging of the AEC3 render buffer alignment
Bug: webrtc:8671
Change-Id: I0e626bfbed1faae91623940bc53edcc681a09ed9
Reviewed-on: https://webrtc-review.googlesource.com/64000
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22572}
2018-03-22 21:09:54 +00:00
Jesús de Vicente Peña
7682c6e2cb Improves in the ERLE estimation for AEC3
The estimation on how well the linear filter in the AEC3 is performing
is done through an estimation of the ERLE. That estimation is then
used for knowing how much the suppressor needs to react in order to
cancel all the echoes.

In the current code, the ERLE is quite conservative during farend
inactivity and it is common that it goes to a minimum value during
those periods. Under highly varying conditions, that is probably the
right approach. However, in other scenarios where conditions does not
change that fast there is a loss in transparency that could be avoided
by means of a different ERLE estimation.

In the current CL, the ERLE estimation has been changed in the
following way:
- During farend activity the ERLE is estimated through a 1st order AR
smoother. This smoother goes faster toward lower ERLE values than to
larger ones in order to avoid overestimation of this
value. Furthermore, during the beginning of the farend burst, an
estimation of the ERLE is done that aim to represent the performance
of the linear filter during onsets. Under highly variant environments,
those quantities, the ERLE during onsets and the one computed during
the whole farend duration, would differ a lot. If the environment is
more stationary, those quantities would be much more similar.
- During nearend activity the ERLE estimation is decreased toward a
value of the ERLE during onsets.

Bug: webrtc:9040
Change-Id: Ieab86370a4333d2d0cd7041047d29651de4f6827
Reviewed-on: https://webrtc-review.googlesource.com/62342
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22568}
2018-03-22 14:34:04 +00:00
Per Åhgren
f3e2bf1807 Further headset mode robustification based on linear filter convergence
This CL adds robustifications for avoiding that the headset mode
is triggered for reverberant or weak echo paths.

Bug: webrtc:9047,chromium:824111,webrtc:8314,webrtc:8671,webrtc:5201,webrtc:5919
Change-Id: Ib111e617f765377c021a5b633cf13a7917fe62a6
Reviewed-on: https://webrtc-review.googlesource.com/64002
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22557}
2018-03-22 09:51:14 +00:00
Per Åhgren
5c532d3774 Robustification of the echo suppression behavior during headset usage.
This CL robustifies the echo removal behavior when headsets are used.
In particular it:
-Introduces a secondary, more refined alignment when no alignment can
be found using the delay estimator.
-Changes decision logic for when to use the linear filter output.
-Changes the decision logic for when to be transparent.
-Changes the way that the transparent mode works.
-Makes the nonlinear mode less aggressive.
-Removes the detector for non-audible echoes.
-Makes the attenuation when there are signals with strong narrowband
characteristics more mild in scenarios with low render.

Furthermore the CL:
-Removes the input of external echo leakage information.


Bug: webrtc:9047,chromium:824111,webrtc:8314,webrtc:8671,webrtc:5201,webrtc:5919
Change-Id: Ied1fe0c0a35d3c31b47606ed2db319a73644d406
Reviewed-on: https://webrtc-review.googlesource.com/60866
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22548}
2018-03-22 00:23:23 +00:00
Per Åhgren
895ae9a0cd Improving the speed of the delay estimator in AEC3
This CL significantly improves the response time
of the AEC3 delay estimator to audio buffer issues.

The CL adds ensures that the delay estimator
correlators reacts to buffer issues from the
zero state which is much faster than if it has already
achieved a state matching a previous alignment.

The CL has been extensively tested on offline
recordings.

Bug: webrtc:9023, chromium:822245
Change-Id: Ic149b9429e592d4c3535eb8432582f435a1b4745
Reviewed-on: https://webrtc-review.googlesource.com/62081
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22461}
2018-03-15 16:38:07 +00:00
Per Åhgren
5f1a31c565 Adding a smooth transition from the startup phase parameter set in AEC3
This CL ensures a smooth transition from the parameters used during
the startup phase in the call to the parameters used in the rest of the
call. This is achieved by slowly transitioning between the parameter
sets via interpolation.

Bug: chromium:819240,webrtc:8983
Change-Id: Ifbac4b93fc6ad6efc441f41fb88ef09e8ee3d669
Reviewed-on: https://webrtc-review.googlesource.com/60360
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22451}
2018-03-15 13:38:16 +00:00
Per Åhgren
a11005ae3f Added debug dumping of the time domain linear filter in AEC3
Bug: webrtc:8671
Change-Id: I7bfcd99e8b718d6e53ead90c8d63e5ebbc93c84c
Reviewed-on: https://webrtc-review.googlesource.com/61863
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22437}
2018-03-15 09:30:26 +00:00
Per Åhgren
971de07713 Corrected the detection of narrowband render signals
This CL corrects the bug that only looked at narrowband
render signals above 900 Hz and only assumed that the
influence of such lasted for 6 blocks, which resulted
in filter divergence and echo leakage.


Bug: webrtc:9008,chromium:821670
Change-Id: I9b2635d24b260e9d9a8c5c088ab663e03fb93c42
Reviewed-on: https://webrtc-review.googlesource.com/61800
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22434}
2018-03-15 08:50:56 +00:00
Karl Wiberg
12edf4ce34 Separate build target for rtc_base/numerics/safe_minmax.h
So that we can avoid dependency cycles.

Bug: none
Change-Id: I821d9f1319dff01403d6e4e310cbb2d4b2b125e8
Reviewed-on: https://webrtc-review.googlesource.com/60500
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22328}
2018-03-07 14:12:00 +00:00
Per Åhgren
12eb85881c Separating the AEC3 suppressor gain rampup behavior for call startup and in-call resets
This CL introduces a different rampup behavir for the call startup and after resets
that may occur due to delay changes, clock-drift and audio path glitches.

Bug: chromium:819111, webrtc:8979
Change-Id: Ied1d7896be7f0c69aa6deb61475117021ca6ab09
Reviewed-on: https://webrtc-review.googlesource.com/60002
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22312}
2018-03-06 15:48:41 +00:00
Christian Schuldt
f4e99dba41 Update AEC3 echo tail estimation.
Note: estimation is turned OFF if config_.ep_strength.default_len
is set >= 0 (in this case config_.ep_strength.default_len defines a
constant echo decay factor), and hence turned ON if < 0. In case the
echo tail estimation is turned ON, -config_.ep_strength.default_len is
the starting point for the estimator.

The estimation is done in two passes; first we go through all "sections"
(corresponding to chunks of length kFftLengthBy2) of the filter impulse
response to determine which sections correspond to a "stable" decay",
and then the second pass we go through each stable decay section and
estimate the decay. The actual decay estimation is based on linear
regression of the log magnitude of the squared impulse response.
A bunch of sanity checks are also performed continuously to avoid
estimation error during e.g., filter adaptation.

Bug: webrtc:8924
Change-Id: I686ce3f3e8b6b472348f8d6e01fb44c31e25145d
Reviewed-on: https://webrtc-review.googlesource.com/48440
Commit-Queue: Christian Schuldt <cschuldt@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22247}
2018-03-01 11:21:12 +00:00
Per Åhgren
8447e91429 Add a hysteresis for the API call skew detection to better handle jittery platforms
Bug: webrtc:8954,chromium:817313
Change-Id: I940d52ac96e5bddf886d47be089a1991ae24b51b
Reviewed-on: https://webrtc-review.googlesource.com/58640
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22228}
2018-02-28 14:02:43 +00:00
Gustaf Ullberg
0efa941d2f Move EchoCanceller3Factory to api/auido
The AEC3 factory is now part of the WebRTC API.

Bug: webrtc:8844
Change-Id: If6f419b4ca0354e2d346c0e6474086e456ba747e
Reviewed-on: https://webrtc-review.googlesource.com/57141
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22204}
2018-02-27 14:09:59 +00:00
Per Åhgren
d8243fa6b3 Adding reporting and logging for events of call API skew shifts
Bug: webrtc:8887
Change-Id: I8a73afcd85815f4167ab47bd625f264747c06f8e
Reviewed-on: https://webrtc-review.googlesource.com/53066
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22193}
2018-02-26 23:57:23 +00:00
Gustaf Ullberg
f35c6667d6 Separate build targets for aec3 and aec3_unittests
Bug: webrtc:8844
Change-Id: Id6a98eae19aaedc87c3f402a004f58f0290d5c28
Reviewed-on: https://webrtc-review.googlesource.com/56580
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22173}
2018-02-23 13:16:16 +00:00
Per Åhgren
39f491eb4e Moved and simplifed the AEC3 API call skew estimator and added tests
This CL moves the AEC3 API call skew estimator into a separate file.
This has the advantage that it can more easily be tested.
The CL also simplifies the code and adds unittests.

Bug: webrtc:8671
Change-Id: I19bc31ca5666cdc87a1ed14770ef20ead1b5b80d
Reviewed-on: https://webrtc-review.googlesource.com/55860
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22144}
2018-02-22 00:52:10 +00:00
Per Åhgren
3ab308f869 Inform the AEC3 echo remover about the status of the estimated delay
This CL adds functionality for passing the information about the
estimated delay to the echo remover in AEC3.
The CL also adds information about how long ago the delay changed,
and how long ago the delay estimate was updated.

Bug: webrtc:8671
Change-Id: If274ffe0465eb550f3e186d0599c6dc6fef7f5e8
Reviewed-on: https://webrtc-review.googlesource.com/55261
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22137}
2018-02-21 17:08:36 +00:00
Per Åhgren
bbfccfd9e0 Added unittest to the AEC3 BlockProcessor class that tests longer calls
Bug: webrtc:8671
Change-Id: I64c416af5b0269e7bbe59702199b30b6b20b6807
Reviewed-on: https://webrtc-review.googlesource.com/55861
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22136}
2018-02-21 17:07:27 +00:00
Per Åhgren
b6b00dc180 Safe behavior of the initial echo removal in AEC3
This CL adds functionality to allow removal of any echo occurring
before the render and capture signals have been properly aligned.
The functionality is added in such a manner that the transparency
to nearend is maintained as much as possible.


Bug: webrtc:8883
Change-Id: I813cbbc4c48822e7dffcd9ab6233be4c222089de
Reviewed-on: https://webrtc-review.googlesource.com/49941
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22107}
2018-02-20 22:01:36 +00:00
Jonas Olsson
645b027dc4 Streamline error handling and logging in the audio processing module
Bug: webrtc:8529
Change-Id: I40817d578c2c4106892e564df1bc734efcef5503
Reviewed-on: https://webrtc-review.googlesource.com/52540
Commit-Queue: Jonas Olsson <jonasolsson@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22034}
2018-02-15 15:06:26 +00:00
Gustaf Ullberg
fd4ce50423 Move echo_control.h to api/audio
Bug: webrtc:8844
Change-Id: I5c2406c43ade786c26e12b3c847fed8424283df0
Reviewed-on: https://webrtc-review.googlesource.com/53700
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22031}
2018-02-15 10:43:04 +00:00
Gustaf Ullberg
3646f973c2 AEC3 includes echo_canceller3_config.h directly
Avoid including audio_processing.h from within AEC3.

Bug: webrtc:8844
Change-Id: I02c475c2fb84e2c24eac86baac3c7edaa08bebc0
Reviewed-on: https://webrtc-review.googlesource.com/53065
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22029}
2018-02-15 08:30:14 +00:00
Per Åhgren
fdd4400ef4 Removed hysteresis in the delay estimation offset
Bug: chromium:811658,webrtc:8879
Change-Id: I9e67fd9aaae4b85e344b9b40ca6bcf9a8fe1eec1
Reviewed-on: https://webrtc-review.googlesource.com/52480
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22002}
2018-02-13 14:29:23 +00:00
Per Åhgren
4712776bf4 Leveraging the skew in API call order to a boost AEC3 signal realignment
This CL resets the AEC3 realignment functionality when a significant
and persistent skew in the number of render and capture API calls is
detected.

Bug: chromium:811658,webrtc:8879
Change-Id: Ib5c727b38f427da2a7d25eac7c939a17bdaabe74
Reviewed-on: https://webrtc-review.googlesource.com/52260
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21997}
2018-02-13 12:52:58 +00:00
Per Åhgren
4b9124e432 Deactivated the computation of the reverb in AEC3
TBR: gustaf@webrtc.org
BUG: chromium:810951,webrtc:8872
Change-Id: I79194f964754d0f156a5206dbeb49606617e8bb5
Reviewed-on: https://webrtc-review.googlesource.com/50502
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21978}
2018-02-10 00:35:11 +00:00
Per Åhgren
29f14322d1 Improved robustness and recovery speed in AEC3 during echo path changes
This CL adds robustness in terms of echo removal and faster recovery
in order to regain echo canceller transparency after echo path changes.

The CL does:
-Improve the adaptation rate of the linear filter.
-Increase the look-window used before the linear filter has adapted.
-Decrease the effects of missed detection of residual echo.
-Increase the safety margin before allowing the suppressor gain to
increase.

Bug: chromium:804873,webrtc:8788
Change-Id: I28eedc4c8d0a4f0bc7b79c02d6d59bf00fddd566
Reviewed-on: https://webrtc-review.googlesource.com/48721
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21917}
2018-02-06 15:07:54 +00:00
Per Åhgren
a76ef9d0b4 Robustify the faster alignment in AEC3 to avoid resets
The faster AEC3 alignment introduced recently may in
cases cause the alignment (and the AEC3) to repeatedly
reset. This CL avoids these resets by handling buffer
issues (which are triggering the resets) separately
during the initial coarse alignment phase.



Change-Id: Idf5e2ffda2591906da8060d03ec8ca73cdaedf53
Bug: webrtc:8798,chromium:805815
Reviewed-on: https://webrtc-review.googlesource.com/43480
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21758}
2018-01-25 09:57:31 +00:00
Per Åhgren
0eef9c0c61 Increasing the speed of the initial alignment in AEC3
This CL increases the speech of the initial alignment in AEC3 by
loosening the requirements on the accuracy of the initial estimates.

Bug: webrtc:8784, chromium:804270
Change-Id: I86e2d97830843524090a1cf877965739f66dc058
Reviewed-on: https://webrtc-review.googlesource.com/40660
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21728}
2018-01-22 20:50:39 +00:00
Per Åhgren
700ef33edc Corrected the handling of saturation in the AEC3 alignment
Bug: webrtc:8782, chromium:804263
Change-Id: I58660364f66959cc5bea3b081a626e743acedb1b
Reviewed-on: https://webrtc-review.googlesource.com/42581
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21725}
2018-01-22 16:37:43 +00:00
Per Åhgren
395791fea7 Length-correction of the look window used during nonlinear echo removal
Bug: webrtc:8783,chromium:804267
Change-Id: Ib05a28112fe53c2d510ae1bafd05e535fdf35214
Reviewed-on: https://webrtc-review.googlesource.com/42582
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21724}
2018-01-22 16:36:38 +00:00
Gustaf Ullberg
7d0427865c RenderWriter checks number of bands before inserting AudioBuffer.
Temporary work-around for bug webrtc:8759.

Bug: webrtc:8759
Change-Id: Ia830c7e19d7bb332d760f52d62757a443761dc3e
Reviewed-on: https://webrtc-review.googlesource.com/39920
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21639}
2018-01-16 13:35:24 +00:00
Per Åhgren
d980c57c80 Adding more conservative AEC3 suppressor behavior initially in calls
Bug: webrtc:8746
Change-Id: I47def88f8d6092fcb6b1a4bd14478e8d5ccd5320
Reviewed-on: https://webrtc-review.googlesource.com/39840
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21631}
2018-01-16 09:32:52 +00:00
Per Åhgren
3f1c062c6e Ensure that the adaptive filter is properly adapted in AEC3
Bug: webrtc:8746
Change-Id: I087a7c629be51df6751aa44f6f7d22a6b2d46d0b
Reviewed-on: https://webrtc-review.googlesource.com/39510
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21622}
2018-01-15 21:54:21 +00:00
Per Åhgren
b5adc9e4cb Use the best of the shadow and main filter characteristics in AEC3
Bug: webrtc:8746
Change-Id: If40a3ac936dcc4f55ce0943c5228a9891160e752
Reviewed-on: https://webrtc-review.googlesource.com/39509
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21621}
2018-01-15 21:45:21 +00:00
Per Åhgren
9845a67bc5 Corrected the handling of saturated echoes inside AEC3
Bug: webrtc:8747
Change-Id: I644e00c5cc73c8c7b5893725fa15fc018de3cc91
Reviewed-on: https://webrtc-review.googlesource.com/39508
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21620}
2018-01-15 21:22:31 +00:00
Per Åhgren
a98c8074ba Added faster initial model adaptation speed in AEC3
Bug: webrtc:8746
Change-Id: Idcb65e2b1241a7da8c4a98622923e401d174b879
Reviewed-on: https://webrtc-review.googlesource.com/39506
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21619}
2018-01-15 19:29:11 +00:00
Per Åhgren
afd1d6c709 Simplified the gain methods for the shadow and main filters in AEC3
Bug: webrtc:8671
Change-Id: I21ef41e7e0f3714bfcdacbebae9c713dc2431f55
Reviewed-on: https://webrtc-review.googlesource.com/39504
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21618}
2018-01-15 18:05:21 +00:00
Per Åhgren
08ea5898ff Separated the AEC3 adaptive filter parameters into sub-structs
Bug: webrtc:8671
Change-Id: I02bceceb85da6db65f65c1a2366a2d5021f148ef
Reviewed-on: https://webrtc-review.googlesource.com/39502
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21617}
2018-01-15 16:48:49 +00:00
Per Åhgren
d84b3d1f3d Generalized the hysteresis behavior in the AEC3 delay estimator
This CL generalizes the hysteresis behavior on the AEC3 delay estimator
to be two-sided and easier to configure.


Bug: webrtc:8671
Change-Id: Ife21c1511416e32eb3618c81178deefe332ac1e8
Reviewed-on: https://webrtc-review.googlesource.com/39267
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21604}
2018-01-12 15:28:54 +00:00
Per Åhgren
d20639f1f6 Correct the FFT windowing when computing the AEC NLP gain
This CL adds an nonwindowed spectrum of the linear filter error
to use in the NLP computation.

Bug: webrtc:8661
Change-Id: I45bc9bb3eb8eeac0c5d6adb414638eb12b635a27
Reviewed-on: https://webrtc-review.googlesource.com/38701
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21583}
2018-01-11 14:41:11 +00:00
Per Åhgren
0e6d2f5118 Use the filter delay to use the proper render block in the AEC3 AecState
This CL corrects the way that the estimated filter delay is used in
AEC3. In particular
-It uses the filter delay to choose the correct render block in AecState
-It changes the code to reflect that the filter delay is always computed
-It removes part of the code that formerly relied on the filter delay
being an Optional.

Bug: webrtc:8671
Change-Id: I58135a5c174b404707e19a41c3617c09831e871d
Reviewed-on: https://webrtc-review.googlesource.com/35221
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21557}
2018-01-10 15:53:02 +00:00
Per Åhgren
b4c188de3b Added logging of the maximum observed API call jitter in AEC3
Bug: webrtc:8672
Change-Id: Ib64cca5ff5b809c4931db266a9e5a75d378504af
Reviewed-on: https://webrtc-review.googlesource.com/35021
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21550}
2018-01-10 13:33:06 +00:00
Per Åhgren
de22a17b43 Removed usage of the the redundant the render alignment headroom in AEC3
Bug: webrtc:8671
Change-Id: I1b7b1bc2f4677bbd375fc206c166b4b9fed3efce
Reviewed-on: https://webrtc-review.googlesource.com/35220
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21392}
2017-12-20 17:27:26 +00:00
Per Åhgren
60e8965b6b Removed the redundant functionality for the initial state in AEC3
Bug: webrtc:8671
Change-Id: I93412675a6b56c20c8d866e64e24560a4546dc66
Reviewed-on: https://webrtc-review.googlesource.com/35200
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21391}
2017-12-20 16:54:48 +00:00
Per Åhgren
4b3bc0f1d3 Cleanup and simplification of the logic in the AEC3 state management
Bug: webrtc:8671
Change-Id: Ie34cee85b43b67da12b5c34e97eeacfd6d8baf7d
Reviewed-on: https://webrtc-review.googlesource.com/35120
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21388}
2017-12-20 16:00:46 +00:00
Per Åhgren
ec22e3f503 Simplified the usage of the render buffer in AEC3
Bug: webrtc:8671
Change-Id: I4af397e9f208685e4ffec2a5f92501e0d2605c42
Reviewed-on: https://webrtc-review.googlesource.com/35060
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21386}
2017-12-20 14:46:36 +00:00
Per Åhgren
d6c54cdc8e Changed linear filter error window in AEC3 to Hanning
Changing window type which improves the filter accuracy
at the cost of a slight reduction in convergence time.

Bug: webrtc:8661
Change-Id: Id0e5c66ec179f94471cbca0a2b8d1b94d8146ca6
Reviewed-on: https://webrtc-review.googlesource.com/34501
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21347}
2017-12-19 09:19:50 +00:00
Per Åhgren
7634c16a02 Added windowing of the error signal in echo canceller 3
This CL adds windowing of the error signal in echo canceller 3 to
avoid issues with spectral leakage affecting the quality of
the filter estimate.

Bug: webrtc:8661
Change-Id: I3e583f80fe02d7bba387a906bf44fbe7b89a2a6f
Reviewed-on: https://webrtc-review.googlesource.com/34188
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21328}
2017-12-18 16:25:03 +00:00
Per Åhgren
019008bd93 Updated the behavior for the filter adaptation in echo canceller 3
This CL adjusts the filter adaptation behavior to better handle
reverberant environments and environments with poor SNR.

It furthermore updates the unittests to handle the reduced adaptation
speed.

Bug: webrtc:8661
Change-Id: I5f1b5a4a34b333bd6c643ed3727899d0838dbf90
Reviewed-on: https://webrtc-review.googlesource.com/34184
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21323}
2017-12-18 12:39:48 +00:00
Per Åhgren
b6f9e6c979 Added further ability to adjust the filter adaptation in AEC3
Bug: webrtc:8609
Change-Id: I079935bd782afc89146d98fd2248a1c6389871c9
Reviewed-on: https://webrtc-review.googlesource.com/32420
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21268}
2017-12-14 08:28:31 +00:00
Per Åhgren
2e27d1cf5e Corrected incorrect overrun event assignment in AEC3
Bug: webrtc:8637,chromium:794099
Change-Id: I46b4a7268fc03e5b3fbc93a334e07c507f78304f
Reviewed-on: https://webrtc-review.googlesource.com/32200
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21219}
2017-12-12 09:14:17 +00:00
Per Åhgren
477f289779 Added the ability to adjust the filter adaptation speed in AEC3
Bug: webrtc:8609
Change-Id: I90eac3948ad0b7b1b5df2585ace3783e950c05d5
Reviewed-on: https://webrtc-review.googlesource.com/31485
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21217}
2017-12-11 22:58:46 +00:00
Per Åhgren
09a718accd Added the ability to more easily adjust the filter length in AEC3
Bug: webrtc:8609
Change-Id: If060b332993c2c98d7a12608ab31f4da858b8016
Reviewed-on: https://webrtc-review.googlesource.com/28620
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21216}
2017-12-11 22:02:46 +00:00
Per Åhgren
c59a576c86 Corrections of the render buffering scheme in AEC3 to ensure causality
This CL modifies the refactored render buffering scheme in AEC3
so that:
-A non-causal state can never occur which means that situations with
 nonrecoverable echo should not occur.
-For a stable audio pipeline with a predefined API call jitter,
 render overruns and underruns can never occur.

Bug: webrtc:8629,chromium:793305
Change-Id: I06ba1c368f92db95274090b08475dd02dbb85145
Reviewed-on: https://webrtc-review.googlesource.com/29861
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21215}
2017-12-11 21:09:56 +00:00
Per Åhgren
63b494dff7 Reverted the new handling of saturated echoes in AEC3
This CL reverts the changes introduced that handles echoes in AEC3.
The revert is done to match the behavior which is in M63.

Bug: webrtc:8615,chromium:792346
Change-Id: I128ccb17dc359c7889a701a2faaaf06be40f86dd
Reviewed-on: https://webrtc-review.googlesource.com/30140
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21117}
2017-12-06 11:04:22 +00:00
Per Åhgren
8ba5861f7e Redesign of the render buffering in AEC3
This CL centralizes the render buffering in AEC3 so that all render
buffers are updated and synchronized/aligned with the render alignment
buffer.

Bug: webrtc:8597, chromium:790905
Change-Id: I8a94e5c1f27316b6100b420eec9652ea31c1a91d
Reviewed-on: https://webrtc-review.googlesource.com/25680
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20989}
2017-12-01 23:14:32 +00:00
Gustaf Ullberg
2723fb162c Added ERL and ERLE metrics to UMA.
Bug: webrtc:8569
Change-Id: Ie820ebbe6ea1d8742c32a7aba540cfebd8757818
Reviewed-on: https://webrtc-review.googlesource.com/25560
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20924}
2017-11-29 09:06:59 +00:00
Per Åhgren
83c4a02b76 Added metric for the delay in AEC3.
Bug: webrtc:8569
Change-Id: I659049a411654bd3a252ab29008fac467f903efd
Reviewed-on: https://webrtc-review.googlesource.com/25600
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20892}
2017-11-27 12:52:42 +00:00
Gustaf Ullberg
332150d7df APM reports ERL and ERLE metrics for AEC3.
The audio processing module reports the metrics 'echo return loss'
and 'echo return loss enhancement' for AEC3.

Bug: webrtc:8533
Change-Id: I166c504adf013d6cb5d6d3c9717d0622c3454bb7
Reviewed-on: https://webrtc-review.googlesource.com/24880
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20835}
2017-11-22 15:01:47 +00:00
Karl Wiberg
e40468ba3d Move some numeric utility code from rtc_base/ to rtc_base/numerics/
Specifically, I'm moving

  safe_compare.h
  safe_conversions.h
  safe_minmax.h

They shouldn't be part of the API, and moving them to an appropriate
subdirectory of rtc_base/ is a good way to keep track of that.

BUG=webrtc:8445

Change-Id: I458531aeb30bcf4291c4bec3bf22a2fffbf054ff
Reviewed-on: https://webrtc-review.googlesource.com/20860
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20829}
2017-11-22 11:21:47 +00:00
Oskar Sundbom
aa8b67da9d Optional: Use nullopt and implicit construction in /modules/audio_processing
Changes places where we explicitly construct an Optional to instead use
nullopt or the requisite value type only.

This CL was uploaded by git cl split.

R=henrik.lundin@webrtc.org

Bug: None
Change-Id: I733a83f702fe11884d229a1713cfac952727bde8
Reviewed-on: https://webrtc-review.googlesource.com/23601
Commit-Queue: Oskar Sundbom <ossu@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20786}
2017-11-20 10:19:30 +00:00
Per Åhgren
38e2d95bda AEC3 delay estimator refactoring and introducing ability to customize
This CL refactors the delay estimator in AEC3.
Furthermore, it adds:
1. Allow for a customized delay estimator behavior to simplify
development.
2. Exposes that behavior to clear configuration settings.
3. Adds logging of the delay range supported by the delay
estimator.

Bug: webrtc:8519
Change-Id: I1764a090519a78b021b2e7de565c52a6c02c848e
Reviewed-on: https://webrtc-review.googlesource.com/21166
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20733}
2017-11-17 17:51:37 +00:00
Gustaf Ullberg
fe4d673393 Compute ERL over all frequency bins in AEC3.
Bug: webrtc:8533
Change-Id: I7160361b3468bb24cef9e6d390f10b23b988edd3
Reviewed-on: https://webrtc-review.googlesource.com/23242
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20713}
2017-11-16 14:40:33 +00:00
Gustaf Ullberg
c9b89aaa16 Compute ERLE over all frequency bins in AEC3.
Bug: webrtc:8533
Change-Id: I0a373f22ec377b226d3bc7d88d3245a99e18c7a0
Reviewed-on: https://webrtc-review.googlesource.com/23621
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20709}
2017-11-16 12:37:03 +00:00
Mirko Bonadei
675513b96a Stop using LOG macros in favor of RTC_ prefixed macros.
This CL has been generated with the following script:

for m in PLOG \
  LOG_TAG \
  LOG_GLEM \
  LOG_GLE_EX \
  LOG_GLE \
  LAST_SYSTEM_ERROR \
  LOG_ERRNO_EX \
  LOG_ERRNO \
  LOG_ERR_EX \
  LOG_ERR \
  LOG_V \
  LOG_F \
  LOG_T_F \
  LOG_E \
  LOG_T \
  LOG_CHECK_LEVEL_V \
  LOG_CHECK_LEVEL \
  LOG
do
  git grep -l $m | xargs sed -i "s,\b$m\b,RTC_$m,g"
done
git checkout rtc_base/logging.h
git cl format

Bug: webrtc:8452
Change-Id: I1a53ef3e0a5ef6e244e62b2e012b864914784600
Reviewed-on: https://webrtc-review.googlesource.com/21325
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20617}
2017-11-09 11:56:32 +00:00
Per Åhgren
74e72c8c9b Lowering the threshold for delay change detection in AEC3
This CL lowers the threshold for delay change detection in AEC3.
This makes the delay decisions more stable.

TBR=gustaf@webrtc.org

Bug: chromium:778396,webrtc:8451
Change-Id: I8b015455399d696172b7c0beb033caf508f426e9
Reviewed-on: https://webrtc-review.googlesource.com/15541
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20433}
2017-10-25 21:56:30 +00:00
Gustaf Ullberg
84634b8634 Temporarily disabled failing death test.
Some death tests for AEC3 cause memory leaks on trybots. This CL
temporarily disables BlockProcessor.VerifyRenderBlockSizeCheck.

Bug: webrtc:8449,webrtc:6985
Change-Id: I2900a73f7c7d5bf0e8b58a20f9a40bd5d654629a
Reviewed-on: https://webrtc-review.googlesource.com/15500
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20431}
2017-10-25 15:24:46 +00:00
Per Åhgren
7ddd46386a Balancing the transparency in AEC3 between saturating and low echo paths
This CL balances the NLP tradeoff in AEC3 to properly handle the cases
when the echo path is so strong that it saturates the echo and when it
is so weak that the echo is very low compared to nearend.

Bug: webrtc:8411, webrtc:8412, chromium:775653
Change-Id: I5aff74dfadd51cac1ce71b1cb935d68a5be6918d
Reviewed-on: https://webrtc-review.googlesource.com/14120
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20418}
2017-10-25 01:36:59 +00:00
Gustaf Ullberg
bd83b914c3 Separate AEC3 config from AudioProcessing::Config.
The struct containing the config for AEC3 is removed from
AudioProcessing::Config and is put in a new struct called
EchoCanceller3Config.

AEC3 should no longer be activated through
AudioProcessing::ApplyConfig. Instead an EchoCanceller3Factory
can be injected at AudioProcessing creation.

Bug: webrtc:8346
Change-Id: I27e3592e675eec3632a60c45d9e0d12514c2c567
Reviewed-on: https://webrtc-review.googlesource.com/11420
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20342}
2017-10-19 08:19:52 +00:00
Raphael Kubo da Costa
0743814fb8 aec3: Use fabsf() instead of std::abs() for floats.
We are using <math.h>, not <cmath>. While the latter defines additional
overloads for abs(), including abs(float), they are not guaranteed to be
available in <math.h>.

libc++ ships its own math.h with the additional overloads, and libstdc++ (v6
or later) has a math.h that includes <cmath>, but this is not always
expected to work: for example, GCC 5.x's libstdc++ does not have these
additional overloads and causes the build to fail.

Just use fabsf() from the C standard library directly, as it achieves the
same thing in a more portable fashion.

Bug: None
Change-Id: I805728269b35051edb54126e204eccd2706e3a92
Reviewed-on: https://webrtc-review.googlesource.com/11460
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Raphael Kubo da Costa (rakuco) <raphael.kubo.da.costa@intel.com>
Cr-Commit-Position: refs/heads/master@{#20325}
2017-10-17 14:03:01 +00:00
Per Åhgren
40659c3eaf Corrected and robustified the detection of the delay in the AEC3 filter
This CL changes the filter delay detection to rely on the largest peak
while the correctness of the filter is changed to be based on the
performance achieved by the filter.

Bug: webrtc:8397,chromium:774867
Change-Id: I70c953815192478f9a8e0da9f2b8fd9edac3f481
Reviewed-on: https://webrtc-review.googlesource.com/10803
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20321}
2017-10-17 11:30:50 +00:00
Per Åhgren
1b4059e84f Transparency improvements for AEC3 during call start and after resets
This CL changes the AEC3 behavior to be more transparent when there 
is uncertainty about the amount of echo in the microphone signal.

Bug: webrtc:8398, chromium:774868
Change-Id: I88e681f8decd892f44397b753df371a1c4b90af0
Reviewed-on: https://webrtc-review.googlesource.com/10801
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20319}
2017-10-17 06:00:50 +00:00
Gustaf Ullberg
8eb9c7d838 Added EchoCanceller3Factory.
Added EchoCanceller3Factory that implements EchoControlFactory and can
be used for injecting EchoCanceller3 into Audio Processing Module.

Renamed InitializeEchoCanceller3 to InitializeEchoController.

Bug: webrtc:8346
Change-Id: I47078da6a49aca1ee41f6a9d5b7b8e91bb5c11a3
Reviewed-on: https://webrtc-review.googlesource.com/9220
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20299}
2017-10-14 07:38:32 +00:00
Per Åhgren
d3d7f44ddf Cleanup in the code for the lag estimation in AEC3
Bug: webrtc:8379
Change-Id: Ic80ce86fc0f4ba42583bd43cb137c6e1c9e6513c
Reviewed-on: https://webrtc-review.googlesource.com/8560
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20252}
2017-10-11 15:11:22 +00:00
Per Åhgren
6229d92a52 Removed redundant max operation and corrected comment
Bug: webrtc:8379
Change-Id: I20d0d469a8cc465ca45c18bfde8bbc945cb00e74
Reviewed-on: https://webrtc-review.googlesource.com/8303
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20242}
2017-10-11 11:33:49 +00:00
Per Åhgren
f9e58227d2 Changed the aggregation of AEC3 matched filter delay estimates
This CL changes the aggregation of the matched filter delay
estimates in AEC3 to using a histogram approach.

Bug: chromium:773541,webrtc:8379
Change-Id: I5322c65858188599397ef5716fecdebc34852e6a
Reviewed-on: https://webrtc-review.googlesource.com/8261
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20234}
2017-10-11 07:52:19 +00:00
Per Åhgren
1f33a37565 AEC3 tunings to increase the transparency
This CL changes the tuning of AEC3 to increase the transparency.
In particular:
-The present parameters are re-tuned.
-An oversuppression factor is added in the newly added soft-knee in
 the NLP gain. The purpose of this is to avoid fluctuations in the
 residual echo.
-The dynamics of the computed gain are bounded to ensure that the 
 specified gain characteristics are realizable without echo leakage.
 This also adds robustness against echo leakage in frequency regions
 that are poorly estimated.
 This change was needed to avoid echo leakage from the above 
 tunings.

Bug: chromium:773543,webrtc:8378
Change-Id: If8acc41c1423a6a2fa6f8c4daf2735c86f0b529a
Reviewed-on: https://webrtc-review.googlesource.com/8262
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20231}
2017-10-11 07:28:09 +00:00
Per Åhgren
d309b0081d Smoothed the application of the NLP gain in AEC3
This CL adds a smooth rampup of the NLP gain in AEC3.

Bug: webrtc:8361
Change-Id: I49aa75904751ffe9150db1572271fe7a26232449
Reviewed-on: https://webrtc-review.googlesource.com/7740
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20213}
2017-10-09 22:45:29 +00:00
Per Åhgren
c65ce78027 Separated the NLP behavior in AEC3 for different echo estimates.
This CL separates the NLP gain computation for the different variants
of echo estimation. This simplifies the setting of tuning 
parameters, with resulting transparency improvements and increased
echo removal performance.

Bug: webrtc:8359
Change-Id: I9b97064396fb6f6e2f418ce534573f68694390a1
Reviewed-on: https://webrtc-review.googlesource.com/7613
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20209}
2017-10-09 13:16:37 +00:00
Per Åhgren
0f46441772 Added the ability to set the default echo path delay in AEC3.
This CL adds the ability to set a default echo path delay to use
in AEC3 when there is prior knowledge about the delay in the echo
path.


Bug: webrtc:8358
Change-Id: Ie368f9a6dec9f412e09bf0e095f89d84305045f9
Reviewed-on: https://webrtc-review.googlesource.com/7604
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20204}
2017-10-09 10:52:07 +00:00
Per Åhgren
7106d93dea General AEC3 transparency improvements
This CL adds some general AEC3 transparency improvements.

Specifically:
-A minimum for how the nearend is masking echo is added.
-A temporal smoothing constant is increased to increase the transparency.
-Parameters are surfaced to the parameter config struct.

Bug: webrtc:8360
Change-Id: I2a4881eb40f4fab53ad740c4001925f0af86bbec
Reviewed-on: https://webrtc-review.googlesource.com/7605
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20200}
2017-10-09 10:02:37 +00:00
Gustaf Ullberg
c522298e03 Added first version of the EchoControl interface, used for AEC abstraction.
Bug: webrtc:8346
Change-Id: I792a5f8eefb98388de199fea12c017759fdc6c1e
Reviewed-on: https://webrtc-review.googlesource.com/6780
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20174}
2017-10-06 07:24:43 +00:00
Per Åhgren
c007857ab9 AEC3 tunings to increase transparency
This CL fine-tunes the internal AEC3 parameters to increase the 
transparency of the nearend signal.

Bug: webrtc:8322
Change-Id: I2e35165082d88b8f2b1e8367d8ed0e29bd67b4e5
Reviewed-on: https://webrtc-review.googlesource.com/5365
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20082}
2017-10-02 14:47:25 +00:00
Per Åhgren
85a11a35f1 Bounding the AEC3 suppression gain for poorly estimated residual echoes
This CL bounds the supppression gain for higher frequencies where
the estimate of the residual echo sometimes is less accurate.

Bug: webrtc:8320
Change-Id: I02b21e6b1758c7e8b6660c1631a05c956a45e4c8
Reviewed-on: https://webrtc-review.googlesource.com/5260
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20081}
2017-10-02 14:46:19 +00:00
Per Åhgren
fe9f222c66 Reland of Added logging inside AEC3 for render API buffer
Bug: webrtc:8250
Change-Id: Icd94331237bf5cd0e5aba2644522456184a9eef0
Reviewed-on: https://webrtc-review.googlesource.com/3860
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19986}
2017-09-27 07:29:25 +00:00
Per Åhgren
b3547fa5de Revert "Added logging inside AEC3 for render API buffer under/overruns"
This reverts commit 262d4ff882.

Reason for revert: The logging in this CL is spamming the logs. Therefore I'll revert and reland this once that has been fixed.


Original change's description:
> Added logging inside AEC3 for render API buffer under/overruns
> 
> Bug: webrtc:8250
> Change-Id: Ib9ce26419b8961a33869d2f24cc4248fe10039b8
> Reviewed-on: https://webrtc-review.googlesource.com/1562
> Commit-Queue: Per Åhgren <peah@webrtc.org>
> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#19856}

TBR=gustaf@webrtc.org,peah@webrtc.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: webrtc:8250
Change-Id: Icbbb219772ca2e3644b9fcb7fa99545b147fd675
Reviewed-on: https://webrtc-review.googlesource.com/2720
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Noah Richards <noahric@chromium.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19932}
2017-09-23 23:10:02 +00:00
Per Åhgren
930021d465 Eliminating the risk of sustained echo during capture data loss in AEC3.
This CL adds an offset to the delay estimation used in AEC3 for 
determining the alignment between the render and capture signals.
This ensures that there is no possibility for the capture loss to 
cause the delay estimation to miss aligning the signals.

BUG=webrtc:8247, chromium:765242

Change-Id: I526dc7971b13425a28e99d69168fd3722a4cfdae
Reviewed-on: https://webrtc-review.googlesource.com/1232
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19871}
2017-09-15 21:24:46 +00:00
Mirko Bonadei
7120742701 Adding NOLINT for typedefs.h and common_types.h
Now that we have moved WebRTC from src/webrtc to src/, common_types.h
and typedefs.h are triggering a cpplint error.

The cpplint complaint is:
Include the directory when naming .h files  [build/include] [4]

This CL disables the error but we have to remove these two headers
from the root directory.

NOPRESUBMIT=true

Bug: webrtc:5876
Change-Id: I08e1b69aadcc4b28ab83bf25e3819d135d41d333
Reviewed-on: https://webrtc-review.googlesource.com/1577
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Henrik Kjellander <kjellander@google.com>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19859}
2017-09-15 13:03:51 +00:00
Per Åhgren
262d4ff882 Added logging inside AEC3 for render API buffer under/overruns
Bug: webrtc:8250
Change-Id: Ib9ce26419b8961a33869d2f24cc4248fe10039b8
Reviewed-on: https://webrtc-review.googlesource.com/1562
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19856}
2017-09-15 12:15:20 +00:00
Mirko Bonadei
92ea95e34a Fixing WebRTC after moving from src/webrtc to src/
In https://webrtc-review.googlesource.com/c/src/+/1560 we moved WebRTC
from src/webrtc to src/ (in order to preserve an healthy git history).
This CL takes care of fixing header guards, #include paths, etc...

NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
TBR=tommi@webrtc.org


Bug: chromium:611808
Change-Id: Iea91618212bee0af16aa3f05071eab8f93706578
Reviewed-on: https://webrtc-review.googlesource.com/1561
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Henrik Kjellander <kjellander@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19846}
2017-09-15 05:02:56 +00:00
Mirko Bonadei
bb547203bf Moving src/webrtc into src/.
In order to eliminate the WebRTC Subtree mirror in Chromium, 
WebRTC is moving the content of the src/webrtc directory up
to the src/ directory.

NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
TBR=tommi@webrtc.org

Bug: chromium:611808
Change-Id: Iac59c5b51b950f174119565bac87955a7994bc38
Reviewed-on: https://webrtc-review.googlesource.com/1560
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Henrik Kjellander <kjellander@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19845}
2017-09-15 04:25:06 +00:00