Commit graph

627 commits

Author SHA1 Message Date
Sam Zackrisson
1a03960e63 Remove APM internal usage of EchoCancellation
This CL:
 - Changes EchoCancellationImpl to inherit privately from
   EchoCancellation.
 - Removes usage of AudioProcessing::echo_cancellation() inside most of
   the audio processing module and unit tests.
 - Default-enables metrics collection in AEC2.

This CL breaks audioproc_f backwards compatibility: It can no longer
use all recorded settings (drift compensation, suppression level), but
prints an error message when such settings are encountered.

Some code in audio_processing_unittest.cc still uses the old interface.
I'll handle that in a separate change, as it is not as straightforward
to preserve coverage.

Bug: webrtc:9535
Change-Id: Ia4d4b8d117ccbe516e5345c15d37298418590686
Reviewed-on: https://webrtc-review.googlesource.com/97603
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24724}
2018-09-13 12:05:20 +00:00
Jonas Olsson
941a07cca3 Remove all remaining non-test uses of std::stringstream.
Bug: webrtc:8982
Change-Id: I635a8545c46dc8c89663d64af351e22e65cbcb33
Reviewed-on: https://webrtc-review.googlesource.com/98880
Commit-Queue: Jonas Olsson <jonasolsson@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24715}
2018-09-13 08:52:05 +00:00
Kári Tristan Helgason
640106e1ce Use different thresholds for ARM and x86 in libvpx tests
and audio processing tests.

Bug: webrtc:8757
Change-Id: Ic748fa624ac84af4556cb4b51718106a10fbb787
Reviewed-on: https://webrtc-review.googlesource.com/98540
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Commit-Queue: Kári Helgason <kthelgason@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24698}
2018-09-12 08:18:33 +00:00
Gustaf Ullberg
ddb82a6b5f AEC3: Fix filter output transition when input and output is the same array
This CL fixes a bug in the filter output transition when the 'from' input
points to the same array as the output. It also includes a slight
improvement to the transition by starting one sample earlier than
previously.

Bug: webrtc:9741,chromium:882789
Change-Id: Ifd5f16c1ac88a74d93499e7f4b4c0e5cb3e4976f
Reviewed-on: https://webrtc-review.googlesource.com/99540
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24683}
2018-09-11 11:59:12 +00:00
Gustaf Ullberg
51ccdbeb0c AEC3: Bugfix in filter output transition
Bug: webrtc:9741,chromium:882789
Change-Id: Id83f31dfa2cfaf06f41673ac997becf1e399eeea
Reviewed-on: https://webrtc-review.googlesource.com/99502
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24677}
2018-09-11 10:30:08 +00:00
Mirko Bonadei
64ef4f7c95 Fix no_global_constructors in audio_processing/agc2/rnn_vad.
This is a rework of [1] following kwiberg@'s advice.

[1] - https://webrtc-review.googlesource.com/c/src/+/98583

Bug: webrtc:9693
Change-Id: I8d4fac8d7593c28d4ad2a973637f965f2cd51e99
Reviewed-on: https://webrtc-review.googlesource.com/98881
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24667}
2018-09-11 06:23:56 +00:00
Alex Loiko
d934244feb Added flags for the adaptive analog AGC in audioproc_f.
Added back the 'agc2 level estimation' flag. Also added a flag for
moving the level measurement before AEC and NS. This is to run offline
experiments with audioproc_f.


Bug: webrtc:7494
Change-Id: I3e3ffceede7166b754130be2b707b620ba527e9f
Reviewed-on: https://webrtc-review.googlesource.com/97442
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24657}
2018-09-10 14:16:46 +00:00
Per Åhgren
b2d7116733 AEC3: Correction of the suppressor behavior at delay changes
This CL adjusts the behavior of the AEC3 echo suppressor behavior
initially in the call, and when there has been delay changes. The
results is that short echo blips/bursts present in some such cases
no longer occur.

In particular this CL:
-Ensures that the suppressor back-off under stationary render
conditions does not occur until the linear filter has had the
ability to converge.
-Ensures that a previously converged filter behavior detection
is not sticky for stable and linear echo paths, which in turn
prevents echo leakage due to the more liberal echo suppressor
behavior applied on such platforms.
-Removes a bug that caused a random and jittery behavior for
the usage of the linear filter output initially in the calls
and after echo path changes

Bug: webrtc:9737, chromium:882396
Change-Id: Id2b46e366dc58ab8137f19ed59a2034c89ca3087
Reviewed-on: https://webrtc-review.googlesource.com/99063
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24656}
2018-09-10 13:05:14 +00:00
Alex Loiko
623472219f Store RuntimeSetting in Aec Dumps.
Also read and apply settings when parsing and replaying dumps.

The implementation contains
* an extra field in debug.proto for the runtime settings
* code in AudioProcessingImpl to initiate the logging of the RS to the
  AecDump
* code in aec_dump/ to log the RS in the AecDump
* code in test/ for re-playing the RS. E.g. for APM simulation with
  audioproc_f.

Bug: webrtc:9138
Change-Id: Ia2a00537c2eb19484ff442fbffd0b95f8495516f
Reviewed-on: https://webrtc-review.googlesource.com/70502
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24647}
2018-09-10 11:40:28 +00:00
Mirko Bonadei
d7027dc081 Revert "Fix no_global_constructors in audio_processing/agc2/rnn_vad."
This reverts commit 5e2e66d8a0.

Reason for revert: Change implementation.

Original change's description:
> Fix no_global_constructors in audio_processing/agc2/rnn_vad.
> 
> Bug: webrtc:9693
> Change-Id: Ica997d5cbe28288720325a51058a40a37c612665
> Reviewed-on: https://webrtc-review.googlesource.com/98583
> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#24617}

TBR=mbonadei@webrtc.org,alessiob@webrtc.org,kwiberg@webrtc.org

Change-Id: I9e30f6ec08baa22a8d6c15546341000738c095b6
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9693
Reviewed-on: https://webrtc-review.googlesource.com/98842
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24631}
2018-09-07 13:34:39 +00:00
Mirko Bonadei
5e2e66d8a0 Fix no_global_constructors in audio_processing/agc2/rnn_vad.
Bug: webrtc:9693
Change-Id: Ica997d5cbe28288720325a51058a40a37c612665
Reviewed-on: https://webrtc-review.googlesource.com/98583
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24617}
2018-09-07 08:08:45 +00:00
Per Åhgren
6a4fd19bbd AEC3: Parametrize the delay estimator to leverage strong echo paths
This CL introduces a new behavior for leveraging early information
about the delay that is acquired before the standard delay estimate
has been established.

To simplify the process of setting the parameters for that, the CL
also surfaces the delay estimator parameters to the config struct.

Bug: webrtc:9720,chromium: 880686
Change-Id: If886813f70cd805bd37752c63913d28398f1c6fe
Reviewed-on: https://webrtc-review.googlesource.com/97860
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24614}
2018-09-06 23:01:58 +00:00
Jonas Olsson
366a50c4ef Remove simple stringstream usages.
This CL replaces std::o?stringstream with rtc::StringBuilder where that's possible to do without changing any of the surrounding code. It also updates includes and build files as appropriate.

The CL was generated by running 'git grep -l -P std::o?stringstream | xargs perl -pi -e "s/std::o?stringstream/rtc::StringBuilder/g"'. Then I've manually updated the #includes and BUILD files, run 'git cl format' and unstaged any file that would need more complex fixes.

Bug: webrtc:8982
Change-Id: Ibc32153f4a3fd177e260b6ad05ce393972549357
Reviewed-on: https://webrtc-review.googlesource.com/98460
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Jonas Olsson <jonasolsson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24605}
2018-09-06 12:53:19 +00:00
Mirko Bonadei
96ede16a4e Enable -Wexit-time-destructors and -Wglobal-constructors.
This CL enables -Wexit-time-destructors and -Wglobal-constructors on
rtc_static_library and rtc_source_set build targets.

It also adds the possibility to suppress these warnings because
they trigger in a few places.

The long term goal is to avoid regressions on this and remove all the
suppressions.

Bug: webrtc:9693
Change-Id: I4c1ecc137ef9e87ec5e66981ce95d96fb082727c
Reviewed-on: https://webrtc-review.googlesource.com/98380
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24604}
2018-09-06 12:43:20 +00:00
Alex Loiko
5dd6167908 Echo metric support for the APM-QA.
This was done by
* adding an EchoMetric class to EvaluationScore
* passing an echo metric binary path from the cmd arguments to the
  EvaluationScoreWorkerFactory
* passing the render input filepath to the Evaluator.

The echo score is supposed to be computed by the provided binary. It
should print the echo score in [0.0, 1.0] to a text file. It should
satisfy the cmd flags in its invocation in EchoMetric._Run()


Bug: webrtc:7494
Change-Id: I397013d6ed17659ea01d0623d98a14d4fcdcc161
Reviewed-on: https://webrtc-review.googlesource.com/97022
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24537}
2018-09-03 14:54:23 +00:00
Jesús de Vicente Peña
836a7a2e4d AEC3: option for using the stationarity estimator at render from the beginning of the call
Bug: webrtc:9697
Change-Id: I2427e9e62505d27b0942fd6b2e38eee6d720f4f3
Reviewed-on: https://webrtc-review.googlesource.com/97081
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24513}
2018-08-31 17:07:02 +00:00
Per Åhgren
240215431e AEC3: Parametrize the shadow filter output usage
This CL introduces the ability to control the usage of the shadow filter
output in the echo canceller output.

Bug: webrtc:9694,chromium:879451
Change-Id: I01f90de60de1799b32892051c176bda5e1a8d33e
Reviewed-on: https://webrtc-review.googlesource.com/97020
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24506}
2018-08-31 06:51:16 +00:00
Alessio Bazzica
cc22f51988 Removing the intelligibility enhancer.
The intelligibility enhancer is always disabled and it is the only non-test
target using the lapped transform in common_audio (which we planned to remove).

Bug: webrtc:9689, webrtc:5298
Change-Id: Ida65d3aa11ac366471e7e5cbc053108b376c67d8
Reviewed-on: https://webrtc-review.googlesource.com/96460
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24504}
2018-08-30 21:29:57 +00:00
Jesús de Vicente Peña
02e9e44c0c AEC3: Adding a reset of the ERLE estimator after going out from the initial state.
Bug: webrtc:9685
Change-Id: Ifc6019811c3d90df91df07e68f1d04cb39cb3545
Reviewed-on: https://webrtc-review.googlesource.com/96661
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24484}
2018-08-29 12:53:21 +00:00
Valeriia Nemychnikova
f06eb57a2f Adding CustomAudioAnalyzer interface in APM.
CustomAudioAnalyzer is an interface of a component into APM that
reads AudioBuffer without changing it.
The APM sub-module is optional. It operates in full band.
As described in the comments, it is an experimental interface which
may be changed in the nearest future.

Change-Id: I21edf729d97947529256407b10fa4b5219bb2bf5
Bug: webrtc:9678
Reviewed-on: https://webrtc-review.googlesource.com/96560
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Valeriia Nemychnikova <valeriian@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24481}
2018-08-29 10:12:26 +00:00
Jesús de Vicente Peña
7015bb410d AEC3: Reset the ERLE estimation after a delay change
Bug: webrtc:9685
Change-Id: I3c920bbb07aef513ea14bd0573ac4fd4b278ec89
Reviewed-on: https://webrtc-review.googlesource.com/96681
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24480}
2018-08-29 09:56:56 +00:00
Jesús de Vicente Peña
a687812c70 AEC3: option for enabling/disabling the onset detection for the ERLE in the configuration file.
During this work a parameter is added to the configuration file for the AEC3 that allows to enable or disable the use of a different ERLE estimation for the render onsets.

Bug: webrtc:9677
Change-Id: I467f2cd20683fee06b69c0ba51a90816c9e14f29
Reviewed-on: https://webrtc-review.googlesource.com/96082
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24470}
2018-08-28 20:45:37 +00:00
Jesús de Vicente Peña
5b7a484ff1 AEC3: Improving and optimizing the reverberation decay estimator.
- Changes in the early reverberation estimation.
 - Code optimization by avoiding squaring the whole impulse response.

Bug: webrtc:9651
Change-Id: Iefd4f5ad52a2584d21b20934db1fae5cb1bc81ed
Reviewed-on: https://webrtc-review.googlesource.com/95483
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24464}
2018-08-28 09:07:46 +00:00
Gustaf Ullberg
5cd81cbff7 AEC3: Disabling explicit handling of microphone gain changes
Disables the faster filter adaptation in the event of
microphone gain changes as it sometimes impacted transparency
negatively.

Bug: webrtc:9526,chromium:863826
Change-Id: I48fb6dd45440518aaf94b6469d6bb891247ea4ab
Reviewed-on: https://webrtc-review.googlesource.com/95143
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24461}
2018-08-28 07:26:40 +00:00
Gustaf Ullberg
9ed9792def AEC3: Removing some old kill switches
Removing the some kill switches from the AEC3 codebase. CL is tested for
bit exactness.

Bug: webrtc:8671
Change-Id: I6ecdb1b5ccb05dca79bf0a0cd471f53d79d71d7e
Reviewed-on: https://webrtc-review.googlesource.com/96181
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24460}
2018-08-28 06:59:42 +00:00
Jesús de Vicente Peña
657f2e6c3e AEC3: audioproc_f: adding the read of the parameter fixed_capture_delay_samples
Bug: webrtc:8671
Change-Id: Ibbf1a725c1ec3a26879ab4feb2a655ed1460b359
Reviewed-on: https://webrtc-review.googlesource.com/96220
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24452}
2018-08-27 14:15:22 +00:00
Alessio Bazzica
82ec0faf72 Limiter reset when fixed gain controller gain set.
When FixedGainController::SetGain() is called first on a large value (e.g., 40 dB)
and afterwards on a smaller one (e.g., 0 dB), the limiter used by FixedGainController
takes time (about 10-20 seconds) to converge. During that period, the audio is not
audible and the volume slowly increases.

Even if switching from 40 dB to 0 dB is unlikely, this behavior can be corrected by
resetting the limiter every time that FixedGainController::SetGain() is called.
This eliminates the undesired effect described above even when the transient is short.

Bug: webrtc:7494
Change-Id: I419b8986d2181448b4671cdbbd1c256dfb460216
Reviewed-on: https://webrtc-review.googlesource.com/94902
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24451}
2018-08-27 14:06:32 +00:00
Per Åhgren
fde4aa9909 AEC3: Adaptive handling of echo path with strong high-frequency gain
This CL adds adaptive handling of platforms where the echo path has
a strong gain above 10 kHz. A configurable offset is adaptively applied
depending on the amount of echo and mode of the echo suppressor.

Bug: webrtc:9663
Change-Id: I27dde6dc23b04a76a3be8c49d7fc9e226b9137e6
Reviewed-on: https://webrtc-review.googlesource.com/95947
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24448}
2018-08-27 12:49:28 +00:00
Gustaf Ullberg
638d4d375f AEC3: No ERLE uncertainty with diverged filter
Disable the use of ERLE uncertainty with a diverged filter as it has
been shown to make transparency worse.

Bug: webrtc:9668
Change-Id: I5e23665def187c0d1cf47a029c4ebc950e79bb44
Reviewed-on: https://webrtc-review.googlesource.com/96140
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24446}
2018-08-27 12:06:43 +00:00
Per Åhgren
524e878121 AEC3: Add state-specific suppressor behaviors
This CL allows selecting an echo suppressor behavior which is specific
for whether the nearend is dominant, or the echo is dominant.

The changes in this CL are bitexact.

Bug: webrtc:9660
Change-Id: Ie32e65efe47e692de6d6a22a7ad3b469d745fd6b
Reviewed-on: https://webrtc-review.googlesource.com/95725
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24434}
2018-08-24 21:43:36 +00:00
Alex Loiko
e583174d1e Optionally disable digital adaptive AGC2.
The AGC2 is enabled by flipping
AudioProcessing::Config::GainController2::enabled. The flag enables
both AdaptiveAgc and FixedGainController. Before this CL, there was no
way(*) to only enable the FixedGainController. After this CL, it's
also possible to flip the setting
|AudioProcessing::Config::GainController2::adaptive_digital_mode|. The
default is |true|, which is the previous behavior.

* Except for instantiating and setting it up outside of the APM like
  it's done in the AudioMixer.

Bug: webrtc:7494
Change-Id: I506e93b6687221ac467f083fa8db3d45c98c1b83
Reviewed-on: https://webrtc-review.googlesource.com/95426
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24432}
2018-08-24 15:54:43 +00:00
Gustaf Ullberg
41dd22b15d AEC3: Removing more dead code from the suppressor
This CL removes the UpdateGainIncrease code that is not used anymore.
The CL has been tested for bit exactness.

Bug: webrtc:8671
Change-Id: I4fcf26c3b4b5bba760ee139416ddefac86a36c2e
Reviewed-on: https://webrtc-review.googlesource.com/95940
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24425}
2018-08-24 10:25:00 +00:00
Gustaf Ullberg
ecb2d5670d AEC3: Removing old suppressor logic
This CL removes some of the unused code in the suppressor. The CL has
been tested for bit exactness.

Bug: webrtc:8671
Change-Id: I960f9445dfd109cf1d5790debb8758872b5b8d0d
Reviewed-on: https://webrtc-review.googlesource.com/95682
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24417}
2018-08-24 06:34:42 +00:00
Per Åhgren
5a72a5ef2b Adding quiet mode for audioproc_f
This CL adds a quiet mode for audioproc_f and hooks up the verbose
output of the AEC3 settings read from the JSON input file to that.

Bug: webrtc:8671
Change-Id: I93bbd1efc6502649da7b2b3e9f7557e9c184b0ed
Reviewed-on: https://webrtc-review.googlesource.com/95700
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@{#24416}
2018-08-24 05:52:43 +00:00
Gustaf Ullberg
370c050ecd Correct audioproc_f to support the new echo canceller activation III
The introduction of the new AEC proxies caused audioproc_f to fail.
This CL corrects audioproc_f so that the AEC2 and AECM echo cancellers
are properly activated using the new AEC proxies.

Bug: webrtc:9535
Change-Id: I48b9deaad873aee597f56ebd33814420024e0d58
Reviewed-on: https://webrtc-review.googlesource.com/95645
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24405}
2018-08-23 13:48:33 +00:00
Gustaf Ullberg
a73c3b0e07 AEC3: Removing the coherence computation
This CL removes the unused coherence computation from AEC3. This CL
only removes unused code, the output of AEC3 does not change.

Bug: webrtc:8671
Change-Id: Ie127c5ec64e29414f1e1570511d57a4d09fc9145
Reviewed-on: https://webrtc-review.googlesource.com/95650
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24403}
2018-08-23 13:05:54 +00:00
Per Åhgren
398689f581 AEC3: Adding the option for applying a fixed delay to the capture signal
This CL adds functionality for applying an optional fixed delay in AEC3
to the capture signal

Bug: webrtc:9647
Change-Id: Id3b3f896bcf203e6611298dc804c3c80da9f1883
Reviewed-on: https://webrtc-review.googlesource.com/95142
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24399}
2018-08-23 10:05:07 +00:00
Gustaf Ullberg
09831c9b0a Correct audioproc_f to support the new echo canceller activation II
The introduction of the new AEC proxies caused audioproc_f to fail.
This CL corrects audioproc_f so that the AEC2 and AECM echo cancellers
are properly activated using the new AEC proxies.

Bug: webrtc:9535
Change-Id: I0e1462fa6e35944f7dbb02580f1db09401c8f7c8
Reviewed-on: https://webrtc-review.googlesource.com/95484
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24394}
2018-08-23 06:03:53 +00:00
Jesús de Vicente Peña
8459b17c75 AEC3: adding a config option for applying a more conservative initial phase.
Change-Id: If0f93aa6abcb3b8e99ca40dde86b15a4b1487883
Bug: webrtc:8671
Reviewed-on: https://webrtc-review.googlesource.com/94505
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24363}
2018-08-21 14:56:14 +00:00
Per Åhgren
c3da6716d4 AEC3: Adding another config parameter and matching json reader with config
This CL:
-Adds another config parameter that controls the duration of the initial
state.
-Adds reading of that parameter in audioproc_f from the json settings file.
-Adds missing reading of another parameter in audioproc_f from the json
settings file.

Bug: webrtc:8671
Change-Id: Ie6164c360492de5e6b0ade8838bbabe214560b5e
Reviewed-on: https://webrtc-review.googlesource.com/94621
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24360}
2018-08-21 13:58:10 +00:00
Per Åhgren
0320348237 Correct audioproc_f to support the new echo canceller activation
The introduction of the new AEC proxies caused audioproc_f to fail.
This CL corrects audioproc_f so that the AEC2 and AECM echo cancellers
are properly activated using the new AEC proxies.

Bug: webrtc:9535
Change-Id: I1be59a9277aad8f51765c26e34ab16b63bcaeb42
Reviewed-on: https://webrtc-review.googlesource.com/94774
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24340}
2018-08-20 08:43:14 +00:00
Per Åhgren
6204adf2ed AEC3: Loosen the echo removal requirements in conservative mode
This CL lowers the margins in the AEC3 conservative mode to increase
the transparency when there are audio buffer issues, and during call
startup.

In particular, this CL adjusts the parameters and thresholds to
-Make the requirements for filter divergence more strict, to minimize
the transparency loss during minor filter divergence.
-Decrease the echo power uncertainty used during initial filter
convergence, to increase transparency after audio buffer issues.
-Deactivate the enforcement of conservative suppressor gain after
audio buffer.

Bug: webrtc:9641,chromium:875611
Change-Id: Ie171bb411f17a1e8661c291118debd334f65c74f
Reviewed-on: https://webrtc-review.googlesource.com/94776
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24333}
2018-08-19 10:43:46 +00:00
Per Åhgren
7343f56ca6 AEC3: Added parameters for bypassing the suppressor
Bug: webrtc:8671
Change-Id: I9d9ffae0ca66a457481860f619e20fe580632f1d
Reviewed-on: https://webrtc-review.googlesource.com/94622
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24331}
2018-08-17 21:58:01 +00:00
Sam Zackrisson
b3b47ad7e6 Toggle AECs via AudioProcessing::Config
This allows clients to stop using the old pointer-to-submodule interfaces
for enabling/disabling AEC2 and AECM.

The legacy suppression level flag for AEC2 is not yet activated.

NoTry=TRUE

Bug: webrtc:9535
Change-Id: Ie2c3378d832a6b393aec656d96597f85e299f500
Reviewed-on: https://webrtc-review.googlesource.com/94771
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24328}
2018-08-17 14:56:57 +00:00
Sam Zackrisson
74ed734d71 Add AEC proxies for simple deprecation of AEC configurability.
Some changes need access to both the APM interface and the AECs,
hence we can't make the changes inside the AECs themselves.

The proxies also make it easy to drop support for individual parts of the
interfaces one at a time.


Bug: webrtc:9535
Change-Id: I3398e1182157f7d8b1e4c455060b830b61c20dd9
Reviewed-on: https://webrtc-review.googlesource.com/94500
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24317}
2018-08-16 15:16:44 +00:00
Sam Zackrisson
c4deaaa7c5 Set AEC2 suppression to high by default
The other modes are little-tested and nigh-unsupported.
Surrounding APM code is tuned for high suppression.

Both WebRtcVoiceEngine and Chrome default all usage to high
suppression.

Bug: webrtc:9535
Change-Id: Ic1a6bd90b86a994338addfef7f473132ab43092a
Reviewed-on: https://webrtc-review.googlesource.com/91865
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24313}
2018-08-16 12:14:14 +00:00
Per Åhgren
aa91b3c67e Hooks up more AEC3 parameters to be read by the AEC3 configuration file
Bug: webrtc:8671
Change-Id: I593ea4965ab2f8215e5d55e0778caf83cf62d4e1
Reviewed-on: https://webrtc-review.googlesource.com/94480
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24304}
2018-08-16 08:30:48 +00:00
Sam Zackrisson
a955849901 Add APM config flag for legacy moderate suppression level in AEC2
This will be hooked up in clients who need to keep using the moderate
suppression level in AEC2 until other tuning options are available.

Bug: webrtc:9535
Change-Id: I6c40898954d9c856f58bcea87271f4b98fa124de
Reviewed-on: https://webrtc-review.googlesource.com/94148
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24292}
2018-08-15 14:56:06 +00:00
Alex Loiko
f3122e0efe Gain metrics for digital adaptive AGC.
We add 2 metrics for measuring applied digital gain to
AgcManagerDirect. We also add an applied gain and an estimated noise
metric to Agc2.

Chromium histogram CL is
https://chromium-review.googlesource.com/c/chromium/src/+/1170833

Bug: webrtc:7494
Change-Id: Ie40873f9e43bc7d34d8f5473cd73bd47eb84e855
Reviewed-on: https://webrtc-review.googlesource.com/93468
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24290}
2018-08-15 13:44:46 +00:00
Alex Loiko
03ad9b892c Fine-grained limiter metrics.
The FixedGainController is used in two places.
One is the AudioMixer. There it's used to limit the audio level after
adding streams. The other is GainController2, where it's placed after
steps that could boost the audio level outside the allowed range.

We log metrics from the FGC. To avoid confusion, this CL makes the two
use cases log to different histograms.

Chromium histogram CL is
https://chromium-review.googlesource.com/c/chromium/src/+/1170833

Bug: webrtc:7494
Change-Id: I1abe60fd8e96556f144d2ee576254b15beca1174
Reviewed-on: https://webrtc-review.googlesource.com/93464
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24284}
2018-08-15 08:32:18 +00:00
Alex Loiko
f689d4c465 Atomically increment GainControl instance counter.
Fixes potential data race.

TBR: saza@webrtc.org
Bug: None
Change-Id: I56477566b761884cdb04c20852b8a4f16c158369
Reviewed-on: https://webrtc-review.googlesource.com/94081
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24283}
2018-08-15 07:44:00 +00:00
Per Åhgren
f4cf64ec06 AEC3: Enforcing nonlinear mode when transparent mode is active
This CL ensures that the linear echo prediction mode is not used
when the transparent mode is active.

TBR: saza@webrtc.org,gustaf@webrtc.org
Bug: webrtc:9612,chromium:873074
Change-Id: I25cda5226251df769b6524594ea8a2b78532aaec
Reviewed-on: https://webrtc-review.googlesource.com/93740
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24268}
2018-08-12 20:40:04 +00:00
Minyue Li
656d609a95 Add UTC time to init event in AEC debug dump.
Bug: webrtc:9616
Change-Id: I1350212f0b8835fb64427483269da96d51670c01
Reviewed-on: https://webrtc-review.googlesource.com/92620
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24267}
2018-08-11 20:29:07 +00:00
Per Åhgren
ee8ad5ff8a AEC3: Allow the main and shadow filters to have different lengths
This CL changes the AEC3 code to allow the main and shadow filters
to have different lengths.

Bug: webrtc:9614,chromium:873100
Change-Id: I3ec2861d496986610d5a73db5771bbe9b8bf7dcd
Reviewed-on: https://webrtc-review.googlesource.com/93465
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24265}
2018-08-10 19:59:50 +00:00
Per Åhgren
2275439c4e AEC3: Further utilize the shadow filter to boost adaptation
This CL makes the jump-starting of the shadow filter more extreme.
It furthermore utilizes this to allow the AEC to rely further, and
more quickly on its linear filter estimates.

The result is mainly increased transparency but also some
cases of fewer echo blips.


Bug: webrtc:9612,chromium:873074
Change-Id: I90f7cfbff9acb9d0c36409593afbf476e7a830d3
Reviewed-on: https://webrtc-review.googlesource.com/93461
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24264}
2018-08-10 17:16:23 +00:00
Per Åhgren
45e7281b86 AEC3: Ensure that the shadow filter is adapted at each block
This CL ensures that the shadow filter is adapted at each block, which
avoids that a temporary filter length mismatch can occur between the
main and shadow filters.

Bug: webrtc:9602,chromium:872201
Change-Id: I651812b4e3b134c6c5e1fe3df5ab78dbdb5c1fb4
Reviewed-on: https://webrtc-review.googlesource.com/93000
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24253}
2018-08-09 18:41:05 +00:00
Alessio Bazzica
d2b9740f48 APM: render pre-processor moved before echo detector queuing.
Any modification of the render stream now happens *before* the
echo detector enqueues render stream frames. In this way, there
is no impact of the render pre-processor on the echo likelihood
metric.

Bug: webrtc:9591
Change-Id: I9b5e339e892796a0d0cd072fdd45d35ec89d8802
Reviewed-on: https://webrtc-review.googlesource.com/93031
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24251}
2018-08-09 14:40:31 +00:00
Alex Loiko
9489c3a2ea Optionally disable digital gain control in ExperimentalAgc.
This CL adds a flag to optionally disable the digital gain control in
ExperimentalAgc. With the flag, Experimental Agc (henceforth AGC1)
only controls the adaptive analog gain. This flag can be combined to
that which activates AGC2. That way, one can enable the hybrid AGC
configuration AGC1 analog only + AGC2 fixed+adaptive digital.

Previously, there was a flag "use_agc2_digital_adaptive" in
AgcManagerDirect. Our ambition was that to activate the hybrid mode
described above with this flag. The behavior of the flag was not
implemented.

To activate the hybrid mode after this CL, set
ExperimentalAgc::digital_adaptive_disabled=true and
AudioProcessing::Config::GainController2::enabled=true.

We also add flags for these settings in audioproc_f.
Then the required settings are currently

  audioproc_f --agc2 1 --agc 1 --experimental_agc 1 \
      --experimental_agc_disable_digital_adaptive 1 \
      -i [INPUT]

Bug: webrtc:7494
Change-Id: Iea798dc3899cec83d30ba71caba787262fcaef41
Reviewed-on: https://webrtc-review.googlesource.com/89740
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24249}
2018-08-09 13:37:30 +00:00
Alex Loiko
a837dd790d Reset Agc2 on analog gain changes.
Agc2 applies a digital gain to the nearend signal.
When the analog level changes, the digital gain calculation is no
longer valid. Therefore Agc2 should be notified to analog gain
changes.

This CL also allow audioproc_f to chain AGC1 and AGC2. In a dependent
CL we will allow using AGC1 for analog gain and AGC2 for digital
gain.

Bug: webrtc:7494
Change-Id: Id75b3728fbf2de1d84b7fba005e4670c7a2985d9
Reviewed-on: https://webrtc-review.googlesource.com/89387
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24231}
2018-08-08 14:36:37 +00:00
Per Åhgren
78026754a7 AEC3: Utilize shadow filter output to respond to audio path changes
This CL adds functionality to use the shadow filter output instead
of the main filter output for cases when the former is better than
the latter. One case when that happens is when there have been an
echo path change, either in the acoustic path, in the audio buffers
or due to some active audio processing effects being applied on
the device.

The CL causes less echo leaks, in particular on devices with
active render processing.

Bug: webrtc:9581,chromium:869821
Change-Id: Icb8df1b94141598da82dc188051ac59e43338938
Reviewed-on: https://webrtc-review.googlesource.com/91820
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24166}
2018-08-01 15:20:33 +00:00
Oleh Prypin
d2f4e8bd90 Explicitly add -mfpu=neon to all targets that use NEON
Remove obsolete comment about Chromium not defining NEON for Android.

Semi-related fix: don't use `rtc_remove_configs` directly, `suppressed_configs` is the "public interface".

Bug: webrtc:9579
Change-Id: I512628feb462a29432f1356cfef00efe1ddaf84f
Reviewed-on: https://webrtc-review.googlesource.com/91761
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Oleh Prypin <oprypin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24165}
2018-08-01 13:15:42 +00:00
Alessio Bazzica
55bf92adf4 RNN VAD: more specific build target names.
Bug: webrtc:9076
Change-Id: Ie35ce0f864318a1ddc552285a5535fe411168202
Reviewed-on: https://webrtc-review.googlesource.com/91760
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24162}
2018-08-01 09:07:26 +00:00
Alessio Bazzica
2a99c0bf67 Fix MovingMoments::CalculateMoments.
Protect from negative second moments, which are unexpected in TransientDetector::Detect
and may lead to invalid results.

Bug: chromium:866925
Change-Id: Id1d5b2ebb51e54d9d332b869c6f63dcd03cc461c
Reviewed-on: https://webrtc-review.googlesource.com/91164
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24153}
2018-07-31 15:08:12 +00:00
Per Åhgren
ef5d5af3a0 AEC3: Increasing the accuracy of the detection for early reverb
This CL introduces an adaptive estimation of the early reverb
in the estimation for the room reverberation. The benefits of
this is that for room with long early reflections there is
a lower risk of underestimating the reverberation.

This CL is for a landing the code in
https://webrtc-review.googlesource.com/c/src/+/87420,
and the review of the code was done in that CL. The author of
code is devicentepena@webrtc.org

Bug: webrtc:9479, chromium:865397
Change-Id: Id6f57e2a684664aef96e8c502e66775f37da59da
Reviewed-on: https://webrtc-review.googlesource.com/91162
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24146}
2018-07-30 22:34:19 +00:00
Sam Zackrisson
0b0f3596bd Remove old temporary webrtc::PostProcessing typedef
Related bug closed since half a year back.

Bug: webrtc:8665
Change-Id: I77007caaa97b5db04f5cf144323cac7a576a7fde
Reviewed-on: https://webrtc-review.googlesource.com/90872
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24135}
2018-07-27 15:43:57 +00:00
Per Åhgren
f954ba5c11 AEC3: Increasing the transparency during call startup
This CL increases the AEC3 transparency during call
startup and after echo path delay changes in 3 ways:
1. The exit requirements for the initial mode is
made less strict.
2. The requirements for using the linear echo model
are made less strict.
3. The duplicated reverb modelling in the linear mode
removed.


Bug: webrtc:9572,chromium:868329
Change-Id: I79ea0796ed26408e35576bb39eaae4e4848b4f83
Reviewed-on: https://webrtc-review.googlesource.com/90868
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24132}
2018-07-27 14:18:42 +00:00
Sam Zackrisson
8b5d2cc93e Add unused AEC toggling config to API
This will be the one way of toggling AEC. The EchoControlMobile and
EchoCancellation interfaces will be removed.

The settings introduced here are not used yet, to allow for smooth
downstream fixes.

Bug: webrtc:9535
Change-Id: I3b1a524a0ab7daf63419d7e5ed47417b9282dbf6
Reviewed-on: https://webrtc-review.googlesource.com/90864
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24129}
2018-07-27 12:57:45 +00:00
Per Åhgren
e4db6a1518 AEC3: Improved the accuracy of the adaptive filter
This CL adds a functionality that jump-starts the
AEC3 shadow filter whenever it performs consistently
worse than the main filter.
The jump-start is done such that the shadow filter
is re-initialized using the main filter coefficients.

The effects of this is a significantly more accurate
main linear filter which leads to less echo leakage
and better transparency

Bug: webrtc:9565, chromium:867873
Change-Id: Ie0b23cd536adc7ce96fc3ed2a7db112aec7437f1
Reviewed-on: https://webrtc-review.googlesource.com/90413
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24117}
2018-07-26 14:51:32 +00:00
Artem Titov
333a50562c Move fft4g to proper third_party directory
Bug: webrtc:8366
Change-Id: I98d3ae56a1d14b3ecacd85a4b3d234e215c8bc58
Reviewed-on: https://webrtc-review.googlesource.com/85642
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Niklas Enbom <niklas.enbom@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24103}
2018-07-25 15:44:53 +00:00
Per Åhgren
7f5175a455 AEC3: Corrected the filter adjustment during analog gain changes
This CL corrects the way that the echo subtractor output is
adjusted during the adjustment of the adaptive filter when the
analog AGC gain changes.

The CL also ensures that the main adaptive filter is not updated
when this occurs.

Bug: webrtc:9561,chromium:867373
Change-Id: I636f936128f7d9f0d82ca4140b59f148eb35d6a4
Reviewed-on: https://webrtc-review.googlesource.com/90401
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24101}
2018-07-25 15:00:33 +00:00
Niels Möller
a12c42a6b2 Delete root header file typedef.h.
Usage replaced with stdint.h, rtc_base/system/arch.h and
rtc_base/system/unused.h, as appropriate.

Bug: webrtc:6854
Change-Id: I97225465d14b969903d92979e2df3c3c05d35f18
Reviewed-on: https://webrtc-review.googlesource.com/90249
Reviewed-by: Niklas Enbom <niklas.enbom@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24100}
2018-07-25 14:59:26 +00:00
Sam Zackrisson
e507b0ce8e Turn off comfort noise generation by default in AECM
All clients who do not own their own APM turn it off by default
(in WebrtcVoiceEngine). AECM with comfort noise is a little-exercised
code path. Configurability of this setting is going away, so we're
better off disabling it by default.

Bug: webrtc:9535
Change-Id: Iba839aa18e79ae29ff20bdf6e30de77870ba4143
Reviewed-on: https://webrtc-review.googlesource.com/89583
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24078}
2018-07-24 08:52:36 +00:00
Artem Titov
5d7a4c6692 Fixing py lint errors
Bug: webrtc:9548
Change-Id: I0daf8dc06fdaac1637c32994ef6ad542ed52202a
Reviewed-on: https://webrtc-review.googlesource.com/90045
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Reviewed-by: Niklas Enbom <niklas.enbom@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24068}
2018-07-23 15:28:48 +00:00
Sam Zackrisson
2a959d96c9 Revert "Add one-stop-shop for built-in AEC toggling in APM"
This reverts commit 771b50ca0b.

Reason for revert: Introduces error-prone config.

Original change's description:
> Add one-stop-shop for built-in AEC toggling in APM
> 
> This does not change what AEC functionality is available.
> However, a client that only uses this interface - and not the submodule
> pointer accessors - gets simpler code, and is guaranteed not to run any
> two AECs in tandem.
> 
> The submodule interface EchoControlMobile is being deprecated in
> https://webrtc-review.googlesource.com/c/src/+/89392
> 
> Bug: webrtc:9535
> Change-Id: Id9326074e566be6d8768010fc421c457beff402c
> Reviewed-on: https://webrtc-review.googlesource.com/89386
> Commit-Queue: Sam Zackrisson <saza@webrtc.org>
> Reviewed-by: Per Åhgren <peah@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#24066}

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

Change-Id: I43283a1b22538a4caa77313499989146b2ce67f1
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9535
Reviewed-on: https://webrtc-review.googlesource.com/90060
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24067}
2018-07-23 14:48:17 +00:00
Sam Zackrisson
771b50ca0b Add one-stop-shop for built-in AEC toggling in APM
This does not change what AEC functionality is available.
However, a client that only uses this interface - and not the submodule
pointer accessors - gets simpler code, and is guaranteed not to run any
two AECs in tandem.

The submodule interface EchoControlMobile is being deprecated in
https://webrtc-review.googlesource.com/c/src/+/89392

Bug: webrtc:9535
Change-Id: Id9326074e566be6d8768010fc421c457beff402c
Reviewed-on: https://webrtc-review.googlesource.com/89386
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24066}
2018-07-23 14:12:26 +00:00
Per Åhgren
71ebf99768 AEC3: Added dumping to wav files for the filter outputs
Bug: webrtc:8671
Change-Id: I9b16ec2fca73894ec26b1cb2b88354ea8d947bf5
Reviewed-on: https://webrtc-review.googlesource.com/88760
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24064}
2018-07-23 10:43:23 +00:00
Alex Loiko
99f1e0d008 Reset level estimator when analog gain changes.
In AgcManagerDirect::UpdateGain(), Agc::GetRmsErrorDb() is
called. Depending on the result of that call, the analog gain may be
changed. After an analog gain change, the Agc should be reset, because
it's memory contains now invalid loudness levels.

The Agc in modules/audio_processing/agc/agc.cc resets itself at every
successful Agc::GetRmsErrorDb call. The AdaptiveModeLevelEstimatorAgc
does not. This change makes sure all Agcs are reset from
AgcManagerDirect.

It will cause some Agcs to be reset twice. This is fine, because
Agc::Reset() is cheap and idempotent.

Bug: webrtc:7494
Change-Id: Iee7495d699cbdb9d69b2ae0cb07034c6e2761e22
Reviewed-on: https://webrtc-review.googlesource.com/89040
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24054}
2018-07-20 14:18:38 +00:00
Alex Loiko
e714ed6427 Fuzzer finds fixedpoint failure.
A 32-bit number overflows. It's then capped to compute a 16-bit value.
This CL introduces a 64-bit variable on which equivalent operations are
performed instead.

Bug: chromium:864883
Change-Id: I371af869c6586256b900356491f467bed357e11d
Reviewed-on: https://webrtc-review.googlesource.com/89584
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24041}
2018-07-19 12:11:22 +00:00
Oleh Prypin
dd21474da5 Replace accidental usages of source_set with rtc_source_set
Bug: None
Change-Id: I80c5ad9e1e9942eb51ace014cd7b9127959d601b
Reviewed-on: https://webrtc-review.googlesource.com/89061
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Oleh Prypin <oprypin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24004}
2018-07-17 12:40:17 +00:00
Alex Loiko
684b401016 Division by zero in RNN-VAD.
Bug: webrtc:9450, chromium:861557
Change-Id: I00ddda1fe0e088b983707420acf1b9a6763a3535
Reviewed-on: https://webrtc-review.googlesource.com/87841
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23999}
2018-07-17 09:03:05 +00:00
Mirko Bonadei
a6c544d08d Enabling clang::find_bad_constructs for AEC3.
This CL removes //build/config/clang:find_bad_constructs from the
suppressed_configs list, which means that clang:find_bad_constructs
is now enabled on these translation units.

Bug: webrtc:9251
Change-Id: Ibdafc0bb08de1be7189af7053a67a24e3a26bd6b
Reviewed-on: https://webrtc-review.googlesource.com/89001
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23997}
2018-07-17 08:49:15 +00:00
Per Åhgren
88cf0501f3 AEC3: Adding explicit handling of microphone gain changes
This CL re-activates the explicit handling of microphone
gain changes in the AEC3 code. The implementation is done
beneath a kill-switch so that when that switch is active
the changes in this CL are bitexact.


Bug: webrtc:9526,chromium:863826
Change-Id: I58e93d8bc0bce7bec91e102de9891ad48ebc55d8
Reviewed-on: https://webrtc-review.googlesource.com/88620
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23986}
2018-07-16 16:02:07 +00:00
Per Åhgren
b20b93796f AEC3: Refactor the code for analyzing filter convergence
This CL refactors the code in AEC3 that analyzes how
well the adaptive filter performs. The purpose of this
is both to simplify code that is more complex than needed
and also to pave the wave for the upcoming CLs that
softens the echo suppression during doubletalk.

The main changes are that:
-The shadow adaptive filter is now never analyzed. This
turned out to never affect the output in the recordings
it was tested on.
-The convergence analysis was moved to the aec state
code.

The changes are bitexact on all testcases where they
have been tested on.

Bug: webrtc:8671
Change-Id: If76b669565325c8eb4d11d1178a7e20306da9a26
Reviewed-on: https://webrtc-review.googlesource.com/87430
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23958}
2018-07-12 23:13:08 +00:00
Sam Zackrisson
3f84f498e4 Remove useless import of arm.gni
Bug: None
Change-Id: I439410d9edf306b664ef21157216870d6e1c8207
Reviewed-on: https://webrtc-review.googlesource.com/87436
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23953}
2018-07-12 14:39:00 +00:00
Alessio Bazzica
9cb5d5f9de Reland "IWYU: Add <cmath> for fabsf() and powf(), switch to C++ versions"
This reverts commit d39ce8d45b.

Reason for revert: downstream project fix

Original change's description:
> Revert "IWYU: Add <cmath> for fabsf() and powf(), switch to C++ versions"
> 
> This reverts commit e90879097c.
> 
> Reason for revert: breaking downstream projects
> 
> Original change's description:
> > IWYU: Add <cmath> for fabsf() and powf(), switch to C++ versions
> > 
> > Fix the build with libstdc++ after 496cedfe5 ("AEC3: Reverberation model:
> > Changes on the decay estimation") by including the missing header:
> > 
> >     ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In constructor ‘webrtc::ReverbModelEstimator::ReverbModelEstimator(const webrtc::EchoCanceller3Config&)’:
> >     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: error: ‘fabsf’ was not declared in this scope
> >            reverb_decay_(fabsf(config.ep_strength.default_len)),
> >                          ^~~~~
> >     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: note: suggested alternative: ‘labs’
> >            reverb_decay_(fabsf(config.ep_strength.default_len)),
> >                          ^~~~~
> >                          labs
> >     ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In member function ‘void webrtc::ReverbModelEstimator::UpdateReverbDecay(const std::vector<float>&)’:
> >     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:206:15: error: ‘powf’ was not declared in this scope
> >            decay = powf(2.0f, -exp_candidate * kFftLengthBy2);
> >                    ^~~~
> > 
> > While here, also switch to the C++ versions of those functions: std::fabs()
> > and std::pow() respectively.
> > 
> > Spotted by Jose Dapena Paz <jose.dapena@lge.com>.
> > 
> > Bug: chromium:819294
> > Change-Id: Id803243be8dd17eac95c70a88a37ee2fe1505a5a
> > Reviewed-on: https://webrtc-review.googlesource.com/87421
> > Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
> > Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
> > Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#23870}
> 
> TBR=gustaf@webrtc.org,alessiob@webrtc.org,raphael.kubo.da.costa@intel.com,devicentepena@webrtc.org
> 
> Change-Id: I22423a2d4201183f70ae084e0e21930367824f1c
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: chromium:819294
> Reviewed-on: https://webrtc-review.googlesource.com/87401
> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23871}

TBR=gustaf@webrtc.org,alessiob@webrtc.org,raphael.kubo.da.costa@intel.com,devicentepena@webrtc.org

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

Bug: chromium:819294
Change-Id: I09e07d59961d3e2ecc617244287a821cb8b04578
Reviewed-on: https://webrtc-review.googlesource.com/87900
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23910}
2018-07-10 15:01:50 +00:00
Sam Zackrisson
71729eb0a8 Fix fuzzer-found flow-over in AGC1
This CL changes a constant from an approximately correct limit
of 2^25.5.

The new limit is the largest x such that z = 10 satisfies:
((x >> z) + 1)^2 <= 2^31 - 1.
If gains[k + 1] > x, then z >= 11 and needs to be computed.

Bug: chromium:860638
Change-Id: If17f257dacd94806e59e4f32b345a5fb15b4e32b
Reviewed-on: https://webrtc-review.googlesource.com/87583
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23908}
2018-07-10 14:02:49 +00:00
Sam Zackrisson
7219d053d5 Split aec and aecm into separate build targets
This clarifies dependencies and makes it easier to customize builds
for different binaries.

Also adds BUILD files in aec/ and aecm/.

Moves unit tests to their own target, which subjects them to Chromium
Clang style checks.
The CL contains a fix for a thusly induced warning.

Bug: webrtc:9488
Change-Id: I77b680b42a4dccc5f025005e0890f60b4eaf2961
Reviewed-on: https://webrtc-review.googlesource.com/87304
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23887}
2018-07-09 14:48:06 +00:00
Alex Loiko
2ffafa8244 Allow AGC2 level estimation in AgcManagerDirect.
This CL does the following:

1. Adds a new AdaptiveModeLevelEstimatorAgc implementation of the Agc
  interface. The new implementation differs from webrtc::Agc by
   1. using the AGC2 speech level estimator in
      GetRmsErrorDb. webrtc::Agc implements its own with help of
      webrtc::LoudnessHistogram.
   2. Doesn't forget its past at every GetRmsErrorDb call.
2. Makes AgcManagerDirect use AdaptiveModeLevelEstimatorAgc instead of
   webrtc::Agc if the use_agc2_level_estimation flag is set.

Bug: webrtc:7494
Change-Id: I8df3f52e322d433eb5ce5297f4236af2f1877b04
Reviewed-on: https://webrtc-review.googlesource.com/86603
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23875}
2018-07-06 14:18:18 +00:00
Alex Loiko
ed8ff64ef7 Break out Agc code from audio_processing.
Splits 'modules/audio_processing:audio_processing' target. The files
in modules/audio_processing/agc now are in targets in that folder.

Reason for doing this was to include
modules/audio_processing/agc/agc.h from another target in the
dependent CL https://webrtc-review.googlesource.com/c/src/+/86603

This could help reducing the binary size in the future.

Bug: webrtc:7494
Change-Id: I61f50ab6d5ce24d19f4097e0f3fa8b0170010887
Reviewed-on: https://webrtc-review.googlesource.com/87422
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23873}
2018-07-06 13:29:43 +00:00
Alessio Bazzica
d39ce8d45b Revert "IWYU: Add <cmath> for fabsf() and powf(), switch to C++ versions"
This reverts commit e90879097c.

Reason for revert: breaking downstream projects

Original change's description:
> IWYU: Add <cmath> for fabsf() and powf(), switch to C++ versions
> 
> Fix the build with libstdc++ after 496cedfe5 ("AEC3: Reverberation model:
> Changes on the decay estimation") by including the missing header:
> 
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In constructor ‘webrtc::ReverbModelEstimator::ReverbModelEstimator(const webrtc::EchoCanceller3Config&)’:
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: error: ‘fabsf’ was not declared in this scope
>            reverb_decay_(fabsf(config.ep_strength.default_len)),
>                          ^~~~~
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: note: suggested alternative: ‘labs’
>            reverb_decay_(fabsf(config.ep_strength.default_len)),
>                          ^~~~~
>                          labs
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In member function ‘void webrtc::ReverbModelEstimator::UpdateReverbDecay(const std::vector<float>&)’:
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:206:15: error: ‘powf’ was not declared in this scope
>            decay = powf(2.0f, -exp_candidate * kFftLengthBy2);
>                    ^~~~
> 
> While here, also switch to the C++ versions of those functions: std::fabs()
> and std::pow() respectively.
> 
> Spotted by Jose Dapena Paz <jose.dapena@lge.com>.
> 
> Bug: chromium:819294
> Change-Id: Id803243be8dd17eac95c70a88a37ee2fe1505a5a
> Reviewed-on: https://webrtc-review.googlesource.com/87421
> Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
> Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23870}

TBR=gustaf@webrtc.org,alessiob@webrtc.org,raphael.kubo.da.costa@intel.com,devicentepena@webrtc.org

Change-Id: I22423a2d4201183f70ae084e0e21930367824f1c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: chromium:819294
Reviewed-on: https://webrtc-review.googlesource.com/87401
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23871}
2018-07-06 11:37:15 +00:00
Raphael Kubo da Costa
e90879097c IWYU: Add <cmath> for fabsf() and powf(), switch to C++ versions
Fix the build with libstdc++ after 496cedfe5 ("AEC3: Reverberation model:
Changes on the decay estimation") by including the missing header:

    ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In constructor ‘webrtc::ReverbModelEstimator::ReverbModelEstimator(const webrtc::EchoCanceller3Config&)’:
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: error: ‘fabsf’ was not declared in this scope
           reverb_decay_(fabsf(config.ep_strength.default_len)),
                         ^~~~~
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: note: suggested alternative: ‘labs’
           reverb_decay_(fabsf(config.ep_strength.default_len)),
                         ^~~~~
                         labs
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In member function ‘void webrtc::ReverbModelEstimator::UpdateReverbDecay(const std::vector<float>&)’:
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc:206:15: error: ‘powf’ was not declared in this scope
           decay = powf(2.0f, -exp_candidate * kFftLengthBy2);
                   ^~~~

While here, also switch to the C++ versions of those functions: std::fabs()
and std::pow() respectively.

Spotted by Jose Dapena Paz <jose.dapena@lge.com>.

Bug: chromium:819294
Change-Id: Id803243be8dd17eac95c70a88a37ee2fe1505a5a
Reviewed-on: https://webrtc-review.googlesource.com/87421
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23870}
2018-07-06 11:03:41 +00:00
Alessio Bazzica
282dad1943 Revert "IWYU: Add <math.h> for fabsf() and powf()"
This reverts commit 7d47525e8b.

Reason for revert: breaking downstream projects

Original change's description:
> IWYU: Add <math.h> for fabsf() and powf()
> 
> Fix the build with libstdc++ after 496cedfe5 ("AEC3: Reverberation model:
> Changes on the decay estimation") by including the missing header:
> 
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In constructor ‘webrtc::ReverbModelEstimator::ReverbModelEstimator(const webrtc::EchoCanceller3Config&)’:
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: error: ‘fabsf’ was not declared in this scope
>            reverb_decay_(fabsf(config.ep_strength.default_len)),
>                          ^~~~~
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: note: suggested alternative: ‘labs’
>            reverb_decay_(fabsf(config.ep_strength.default_len)),
>                          ^~~~~
>                          labs
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In member function ‘void webrtc::ReverbModelEstimator::UpdateReverbDecay(const std::vector<float>&)’:
>     ../../modules/audio_processing/aec3/reverb_model_estimator.cc:206:15: error: ‘powf’ was not declared in this scope
>            decay = powf(2.0f, -exp_candidate * kFftLengthBy2);
>                    ^~~~
> 
> Spotted by Jose Dapena Paz <jose.dapena@lge.com>.
> 
> Bug: chromium:819294
> Change-Id: If992e5e473b9d4d0c1b3c1006c3816b7c4eee296
> Reviewed-on: https://webrtc-review.googlesource.com/87241
> Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
> Commit-Queue: Raphael Kubo da Costa (rakuco) <raphael.kubo.da.costa@intel.com>
> Cr-Commit-Position: refs/heads/master@{#23863}

TBR=gustaf@webrtc.org,alessiob@webrtc.org,raphael.kubo.da.costa@intel.com,devicentepena@webrtc.org

Change-Id: I8adcec57d67de2efcbf0ebef0cdb700fcc21689a
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: chromium:819294
Reviewed-on: https://webrtc-review.googlesource.com/87400
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23864}
2018-07-06 09:18:22 +00:00
Raphael Kubo da Costa
7d47525e8b IWYU: Add <math.h> for fabsf() and powf()
Fix the build with libstdc++ after 496cedfe5 ("AEC3: Reverberation model:
Changes on the decay estimation") by including the missing header:

    ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In constructor ‘webrtc::ReverbModelEstimator::ReverbModelEstimator(const webrtc::EchoCanceller3Config&)’:
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: error: ‘fabsf’ was not declared in this scope
           reverb_decay_(fabsf(config.ep_strength.default_len)),
                         ^~~~~
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc:61:21: note: suggested alternative: ‘labs’
           reverb_decay_(fabsf(config.ep_strength.default_len)),
                         ^~~~~
                         labs
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc: In member function ‘void webrtc::ReverbModelEstimator::UpdateReverbDecay(const std::vector<float>&)’:
    ../../modules/audio_processing/aec3/reverb_model_estimator.cc:206:15: error: ‘powf’ was not declared in this scope
           decay = powf(2.0f, -exp_candidate * kFftLengthBy2);
                   ^~~~

Spotted by Jose Dapena Paz <jose.dapena@lge.com>.

Bug: chromium:819294
Change-Id: If992e5e473b9d4d0c1b3c1006c3816b7c4eee296
Reviewed-on: https://webrtc-review.googlesource.com/87241
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Raphael Kubo da Costa (rakuco) <raphael.kubo.da.costa@intel.com>
Cr-Commit-Position: refs/heads/master@{#23863}
2018-07-06 08:34:21 +00:00
Mirko Bonadei
5abfb00bf2 Removing useless import of arm.gni
Bug: None
Change-Id: I2915890f72051e1d4f042735f952d36bda6a4141
Reviewed-on: https://webrtc-review.googlesource.com/87382
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23862}
2018-07-06 08:27:41 +00:00
Sam Zackrisson
b2e176522e Create separate build targets for utility/ in APM
This clarifies the dependencies of utility/ a lot (spoiler:
there are very few) and makes it easier to separate the build
targets for aecm and aec2.

Bug: webrtc:9488
Change-Id: If916f86e80c19d1b650d0908fbe8343ea7c47bd7
Reviewed-on: https://webrtc-review.googlesource.com/87141
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23860}
2018-07-05 15:46:28 +00:00
Gustaf Ullberg
51f4014acd AEC3: Slower adaptation of main filter
The main filter is adapted at a lower rate which reduces the risk of
diverging during double talk. The change yields notable transparency
improvements.

Bug: webrtc:9497
Change-Id: Ib23b7a4055d313dede535d2b65dc7e023a2db042
Reviewed-on: https://webrtc-review.googlesource.com/87300
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23858}
2018-07-05 14:37:27 +00:00
Karl Wiberg
918f50c5d1 Use absl::make_unique and absl::WrapUnique directly
Instead of going through our wrappers in ptr_util.h.

This CL was generated by the following script:

  git grep -l ptr_util | xargs perl -pi -e 's,#include "rtc_base/ptr_util.h",#include "absl/memory/memory.h",'
  git grep -l MakeUnique | xargs perl -pi -e 's,\b(rtc::)?MakeUnique\b,absl::make_unique,g'
  git grep -l WrapUnique | xargs perl -pi -e 's,\b(rtc::)?WrapUnique\b,absl::WrapUnique,g'
  git checkout -- rtc_base/ptr_util{.h,_unittest.cc}
  git cl format

Followed by manually adding dependencies on
//third_party/abseil-cpp/absl/memory until `gn check` stopped
complaining.

Bug: webrtc:9473
Change-Id: I89ccd363f070479b8c431eb2c3d404a46eaacc1c
Reviewed-on: https://webrtc-review.googlesource.com/86600
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23850}
2018-07-05 10:59:49 +00:00
Jesús de Vicente Peña
496cedfe56 AEC3: Reverberation model: Changes on the decay estimation.
In this CL we have introduced changes on the estimation of the decay involved in the exponential modeling of the reverberation. Specifically, the instantaneous ERLE has been tracked and used for adapting faster in the regions when the linear filter is performing well. Furthermore, the adaptation is just perform during render activity.


Change-Id: I974fd60e4e1a40a879660efaa24457ed940f77b4
Bug: webrtc:9479
Reviewed-on: https://webrtc-review.googlesource.com/86680
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23836}
2018-07-04 10:04:32 +00:00
Gustaf Ullberg
ec64217e56 AEC3: Simplified suppression gain calculation
This change simplifies the calculation of the suppression gains.
It also contains a new tuning of the suppressor.

The suppressor behavior is tuned by setting echo-to-nearend ratios
for when the suppressor is to be fully transparent and for when to
fully suppress. An echo-to-masker value determines when the signal
is masked by noise. These three values are specified for low and
high frequencies.

Change-Id: I108e83c8f2a35462085a3fabaebcc02fa3103607
Bug: webrtc:9482
Reviewed-on: https://webrtc-review.googlesource.com/86021
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23830}
2018-07-04 07:07:55 +00:00
Sam Zackrisson
46f858a626 Fix fuzzer-found overflow in AGC1
Much like https://bugs.chromium.org/p/chromium/issues/detail?id=855900,
the int32 gain table isn't always small enough for plain multiplication
with an int16.

This appears fixable through regular fixed-point arithmetic (multiply
out[i][n] by integer and fractional part of gain separately), but it's
less readable.

Bug: chromium:858989
Change-Id: Ie5aac25fd0cca4e51858cba69bde06c54a5d31bf
Reviewed-on: https://webrtc-review.googlesource.com/86602
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23815}
2018-07-03 09:56:34 +00:00
Alex Loiko
4d01146f16 Prepare AGC2 for analog gain changes.
1. Adds support for Reset calls in AGC2. The AGC will be reset during
   analog gain changes.
2. Allows AdaptiveModeLevelEstimator to return estimates > 0. This can
   happen if the signal gain is too high. It's needed for letting the
   analog AGC know that the gain is too high.

Bug: webrtc:7494
Change-Id: I38def17c21cc01c36aaea79a2401d8c2f289407b
Reviewed-on: https://webrtc-review.googlesource.com/79360
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23805}
2018-07-02 15:25:49 +00:00
Alex Loiko
64cb83bbd9 Flags and settings for AGC2 in AgcManagerDirect.
This CL adds two flags to audioproc_f. The flags control
AgcManagerDirect. The flags are
'--experimental_agc_agc2_level_estimator' and
'--experimental_agc_agc2_digital_adaptive'.

After this CL, the flags are be applied to AgcManagerDirect. The flags
have no effect in release-mode. They cause a crash in debug-mode.

In an upcoming CL, '--experimental_agc_agc2_level_estimator 1' will
replace the speech level estimation in ExperimentalAgc with that of
AGC2.

'--experimental_agc_agc2_digital_adaptive 1' will replace the digital
gain selection and application with that of AGC2.

These audioproc_f will activate both new settings:

./out/Target/audioproc_f --agc 1 --experimental_agc 1
--experimental_agc_agc2_digital_adaptive 1
--experimental_agc_agc2_level_estimator 1 --simulate_mic_gain 1
--simulated_mic_kind 2

See also https://webrtc-review.googlesource.com/c/src/+/79360

Bug: webrtc:7494
Change-Id: If0e65893dffdddb312e553787b8cedaf9a334323
Reviewed-on: https://webrtc-review.googlesource.com/86548
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23802}
2018-07-02 13:20:39 +00:00
Alex Loiko
5c71e74331 Add AGC1-compliant fake recording device.
The AGC submodule of APM changes analog gain. These gain changes are
typically ignored by the test tool audioproc_f.

There is an option of the test tool to take action on the gain
changes.  It's the '--simulate_mic_gain' option. The option converts
the analog gain to a digital gain. The digital gain is applied to the
capture stream.

This change adds a new simulated microphone kind. The new microphone
has a gain curve defined by
modules/audio_processing/agc/gain_map_internal.h. That gain curve
defines how AGC1 expects a microphone to behave.

Bug: webrtc:7494
Change-Id: Ifb3f54a8c6f8c001a711fa977f39f32413069780
Reviewed-on: https://webrtc-review.googlesource.com/86128
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23801}
2018-07-02 12:29:36 +00:00
Alex Loiko
c167673c4d Add more ApmDataDumper dumps to AGC.
We dump the compression level from AgcManagerDirect.

We use the same names and structure as in
GainControlForExperimentalAgc.

This is to get Apm dump file names to match in the upcoming AGC
changes: https://webrtc-review.googlesource.com/c/src/+/79360

TBR: alessiob@webrtc.org
Bug: webrtc:7494
Change-Id: I1e6260ea48ffc43f709e4b0c97f843ad9c3d1824
Reviewed-on: https://webrtc-review.googlesource.com/86546
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23800}
2018-07-02 11:00:13 +00:00
Alessio Bazzica
e0eda662ef Adding alessiob@ and minyue@ as owners of APM.
NOTRY=True

Bug: None
Change-Id: I690140661cf09e505a4e9e874912f05d83f14dcd
Reviewed-on: https://webrtc-review.googlesource.com/85284
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23797}
2018-07-02 07:45:31 +00:00
Jesús de Vicente Peña
2e79d2b398 AEC3: Misadjustment estimator of the linear filter.
In this work the performance of the linear filter is
estimated. The estimation aims at capture situations when the linear
filter is largely over-estimating the echo. In those circumstances,
the linear filter is scaled with the purpose of accelerating its
convergence.

Change-Id: I05ea3739d82838a6f08673432da92125c47943e0
Bug: webrtc:9466,chromium:857426
Reviewed-on: https://webrtc-review.googlesource.com/86133
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23789}
2018-06-29 15:05:14 +00:00
Per Åhgren
fc63c9e273 AEC3: Allow filter adaptation even though the estimated echo is saturated
This CL removes the constraint that freezes the filter adaptation
whenever the estimated echo or the prediction error is saturated. This
allows for much more rapid filter recovery in cases where the echo path
gain for some reason changes, such as when the analog AGC gain is
adjusted or the loudspeaker volume is changed.

TBR: devicentepena@webrtc.org
Bug: webrtc:9466,chromium:857426
Change-Id: Ic0b3b03f41f12e9a607aaadd2ee91cbaa16cac52
Reviewed-on: https://webrtc-review.googlesource.com/86124
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23775}
2018-06-28 22:45:18 +00:00
Gustaf Ullberg
6c618c7002 AEC3: Avoid entering non-linear mode when the filter is slightly diverged
This CL changes the behavior when the main filter diverges.
Instead of entering non-linear mode, the AEC continues to operate in
linear mode but estimates the residual echo differently. R2 is S2
scaled by a factor of 10.

Bug: chromium:857018,webrtc:9462
Change-Id: I41212efe164ad319cf38a163cdf9d3ea151e0997
Reviewed-on: https://webrtc-review.googlesource.com/85981
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23772}
2018-06-28 13:35:18 +00:00
Artem Titov
81f5197512 Fix pylint presubmit errors and warnings from untouched modules.
BUG=None

Change-Id: I619dab14875e19477beb8bfb566ed1f34009c025
Reviewed-on: https://webrtc-review.googlesource.com/85960
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23754}
2018-06-27 09:31:29 +00:00
Jesús de Vicente Peña
e58bd8a02b AEC3: Reverb modeling: Including the freq shape of the tails when modeling the reverberation
The frequency shape of the echo path has been included in the reverberation model.

Bug: webrtc:9454,chromium:856636
Change-Id: Id2bc3096df31e29328936f94fe965ed1883d70f7
Reviewed-on: https://webrtc-review.googlesource.com/85370
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23746}
2018-06-26 16:17:45 +00:00
Artem Titov
df3bcdbe88 Extract fft4g into separate build target
common_audio/fft4g.c is third party codem that have to be moved into
third_party folder, so to be able to do it at first we have to extract
it into separate target. It is extracted with corresponding header file
and will be moved in futher CL.

Bug: webrtc:8366
Change-Id: I586ca94d4e9242c23163b987fa334dfa705020ed
Reviewed-on: https://webrtc-review.googlesource.com/85372
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23742}
2018-06-26 13:39:25 +00:00
Sam Zackrisson
762289ed13 Fix overflow in digital AGC1
Bug: chromium:855900
Change-Id: I966d5d977cee2862f7c0dd07e35561e475269d20
Reviewed-on: https://webrtc-review.googlesource.com/85368
Reviewed-by: Alex Loiko <aleloi@google.com>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23737}
2018-06-26 10:31:09 +00:00
Sam Zackrisson
db38972eda Remove nonlinear beamformer API from APM
This CL removes the remaining beamformer parts from the APM.

Bug: webrtc:9402
Change-Id: I9ab2795bd2813d17166ed0925125257b82d98a74
Reviewed-on: https://webrtc-review.googlesource.com/83340
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23694}
2018-06-21 08:49:52 +00:00
Alex Loiko
db6af36979 Add RNN-VAD to AGC2.
* Move 'VadWithLevel' to AGC2 where it belongs.
* Remove the vectors from VadWithLevel. They were there to make it work
  with modules/audio_processing/vad, which we don't need any longer.
* Remove the vector handling from AGC2. It was spread out across
  AdaptiveDigitalGainApplier, AdaptiveAGC and their unit tests.
* Hack the RNN VAD into VadWithLevel. The main issue is the resampling.


Bug: webrtc:9076
Change-Id: I13056c985d0ec41269735150caf4aaeb6ff9281e
Reviewed-on: https://webrtc-review.googlesource.com/77364
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23688}
2018-06-20 15:04:06 +00:00
Mirko Bonadei
beb2d9813c Removing usage of //build/config/compiler:no_size_t_to_int_warning.
Bug: webrtc:9251, webrtc:1348
Change-Id: I76e52abbfab5666cad73044b49172a9799539108
Reviewed-on: https://webrtc-review.googlesource.com/84144
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23686}
2018-06-20 13:44:26 +00:00
Alex Loiko
80c0f06d63 Init GainControlImpl with correct lock.
GainControlImpl was inited with two refs to the APM capture lock. As a
result, it could modify member vars without holding the render
lock. The Process and Analyze calls are not affected, because they are
made from audio_processing_impl when APM holds both locks.

Bug: webrtc:9354
Change-Id: I814b69602280921dda9dc45ffcbddb38de4a3394
Reviewed-on: https://webrtc-review.googlesource.com/84182
Reviewed-by: Max Morin <maxmorin@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23677}
2018-06-20 07:51:19 +00:00
Yves Gerey
665174fdbb Reformat the WebRTC code base
Running clang-format with chromium's style guide.

The goal is n-fold:
 * providing consistency and readability (that's what code guidelines are for)
 * preventing noise with presubmit checks and git cl format
 * building on the previous point: making it easier to automatically fix format issues
 * you name it

Please consider using git-hyper-blame to ignore this commit.

Bug: webrtc:9340
Change-Id: I694567c4cdf8cee2860958cfe82bfaf25848bb87
Reviewed-on: https://webrtc-review.googlesource.com/81185
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23660}
2018-06-19 14:00:39 +00:00
Gustaf Ullberg
bbfcc703ad AEC3: Unittests for MovingAverage
Bug: webrtc:9420,chromium:853699
Change-Id: Ibeeca826bb35f0efa245f0dea1a567823ee80cc7
Reviewed-on: https://webrtc-review.googlesource.com/84124
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23658}
2018-06-19 12:45:10 +00:00
Gustaf Ullberg
8406c43795 AEC3: Average the spectrum of multiple nearend frames in the suppressor.
Reduce noise of the nearend spectrum estimation by averaging multiple
frames.

Bug: webrtc:9420,chromium:853699
Change-Id: Iad7e68b1209a369e263b2d892791943e42bfbb3f
Reviewed-on: https://webrtc-review.googlesource.com/83960
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23655}
2018-06-19 11:50:30 +00:00
Danil Chapovalov
db9f7ab9f9 Replace rtc::Optional with absl::optional in modules/audio processing
This is a no-op change because rtc::Optional is an alias to absl::optional

This CL generated by running script with parameter 'modules/audio_processing'

find $@ -type f \( -name \*.h -o -name \*.cc \) \
-exec sed -i 's|rtc::Optional|absl::optional|g' {} \+ \
-exec sed -i 's|rtc::nullopt|absl::nullopt|g' {} \+ \
-exec sed -i 's|#include "api/optional.h"|#include "absl/types/optional.h"|' {} \+

find $@ -type f -name BUILD.gn \
-exec sed -r -i 's|"(../)*api:optional"|"//third_party/abseil-cpp/absl/types:optional"|' {} \+;

git cl format

Bug: webrtc:9078
Change-Id: Id29f8de59dba704787c2c38a3d05c60827c181b0
Reviewed-on: https://webrtc-review.googlesource.com/83982
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23653}
2018-06-19 10:38:56 +00:00
Sam Zackrisson
af998e2fdc Remove non-API beamformer references
This removes beamformer references from audioproc_f, some non-beamformer tests, and a few other bits and bobs.
The beamformer is, after this, very decoupled from the remaining APM code.

Bug: webrtc:9402
Change-Id: Iaafc95517013d7a17723ef2329f17b5e09069bc9
Reviewed-on: https://webrtc-review.googlesource.com/83983
Reviewed-by: Minyue Li <minyue@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23649}
2018-06-19 08:29:24 +00:00
Sam Zackrisson
9394f6fda1 Stop using the beamformer inside APM
Removes the usage of an injected/enabled beamformer in APM, and marks
the API parts as deprecated.
Initialization and process calls are removed, and all enabled/disabled
flags are replaced by assuming no beamforming. Additionally, an AGC test
relying on the beamformer as a VAD is removed.

Bug: webrtc:9402
Change-Id: I0d3d0b9773da083ce43c28045db9a77278f59f95
Reviewed-on: https://webrtc-review.googlesource.com/83341
Reviewed-by: Minyue Li <minyue@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23643}
2018-06-18 13:18:13 +00:00
Sam Zackrisson
a6fc6362ed Add ivoc@ and saza@ to audio_processing OWNERS
NOTRY=True

Bug: None
Change-Id: Idab1a031254f527c732bcf939c991c6b17aabd74
Reviewed-on: https://webrtc-review.googlesource.com/83580
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23612}
2018-06-14 12:18:07 +00:00
Ivo Creusen
d1f970dc43 Change echo detector to scoped_refptr
The echo detector is currently stored as a unique_ptr, but when injecting an echo detector, a scoped_refptr makes more sense since the ownership will be shared.

Bug: webrtc:8732
Change-Id: I2180014acb84f1cd5c361864a444b7b6574520f5
Reviewed-on: https://webrtc-review.googlesource.com/83325
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23610}
2018-06-14 09:51:41 +00:00
Per Åhgren
aeb0a6475b AEC3: Increase the range of reported echo path delay metrics
TBR: gustaf@webrtc.org
Bug: webrtc:9375,chromium:850538
Change-Id: I037e2cfe24ee297b90b4f70b744f735e43015d92
Reviewed-on: https://webrtc-review.googlesource.com/81748
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23603}
2018-06-13 18:13:21 +00:00
Niels Möller
493c78a9dc Replace all use of rtc::Pathname in generator_unittest.cc.
Bug: webrtc:7345
Change-Id: Ic804fcfd2456e16a3f9e448677d0b7bc857822a8
Reviewed-on: https://webrtc-review.googlesource.com/80484
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23601}
2018-06-13 15:09:24 +00:00
Jesús de Vicente Peña
075cb2b2f7 AEC3: Changes to how the reverberation decay is applied.
In this work we introduce some changes on how the reverberation model for AEC3 is applied. Currently, the exponential modelling of the tails is applied over the linear echo estimates. That might result  in an overestimation of the reverberation tails under certain conditions. In this work, the reverberation model is instead applied over an estimate of the energies at the tails of the linear estimate.

Additionally, the stationary estimator is changed so it does not disable the aec immediately after a burst of activity.

Bug: webrtc:9384,webrtc:9400,chromium:852257
Change-Id: Ia486694ed326cfe231fc688877c0b9b6e2c450ff
Reviewed-on: https://webrtc-review.googlesource.com/82161
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23599}
2018-06-13 14:54:04 +00:00
Per Åhgren
fddaf7528a AEC3: Increase the look window in the delay estimator.
Bug: webrtc:9374,chromium:850525
Change-Id: I587cb7951acf8e5ec92d9941f1979ba2c9887876
Reviewed-on: https://webrtc-review.googlesource.com/81747
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23561}
2018-06-11 15:22:59 +00:00
Gustaf Ullberg
ed51a6e665 AEC3: Avoid static initializers
Bug: webrtc:9288,chromium:846615
Change-Id: I9df7f07454bdba45181972b7ed3dff77c370abb3
Reviewed-on: https://webrtc-review.googlesource.com/81750
Reviewed-by: Christian Fremerey <chfremer@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23538}
2018-06-07 18:13:01 +00:00
Per Åhgren
05d8ee1b3e AEC3: Delay stabilization after a delay change
This CL ensures that the linear-filter based refined delay is chosen to
match the delay that was detected by the delay estimator during the time
it takes for the linear filter to converge.

Bug: webrtc:9371,chromium:850451
Change-Id: Ib9cf532df0577ceca10a260d9d2deba5306f88bb
Reviewed-on: https://webrtc-review.googlesource.com/81682
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23537}
2018-06-07 14:35:55 +00:00
Per Åhgren
78ea818864 AEC3: Added filter preprocessing to avoid low frequency artefacts
This filter preprocess the time domain representation of the adaptive
linear filter to avoid low-frequency components causing issues in
the filter analysis.

Bug: webrtc:9343, chromium:848231
Change-Id: I40494959f1b76242a7c9f2a2fc85c2ad4af9e164
Reviewed-on: https://webrtc-review.googlesource.com/79142
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23536}
2018-06-07 13:35:40 +00:00
Gustaf Ullberg
f469b63d44 AEC3: Improved anti-aliasing filter for DSF 4
This change contains a new anti-aliasing filter for the delay estimator
for down-sampling factor 4. The new (elliptic) filter has a much wider
main lobe allowing for faster convergence.

Bug: webrtc:9288,chromium:846615
Change-Id: Id109974a59fe6f48c5e0ccc4f4e06c0d94c8bd03
Reviewed-on: https://webrtc-review.googlesource.com/81680
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23534}
2018-06-07 12:21:36 +00:00
Gustaf Ullberg
34c9f1252a AEC3: Move decimator filters to the new notation
Preparing for changing the filters of the decimator by moving the old
filters to the new zero, pole, gain notation.

Bug: webrtc:9288,chromium:846615
Change-Id: I2b01a2555d34617e0bf251c782703753f72cd56f
Reviewed-on: https://webrtc-review.googlesource.com/81189
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23528}
2018-06-07 08:09:17 +00:00
Gustaf Ullberg
c4b7f037b7 AEC3: Adjust active render limits for downsampling factor 8
The signal used for delay estimation at downsampling factor 8 is bandpass
filtered and contains less energy than for other downsampling factors.
This CL adjusts the energy threshold used for determining if there is enough
farend activity to update the matched filters in the delay estimator.
Only downsampling factor 8 is affected.

Bug: webrtc:9288,chromium:846615
Change-Id: I6f38f5609a31e7a08e60571ac75ea75c9962e026
Reviewed-on: https://webrtc-review.googlesource.com/80443
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23486}
2018-06-01 10:07:16 +00:00
Gustaf Ullberg
435187d18d AEC3: CascadedBiQuadFilter can run different filters in cascade
CascadedBiQuadFilter can run identical filters multiple times. This CL
allows the use of different filters in each step. This enables the use
of more elaborate filters. The filters are defined by zeros, poles and
gains.

The 'old' way of initializing CascadedBiQuadFilter with a transfer
function and number of filters is left intact.

Bug: webrtc:9288,chromium:846615
Change-Id: Ie4a5b98eba044415571cdcac087b20870a0b5d33
Reviewed-on: https://webrtc-review.googlesource.com/80060
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23473}
2018-05-31 13:45:15 +00:00
Per Åhgren
e3ca991770 AEC3: Added a mode to properly utilize highly linear setups
Bug: webrtc:9321
Change-Id: I9c1abbd6b1daa1ecff041633318edfb8a011e9c0
Reviewed-on: https://webrtc-review.googlesource.com/79480
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23423}
2018-05-29 07:59:03 +00:00
Per Åhgren
c5efb0c080 Added an audioproc option to not report the stream delay
Bug: webrtc:9316
Change-Id: If7a20bbac998e9a779579650f3eb9019f974e9a8
Reviewed-on: https://webrtc-review.googlesource.com/79141
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23415}
2018-05-28 13:22:29 +00:00
Jesús de Vicente Peña
dd09287514 AEC3: Gain limiter: Improving the behavior of the gain limiter.
In this work, we change the behavior of the gain limiter so it also looks at the energy
 on farend around the default delay for deciding the suppression gain
that should be applied at the initial portion of the call.

Bug: webrtc:9311,chromium:846724
Change-Id: I0b777cedbbd7fd689e72070f72237296ce120d3c
Reviewed-on: https://webrtc-review.googlesource.com/78960
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23400}
2018-05-25 15:49:38 +00:00
Gustaf Ullberg
78b1c4a487 AEC3: Delay estimator uses bandpass filtered signal with downsampling factor 8
Letting the delay estimator operate at a sampling frequency of 2 kHz
with audio between 0 and 1 kHz makes it sensitive to noisy environments.
This CL bandpass filters the 16 kHz signal before downsampling to 2 kHz
in a way that the downsampled 2 kHz signal contains audio between 1 and
2 kHz. It also sets downsampling factor 8 as default which significantly
reduces computational complexity.

Bug: webrtc:9288,chromium:846615
Change-Id: Iaf67898a1a14326cd61bb7f81c14d3c12a697c8d
Reviewed-on: https://webrtc-review.googlesource.com/78703
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23395}
2018-05-25 09:31:38 +00:00
Niels Möller
14682a3c5f Delete macro RTC_DEFINE_STATIC_LOCAL.
Code using the macro change to a plain declaration+init of a local
variable.

Also delete includes of <stdint.h> and <stddef.h> from basictypes.h.

Bug: webrtc:6853
Change-Id: I5ffceb449c1bf8f5badb595d5a343a47b0c6deae
Reviewed-on: https://webrtc-review.googlesource.com/78460
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23377}
2018-05-24 08:10:35 +00:00
Gustaf Ullberg
43c707ada5 AEC3: Debug dump of render decimator input/output
Bug: webrtc:9288
Change-Id: Ic270bab173e4681a102dca93a5dc8c61caa981a0
Reviewed-on: https://webrtc-review.googlesource.com/78285
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23351}
2018-05-22 15:13:59 +00:00
Gustaf Ullberg
41c11e4cad AEC3: Rounding of estimated call skew
This CL fixes the rounding of the estimated average call skew. Before it
was rounded down (toward INT_MIN). Now it is rounded to the nearest integer.
This avoids unnecessary fluctuations of the estimated call skew (and
unnecessary resets).

Bug: webrtc:9283,chromium:888042
Change-Id: Id5b3c593f812f5f9fd3dcdafb7e388a6ef1ac153
Reviewed-on: https://webrtc-review.googlesource.com/77684
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23338}
2018-05-22 08:15:58 +00:00
Niels Möller
65ec0fc81e Delete unneeded includes of basictypes.h.
This is a kitchen-sink header, some pieces should be moved to
byteorder.h, the rest likely deleted.

Delete most includes of basictypes.h. In leaf headers,
include stddef.h and stdint.h explicitly where needed.

Bug: webrtc:6853
Change-Id: Ibc809936a8f94d418e4eb650da1e89c1b9142073
Reviewed-on: https://webrtc-review.googlesource.com/77721
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23333}
2018-05-21 19:35:08 +00:00
Jesús de Vicente Peña
666becad58 AEC3: ERLE improvements
The ERLE computation was improved by two means:
- The update function was always called and just parts of the internal code reacts to the converged filter flag
- When computing the ERLE, the ratio of energies is now computed using more points and, therefore, a more robust estimation is achieved.

Bug: webrtc:9284
Change-Id: Ie4f871f19cfad1a13741352ddd7b0a27ad6c3fb6
Reviewed-on: https://webrtc-review.googlesource.com/77767
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23329}
2018-05-21 15:11:06 +00:00
Gustaf Ullberg
6bf5a0d5b6 AEC3: High-pass filter delay estimator signals
This CL applies a high pass filter to the delay estimator signals which
improves the adaptation of the matched filters in noisy environments.
This results in faster delay estimation.

Bug: webrtc:9288
Change-Id: I8ffe5442eab7ac2f10a7ba236b08a0f07ec90645
Reviewed-on: https://webrtc-review.googlesource.com/77725
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23308}
2018-05-18 14:33:26 +00:00
Per Åhgren
2d9a3b1aba Increasing the API call skew hysteresis limit in AEC3
This CL increases the allowed variations in the API call skew limit in
AEC3.

Bug: webrtc:9283,chromium:888042
Change-Id: Ib5e784c6f3dcf1bf3a2cbfe2b1559953db9227a8
Reviewed-on: https://webrtc-review.googlesource.com/77430
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23305}
2018-05-18 13:39:26 +00:00
Per Åhgren
90e3fbdd37 Activating the AEC3 audibility improvements functionality
This CL turns on the previously implemented AEC3 audibility
improvements, which before has been off by default.

Bug: webrtc:9193,chromium:836790
Change-Id: Ibcd057ba5dd002718d62fd83db33d01d9563b8ea
Reviewed-on: https://webrtc-review.googlesource.com/77123
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@{#23265}
2018-05-16 16:47:16 +00:00
Alessio Bazzica
2f1e6d4920 AGC2 RNN VAD: Polishing.
- Code clean: exploiting the recently added ArrayView ctor for
  std::array
- Pitch search internal unit test: long const arrays moved to
  a resource file
- Minor changes

Bug: webrtc:9076
Change-Id: Iaf30753f2498b4568860d72e0b81f5351235692f
TBR: aleloi@webrtc.org
Reviewed-on: https://webrtc-review.googlesource.com/76920
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23248}
2018-05-15 16:41:02 +00:00
Alex Loiko
1aec594018 Merge :audio_processing and :aec_dump_interface.
Merges the two targets in modules/audio_processing
and removes some redundant code. This enables not writing
a bunch of redundant code in
https://webrtc-review.googlesource.com/c/src/+/70502

':audio_processing' did depend on ':aec_dump_interface'.
'modules/audio_processing/aec_dump' did depend on
'aec_dump_interface' but not ':audio_processing'.

Having the AecDump implementation not depending on
'audio_processing' allows to have faster compilation time and
reduces the dependencies. However, maintaining such a decoupling
makes APM and AecDump client code more complex.

NOTRY=true # want this in and 'ios_api_framework' seems stuck.

Bug: webrtc:7404
Change-Id: I75a5f234591014ac42d52bc1a36526072f5be89c
Reviewed-on: https://webrtc-review.googlesource.com/76603
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23244}
2018-05-15 14:22:52 +00:00
Alex Loiko
73ec01977b Add RuntimeSettings to CustomProcessing.
CustomProcessing is the interface to injectable audio processing
submodules to AudioProcessing. This CL makes it possible to set
runtime settings on the injected render processing component.

Note that the current runtime setting handling happens on the capture
thread. Therefore, we add another SwapQueue to communicate with the
render thread.

Bug: webrtc:9138, webrtc:9262
Change-Id: I665ce2d83a2b35ca8b25cca813d2cef7bd0ba911
Reviewed-on: https://webrtc-review.googlesource.com/76123
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23236}
2018-05-15 10:03:25 +00:00
Alessio Bazzica
beb1d34729 AGC2 RNN VAD: Feature extraction.
This CL finalizes the feature extraction part for the RNN VAD adding
a class that combines a high-pass filter, LP residual computation,
pitch estimation and spectral features extraction.

This CL also includes a minor refactoring of the pitch estimation
library.

Bug: webrtc:9076
Change-Id: I918b9e143bc6dd2bf508a891446067258a68a777
Reviewed-on: https://webrtc-review.googlesource.com/75504
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23235}
2018-05-15 10:02:20 +00:00
Alex Loiko
f55babc298 Add namespace 'webrtc' to AudioFrameView.
Mini-change: add 'webrtc' namespace. The template class AudioFrameView
got declared in the global namespace by mistake. (My fault). Now
fixing.

Bug: webrtc:9262.
Change-Id: I6f2b4ab1ccdb223505e7181b8e6f12f5f23b3684
Reviewed-on: https://webrtc-review.googlesource.com/76140
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23215}
2018-05-14 12:33:49 +00:00
Alessio Bazzica
bc0b37c08a AGC2 RNN VAD: Spectral features extraction.
This CL defines SpectralFeaturesExtractor which is responsible for
computing the spectral features used as input for the RNN.

Bug: webrtc:9076
Change-Id: I5e1396b89eca9c13bb268e8419a16436a9c3450f
Reviewed-on: https://webrtc-review.googlesource.com/73760
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23206}
2018-05-11 21:15:36 +00:00
Per Åhgren
d18e87edd4 Correcting the AEC3 transparent mode behavior avoid incorrect activation
This CL adds robustness to avoid the AEC3 transparent mode to be
incorrectly activated when
-there is strong near-end noise
-there is only low-level nearend activity.

Bug: webrtc:9256,chromium:841193
Change-Id: I26c2759d163914eb85dc3d863da8acbf28cbb88d
Reviewed-on: https://webrtc-review.googlesource.com/75511
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23191}
2018-05-09 12:36:41 +00:00
Per Åhgren
ced31ba1cf Correcting the usage of the estimated echo path gain in AEC3
This CL corrects the usage of the estimated echo path gain to not be
hardcoded to 1. In order to retain the tuned behavior, the CL for now
maintains the former behavior in the code.

Bug: webrtc:9255,chromium:851187
Change-Id: I7f91c72e476680a8a854c22b74b1771fae446110
Reviewed-on: https://webrtc-review.googlesource.com/75510
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23190}
2018-05-09 12:35:31 +00:00
Per Åhgren
e05c43cc39 Remove the headroom and delay estimation feedback loop in AEC3
This CL ensures that the external audio buffer delay is correctly used
by removing the applied headroom and avoiding that the delay estimation
feedback fromt the echo remover overrules the external delay
information.

Bug: webrtc:9241,chromium:839860
Change-Id: I53cc78ace34a71994ab24a3b552f29979e2aae78
Reviewed-on: https://webrtc-review.googlesource.com/75513
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23189}
2018-05-09 12:34:26 +00:00
Alex Loiko
0520b0eb7b FFT-based auto correlation.
During pitch search in the RNN VAD, we calculate auto
correlation. Before this CL, we computed kNumInvertedLags12kHz=147 dot
products of vectors with kBufSize12kHz-kMaxPitch12kHz=240
elements. This was the most time consuming step of the new VAD.

This CL makes the computation happen in frequency domain. Profiling
shows a 3x speed increase. In future, we can try using a more efficient
FFT and to reduce the FFT length to some of e.g. 400, 405, 432.

# For minimal Clang plugin check change.
TBR: kwiberg@webrtc.org

Bug: webrtc:9076
Change-Id: I688251a415869d53175a37f390f441d4e035d954
Reviewed-on: https://webrtc-review.googlesource.com/73366
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23171}
2018-05-08 12:07:42 +00:00
Alessio Bazzica
0bd0a3fe4c AGC2 RNN VAD: Spectral features internal API.
This CL adds helper functions to be used for the spectral features
computation. Namely, it includes the following:
- band boundaries (frequency to FFT coeffcient index)
- band energy coefficients
- log band energy coefficients
- fixed size DCT table and computation

Bug: webrtc:9076
Change-Id: I03a8799b226d986bc1e37cefd0c3039f94b5592a
Reviewed-on: https://webrtc-review.googlesource.com/73687
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23170}
2018-05-08 11:52:32 +00:00
Alessio Bazzica
2284c56670 Adding double braces for array initialization.
TBR=maxmorin@webrtc.org

Bug: webrtc:9076
Change-Id: Ic341ef7437392dd5d6141147a2412ec54204ae10
Reviewed-on: https://webrtc-review.googlesource.com/75121
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Max Morin <maxmorin@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23164}
2018-05-08 09:15:16 +00:00
Alessio Bazzica
0424c19fda AGC2 RNN VAD: FFT utility lib
BandAnalysisFft class that wraps the FFT library, makes it easy to change
FFT library, applies windowing function and owns the FFT input buffer.

Bug: webrtc:9076
Change-Id: I9e7ed587ae263b906e04a66bf8c06eaae64daf19
Reviewed-on: https://webrtc-review.googlesource.com/72900
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23150}
2018-05-07 16:16:28 +00:00
Per Åhgren
0dfd3721ef Avoid enforcing that the stream delay is reported for AEC3
Bug: webrtc:9243
Change-Id: I0703a77d049d20f8dbc547d149f102f7fbb3e017
Reviewed-on: https://webrtc-review.googlesource.com/74701
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23147}
2018-05-07 14:44:38 +00:00
Per Åhgren
9ad845d2ab Soften the AEC3 transparent mode to handle broken headsets
This CL softens the effect of the AEC3 transparent mode to also handle
headsets that leak low-level echoes in a nonlinear way.
This is handled by reintroducing the limit in the echo path gain for the
nonlinear mode. Due to recent improvements in echo suppressor behavior
this is now possible to do with a limited impact on the near-end speech.

Bug: webrtc:9246,chromium:840347
Change-Id: I0ca5157160d1884ba93b962323b56016756986d3
Reviewed-on: https://webrtc-review.googlesource.com/74703
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23145}
2018-05-07 13:52:08 +00:00
Gustaf Ullberg
623d281792 Correcting the use of externally reported delay in AEC3
Externally reported delay affects internal delay of the render delay buffer.

Bug: webrtc:9241,chromium:839860
Change-Id: Ia4e67eaea739e732dd6dcfec343dd7ee37ef883f
Reviewed-on: https://webrtc-review.googlesource.com/74704
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23144}
2018-05-07 13:49:28 +00:00
Alessio Bazzica
d8d02147d9 AGC2 Bi-Quad filter: separate target and unit test.
Adding a build target for the bi-qaud filter to make it available for
the RNN VAD of AGC2. Also adding a unit test to test the computation
both in-place and not in-place while comparing the produced output to
that of scipy.signal.

Bug: webrtc:9076
Change-Id: I16176a477ee4b81bb1e090c4906c3a9948ad2772
Reviewed-on: https://webrtc-review.googlesource.com/74220
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23141}
2018-05-07 12:22:54 +00:00
Alessio Bazzica
a5b903833f Reland "Reland "AGC2 RNN VAD: Recurrent Neural Network impl""
This reverts commit 3c9f47434f.

Reason for revert: downstream projects fixed

Original change's description:
> Revert "Reland "AGC2 RNN VAD: Recurrent Neural Network impl""
> 
> This reverts commit e0bba68ede.
> 
> Reason for revert: <INSERT REASONING HERE>
> 
> Original change's description:
> > Reland "AGC2 RNN VAD: Recurrent Neural Network impl"
> > 
> > This reverts commit 97e349ace7.
> > 
> > Reason for revert: downstream projects fixed
> > 
> > Original change's description:
> > > Revert "AGC2 RNN VAD: Recurrent Neural Network impl"
> > > 
> > > This reverts commit 2491cb7382.
> > > 
> > > Reason for revert: broke internal build
> > > 
> > > Original change's description:
> > > > AGC2 RNN VAD: Recurrent Neural Network impl
> > > > 
> > > > RNN implementation for the AGC2 VAD that includes a fully connected
> > > > layer and a gated recurrent unit layer.
> > > > 
> > > > Bug: webrtc:9076
> > > > Change-Id: Ibb8b0b4e9213f09eb9dbe118bbdc94d7e8e4f91b
> > > > Reviewed-on: https://webrtc-review.googlesource.com/72060
> > > > Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
> > > > Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> > > > Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
> > > > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > > > Cr-Commit-Position: refs/heads/master@{#23101}
> > > 
> > > TBR=phoglund@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org
> > > 
> > > Change-Id: Ic311c4b7d79094e959d3a2c4a53c398f34c954e2
> > > No-Presubmit: true
> > > No-Tree-Checks: true
> > > No-Try: true
> > > Bug: webrtc:9076
> > > Reviewed-on: https://webrtc-review.googlesource.com/74200
> > > Reviewed-by: Sam Zackrisson <saza@webrtc.org>
> > > Commit-Queue: Sam Zackrisson <saza@webrtc.org>
> > > Cr-Commit-Position: refs/heads/master@{#23103}
> > 
> > TBR=phoglund@webrtc.org,saza@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org
> > 
> > Change-Id: I0c7f8e0f59be926322d05b1da1d4d19c0777dab2
> > No-Presubmit: true
> > No-Tree-Checks: true
> > No-Try: true
> > Bug: webrtc:9076
> > Reviewed-on: https://webrtc-review.googlesource.com/74460
> > Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#23113}
> 
> TBR=phoglund@webrtc.org,saza@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org
> 
> Change-Id: I3985a6d38df1d4438a50d031bc9f6cf41eb83121
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:9076
> Reviewed-on: https://webrtc-review.googlesource.com/74560
> Reviewed-by: Sam Zackrisson <saza@webrtc.org>
> Commit-Queue: Sam Zackrisson <saza@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23117}

TBR=phoglund@webrtc.org,saza@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org

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

Bug: webrtc:9076
Change-Id: I4d81786837017d4daf0dbb1218306795b977ade5
Reviewed-on: https://webrtc-review.googlesource.com/74760
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23138}
2018-05-07 11:13:14 +00:00
Gustaf Ullberg
a49eacb30a AEC3: External delay - Fix mismatch in time units
Fixes a confusion of time units (milliseconds vs blocks) of externally
reported audio delay. This fix reduces the risk of echo in the beginning
of a call.

Bug: webrtc:9241,chromium:839860
Change-Id: I534cc15d6b215a5881ae46759f573a56871170a3
Reviewed-on: https://webrtc-review.googlesource.com/74589
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23128}
2018-05-04 16:52:24 +00:00
Sam Zackrisson
3c9f47434f Revert "Reland "AGC2 RNN VAD: Recurrent Neural Network impl""
This reverts commit e0bba68ede.

Reason for revert: <INSERT REASONING HERE>

Original change's description:
> Reland "AGC2 RNN VAD: Recurrent Neural Network impl"
> 
> This reverts commit 97e349ace7.
> 
> Reason for revert: downstream projects fixed
> 
> Original change's description:
> > Revert "AGC2 RNN VAD: Recurrent Neural Network impl"
> > 
> > This reverts commit 2491cb7382.
> > 
> > Reason for revert: broke internal build
> > 
> > Original change's description:
> > > AGC2 RNN VAD: Recurrent Neural Network impl
> > > 
> > > RNN implementation for the AGC2 VAD that includes a fully connected
> > > layer and a gated recurrent unit layer.
> > > 
> > > Bug: webrtc:9076
> > > Change-Id: Ibb8b0b4e9213f09eb9dbe118bbdc94d7e8e4f91b
> > > Reviewed-on: https://webrtc-review.googlesource.com/72060
> > > Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
> > > Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> > > Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
> > > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > > Cr-Commit-Position: refs/heads/master@{#23101}
> > 
> > TBR=phoglund@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org
> > 
> > Change-Id: Ic311c4b7d79094e959d3a2c4a53c398f34c954e2
> > No-Presubmit: true
> > No-Tree-Checks: true
> > No-Try: true
> > Bug: webrtc:9076
> > Reviewed-on: https://webrtc-review.googlesource.com/74200
> > Reviewed-by: Sam Zackrisson <saza@webrtc.org>
> > Commit-Queue: Sam Zackrisson <saza@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#23103}
> 
> TBR=phoglund@webrtc.org,saza@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org
> 
> Change-Id: I0c7f8e0f59be926322d05b1da1d4d19c0777dab2
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:9076
> Reviewed-on: https://webrtc-review.googlesource.com/74460
> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23113}

TBR=phoglund@webrtc.org,saza@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org

Change-Id: I3985a6d38df1d4438a50d031bc9f6cf41eb83121
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9076
Reviewed-on: https://webrtc-review.googlesource.com/74560
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23117}
2018-05-04 11:52:26 +00:00
Gustaf Ullberg
0e6375e78b AEC3: Transparency improvements to the suppressor
This CL contains changes to the echo suppressor that improves the
transparency of AEC3.

- The comfort noise level is used as masker and the masking threshold is
increased.
- Suppression gains are allowed to increase more rapidly.
- Suppression gains decrease slower in the lower frequencies after strong
nearend.

Change-Id: I7adf31ed90b0e007072191f40439f27c3b0bccf2
Bug: webrtc:9230,chromium:839379
Reviewed-on: https://webrtc-review.googlesource.com/73680
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23115}
2018-05-04 11:02:14 +00:00
Alessio Bazzica
e0bba68ede Reland "AGC2 RNN VAD: Recurrent Neural Network impl"
This reverts commit 97e349ace7.

Reason for revert: downstream projects fixed

Original change's description:
> Revert "AGC2 RNN VAD: Recurrent Neural Network impl"
> 
> This reverts commit 2491cb7382.
> 
> Reason for revert: broke internal build
> 
> Original change's description:
> > AGC2 RNN VAD: Recurrent Neural Network impl
> > 
> > RNN implementation for the AGC2 VAD that includes a fully connected
> > layer and a gated recurrent unit layer.
> > 
> > Bug: webrtc:9076
> > Change-Id: Ibb8b0b4e9213f09eb9dbe118bbdc94d7e8e4f91b
> > Reviewed-on: https://webrtc-review.googlesource.com/72060
> > Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
> > Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> > Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
> > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#23101}
> 
> TBR=phoglund@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org
> 
> Change-Id: Ic311c4b7d79094e959d3a2c4a53c398f34c954e2
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:9076
> Reviewed-on: https://webrtc-review.googlesource.com/74200
> Reviewed-by: Sam Zackrisson <saza@webrtc.org>
> Commit-Queue: Sam Zackrisson <saza@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23103}

TBR=phoglund@webrtc.org,saza@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org

Change-Id: I0c7f8e0f59be926322d05b1da1d4d19c0777dab2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9076
Reviewed-on: https://webrtc-review.googlesource.com/74460
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23113}
2018-05-04 09:33:25 +00:00
Jesús de Vicente Peña
65ddf07219 AEC3: not applying noise gating when using the stationarity properties of the render signal
Bug: webrtc:9193,chromium:836790
Change-Id: I87ded1d33869037420c435155bd084f6fc3efdb0
Reviewed-on: https://webrtc-review.googlesource.com/73740
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23111}
2018-05-04 09:14:24 +00:00
Karl Wiberg
7ba22b8eea Break out the part of the iSAC codec that's used for Voice Activity Detection
The audio processing code is using parts of the iSAC codec to do voice
activity detection (VAD), but it's undesirable for it to pull in the
entire iSAC codec as a dependency. So this CL factors out the parts of
iSAC that's needed for VAD to a separate build target.

Bug: webrtc:8396
Change-Id: I884e25d8fd0bc815fca664352b0573b4b173880e
Reviewed-on: https://webrtc-review.googlesource.com/69640
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23110}
2018-05-04 08:53:34 +00:00
Sam Zackrisson
97e349ace7 Revert "AGC2 RNN VAD: Recurrent Neural Network impl"
This reverts commit 2491cb7382.

Reason for revert: broke internal build

Original change's description:
> AGC2 RNN VAD: Recurrent Neural Network impl
> 
> RNN implementation for the AGC2 VAD that includes a fully connected
> layer and a gated recurrent unit layer.
> 
> Bug: webrtc:9076
> Change-Id: Ibb8b0b4e9213f09eb9dbe118bbdc94d7e8e4f91b
> Reviewed-on: https://webrtc-review.googlesource.com/72060
> Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
> Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23101}

TBR=phoglund@webrtc.org,alessiob@webrtc.org,aleloi@webrtc.org,ivoc@webrtc.org

Change-Id: Ic311c4b7d79094e959d3a2c4a53c398f34c954e2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9076
Reviewed-on: https://webrtc-review.googlesource.com/74200
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23103}
2018-05-03 13:49:22 +00:00
Alessio Bazzica
2491cb7382 AGC2 RNN VAD: Recurrent Neural Network impl
RNN implementation for the AGC2 VAD that includes a fully connected
layer and a gated recurrent unit layer.

Bug: webrtc:9076
Change-Id: Ibb8b0b4e9213f09eb9dbe118bbdc94d7e8e4f91b
Reviewed-on: https://webrtc-review.googlesource.com/72060
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23101}
2018-05-03 13:05:31 +00:00
Jesús de Vicente Peña
2f2633d90c AEC3: Audility: Avoid the initialization of the noise estimator in pure zeroes signals at the render.
Bug: webrtc:9193,chromium:836790
Change-Id: Ic162dd72947f1d075b55df6725a17b66c782930a
Reviewed-on: https://webrtc-review.googlesource.com/73200
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23075}
2018-05-02 10:19:46 +00:00
Alessio Bazzica
f22550175b AGC2 RNN VAD: Pitch Search
Functions to estimate pitch period and gain.

Bug: webrtc:9076
Change-Id: Icfe9430dcae11bdb96165c5bfe6e2b1d3bf848ab
Reviewed-on: https://webrtc-review.googlesource.com/70382
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23066}
2018-04-30 10:20:39 +00:00
Jesús de Vicente Peña
9558192711 AEC3: Removing the need of a buffer for the stationarity estimator of the render signal.
Change-Id: I6983e1d8bdd048a5d92209e3023c687f82d383d5

Bug: webrtc:9193,chromium:836790
Change-Id: I6983e1d8bdd048a5d92209e3023c687f82d383d5
Reviewed-on: https://webrtc-review.googlesource.com/72760
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23065}
2018-04-30 09:03:19 +00:00
Per Åhgren
658ad8816b Removed the updating of the padding data buffer in the AEC3 FFT
This CL removes the updating of the buffered data used to to pad the
64 sample blocks to 128 samples FFTs. As that padding was used
incorrectly in one place this resolves an important issue.


Bug: webrtc:9159,chromium:833801,webrtc:9206
Change-Id: Ie6830878ebec6130b61d4e7e3169357f2e253073
Reviewed-on: https://webrtc-review.googlesource.com/73240
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23059}
2018-04-27 19:26:03 +00:00
Per Åhgren
169c7fd521 Use windowed, data padded, FFTs when computing the AEC3 suppressor gain
This CL changes the way the suppressor gain is computed in AEC3 in that
the FFTs used are padded with data and windowed with a Hanning-style
window.
This gives better FFT accuracy, an behavior matching the suppressor
gain application, and also results in one less FFT operation.

Bug: webrtc:9204,chromium:837563
Change-Id: I612676c389cb76a3130966a9b596ff3f44d21863
Reviewed-on: https://webrtc-review.googlesource.com/73141
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23057}
2018-04-27 14:47:56 +00:00
Alex Loiko
95141d91d8 Set a positive initial gain in the Adaptive Digital GC.
If the adaptive gain is too low, we raise it slowly and only during
speech.

The CL gives better behavior at the start of a call. If the gain is too
high, the fixed-digital limits it. The gain is also quickly reduced by
the AdaptiveGainApplier.

Bug: webrtc:7494
Change-Id: I683f1e3e463cddec2d91f6c7f15c73e744430034
Reviewed-on: https://webrtc-review.googlesource.com/71484
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23053}
2018-04-27 09:05:25 +00:00
Gustaf Ullberg
216af841ad Add debug data dumping to the AEC3 suppressor
Bug: webrtc:8671
Change-Id: Ia4f96fc247335bdf19620446559c21f16abd6682
Reviewed-on: https://webrtc-review.googlesource.com/72700
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23051}
2018-04-27 07:45:45 +00:00
Per Åhgren
280a31fc30 Revert "Making the delay estimator more robust to noisy nearends and low echoes"
This reverts commit b04e5cae08.

Reason for revert: The reason for the revert is that some scenarios were detected where this caused the delay estimation to occur too slowly.

Original change's description:
> Making the delay estimator more robust to noisy nearends and low echoes
> 
> This CL reduces the delay estimator step size to make it react better in
> scenarios where the environment is noisy, or the echo level is fairly
> low.
> 
> Bug: webrtc:9177,chromium:835281
> Change-Id: I482d898c91eddc497e1284ee500d26df21a0574a
> Reviewed-on: https://webrtc-review.googlesource.com/71486
> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
> Commit-Queue: Per Åhgren <peah@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22990}

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

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

Bug: webrtc:9177, chromium:835281
Change-Id: I33e09ebfed8ad8330419e554f482c956608befce
Reviewed-on: https://webrtc-review.googlesource.com/72843
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Oleh Prypin <oprypin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23042}
2018-04-26 16:32:07 +00:00
Gustaf Ullberg
0cb4a25e43 Apply upper gain limit after coherence gains in AEC3
This CL makes sure that the coherence-based gains are affected by the
upper gain limit during call start-up and after resets.

Bug: webrtc:9159,chromium:833801
Change-Id: I93fdd173b6e11ea861d0e01e12c048ec0a91db70
Reviewed-on: https://webrtc-review.googlesource.com/72841
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23039}
2018-04-26 15:43:27 +00:00
Jesús de Vicente Peña
dc872b6be1 AEC3: Audibility: improvements on the initial noise estimation
Bug: webrtc:9193,chromium:836790
Change-Id: I589082a18a4a5d1ba5abc170b6cf49d1f545b6cc
Reviewed-on: https://webrtc-review.googlesource.com/72480
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23027}
2018-04-25 16:19:43 +00:00
Jesús de Vicente Peña
d5cb477576 AEC3: Audibility improvements
This CL is created from a work initiated at https://webrtc-review.googlesource.com/c/src/+/61160

The purpose of this work is to improve the performance of the echo canceler (AEC3) when the farend signal contains stationary noises:
- An stationarity estimator of the farend signal has been added for detecting the portions of the farend signal that are pure noise.
- When the echo canceler deals with a portion of the signal that contains basically noise, the echo suppressor is able to back-off and avoid the fading of the nearend speech.

Change-Id: Id4b87fc59f4765bf1fca36d1cab39a49aabe104a
Bug: webrtc:9193,chromium:836790
Reviewed-on: https://webrtc-review.googlesource.com/64141
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23024}
2018-04-25 13:52:03 +00:00
Gustaf Ullberg
5bb98971ce Remove attenuation of narrow banded peaks
The code that attenuates narrow banded echo peaks in low frequencies
is removed as it affects transparency negatively.

Bug: webrtc:9192,chromium:836729
Change-Id: Ib90ce6a3db0a75e8d69bdca432e1f8f8bfbbd988
Reviewed-on: https://webrtc-review.googlesource.com/72380
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23022}
2018-04-25 11:51:23 +00:00
Per Åhgren
47d7fbd8fe Reuse the AEC2 coherence-based gain for the lower bands in AEC3.
This CL overrides the power-based suppressor gain decision with
a coherence based descision for the cases when that indicates a
higher suppressor gain.

Bug: webrtc:9159,chromium:833801
Change-Id: I0e7d82ac1b8c70ffe9d45907559bb14b1b849d71
Reviewed-on: https://webrtc-review.googlesource.com/71660
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22997}
2018-04-24 11:24:44 +00:00
Per Åhgren
882477f19d Corrected the counter for the filter constraint when the filter size changes
Bug: chromium:834875
Change-Id: I036fe34eef894a8911a4d561fe5b671a8f98b718
Reviewed-on: https://webrtc-review.googlesource.com/71820
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22992}
2018-04-24 09:02:34 +00:00
Per Åhgren
b04e5cae08 Making the delay estimator more robust to noisy nearends and low echoes
This CL reduces the delay estimator step size to make it react better in
scenarios where the environment is noisy, or the echo level is fairly
low.

Bug: webrtc:9177,chromium:835281
Change-Id: I482d898c91eddc497e1284ee500d26df21a0574a
Reviewed-on: https://webrtc-review.googlesource.com/71486
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22990}
2018-04-24 00:53:33 +00:00
Karl Wiberg
bb23c838f5 GN hack to tag targets as poisonous (and use it with audio codecs)
Only specially taggged targets may transitively depend on poisonous
targets. We first apply it to audio codecs.

This makes it much clearer exactly what parts of the code still have
dependencies on the audio codecs (and we want to eventually get rid of
pretty much all of them).

Bug: webrtc:8396, webrtc:9121
Change-Id: Iba5c2e806c702b5cfe881022674705f647896d43
Reviewed-on: https://webrtc-review.googlesource.com/69520
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22979}
2018-04-23 13:41:47 +00:00
Alessio Bazzica
33444dc835 APM pre-gain sub-module: code improvements.
- No need to have a unique ptr for the swap queue
- Remove default case from the switch in
  AudioProcessingImpl::HandleRuntimeSettings()

Bug: webrtc:9138
Change-Id: I346ba1db6510b5caa637510298b67ead07197b81
Reviewed-on: https://webrtc-review.googlesource.com/71164
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22958}
2018-04-20 12:53:53 +00:00
Alessio Bazzica
e63d38ba34 AGC2 RNN VAD: Linear Prediction Residual
Functions to estimate the inverse filter via LPC and compute the LP
residual applying the inverse filter.

This CL also includes test utilities, in particular BinaryFileReader,
used to read chunks of data and optionally cast them on the fly, and
Create*Reader() functions to read resource files available at test
time.

Bug: webrtc:9076
Change-Id: Ia4793b8ad6a63cb3089ed11ddad89d1aa0b840f6
Reviewed-on: https://webrtc-review.googlesource.com/70244
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22946}
2018-04-19 17:32:20 +00:00
Alessio Bazzica
b4c748de03 AGC2 RNN VAD: Symmetric matrix buffer
Adding a data structure to cache the results of pair-wise comparisons
between items stored in a ring buffer. This is used to avoid recomputing
the pair-wise comparison every time that a new item is added in a ring
buffer.

Bug: webrtc:9076
Change-Id: I88fb67a80bd3fd8497764dc7ae7e0a577c06b20f
Reviewed-on: https://webrtc-review.googlesource.com/70162
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22942}
2018-04-19 15:31:09 +00:00
Alessio Bazzica
adbd808e0a AGC2 RNN VAD: Ring buffer
Ring buffer template for a finite number of arrays of given type and size.

Bug: webrtc:9076
Change-Id: Ia6c2065b0013f4a00f693966641f9aebe09f6f5c
Reviewed-on: https://webrtc-review.googlesource.com/70161
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22939}
2018-04-19 13:36:58 +00:00
Fredrik Solenberg
104ad0b62b Remove stale dependencies from APM static lib target:
- protobuf library
- file_wrapper.h

These appear to have been left behind during the AecDump refactoring.
After this CL, APM no longer depends on zlib by default! :)

Bug: webrtc:9139
Change-Id: I12a8df2a17a575515b9c07165825f0879c4e15eb
Reviewed-on: https://webrtc-review.googlesource.com/70762
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Fredrik Solenberg <solenberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22923}
2018-04-18 17:00:05 +00:00
Alessio Bazzica
4736d4e524 AGC2 RNN VAD: Sequence buffer
The SequenceBuffer class template implements a linear buffer with a Push
operation that is used to add a fixed size chunk of new samples into the
buffer. Its properties are its size and the size of the chunks that are
pushed. It is used to implement the pitch buffer in the RNN VAD feature
extractor, for which a ring buffer would be a painful choice.

Bug: webrtc:9076
Change-Id: I4767bf06d5a414dbed724a96ea4186ef013a1e30
Reviewed-on: https://webrtc-review.googlesource.com/70204
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22919}
2018-04-18 09:43:54 +00:00
Per Åhgren
d0fa820559 Allow AEC3 to use any externally reported audio buffer delay in AEC3
This CL adds support for using any externally reported audio buffer
delay to set the initial alignment in AEC3 which is used before the
AEC has been able to detect the delay.

Bug: chromium:834182,webrtc:9163
Change-Id: Ic71355f69b7c4d5815b78e49987043441e7908fb
Reviewed-on: https://webrtc-review.googlesource.com/70580
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22917}
2018-04-18 09:05:54 +00:00
Per Åhgren
b02644f2b8 AEC3 transparency improvements through refined echo audibility analysis
This CL increases the transparency in AEC3 during regions of low level
echo. What is done is:
-Low-level echoes are smoothly weighted so as to be deemed less
disturbing.
-The time-domain masking effect of the nearend speech is increased for
all frequencies.
-A separate, even more increased, time-domain masking effect is
introduced for lower frequencies.
-The intra-band masking is reduced to reduce the risk of echo leakage.
-The limiting of maximum gain due to filter-bank dynamics is removed
as the usecase for it could no longer be identified.

Bug: webrtc:9159,cromium:833801
Change-Id: I289b92919763124d6c5e5ede19e9a5917877c654
Reviewed-on: https://webrtc-review.googlesource.com/70421
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22915}
2018-04-18 08:08:44 +00:00
Alessio Bazzica
a44b91de3e Reland "Reland "AGC2 RNN VAD: initial build targets""
This reverts commit 772d43d4c0.

Reason for revert: fix issues and reland revert

Original change's description:
> Revert "Reland "AGC2 RNN VAD: initial build targets""
> 
> This reverts commit e0031500ba.
> 
> Reason for revert: reland automatically landed by mistake
> 
> Original change's description:
> > Reland "AGC2 RNN VAD: initial build targets"
> > 
> > This reverts commit a153c00bce.
> > 
> > Reason for revert: fix issues and reland revert
> > 
> > Original change's description:
> > > Revert "AGC2 RNN VAD: initial build targets"
> > > 
> > > This reverts commit 8628f5bb7c.
> > > 
> > > Reason for revert: iOS buildbot failing
> > > 
> > > Original change's description:
> > > > AGC2 RNN VAD: initial build targets
> > > > 
> > > > rnn_vad_tool is an executable that reads a wav file of any sample rate
> > > > compatible with 10 ms frames that are resampled and, when the VAD is
> > > > fully landed, will process the resampled frames to compute the VAD
> > > > probability.
> > > > 
> > > > To avoid mac, win and ios trybot failures, to_be_removed.h/.cc have
> > > > been added and will be removed as soon as the :lib target includes
> > > > code that leads to a non-empty static lib file on those platforms.
> > > > 
> > > > Bug: webrtc:9076
> > > > Change-Id: I810c08acfa1adf2029e3baac2adda3045ae5214a
> > > > Reviewed-on: https://webrtc-review.googlesource.com/70202
> > > > Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> > > > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > > > Cr-Commit-Position: refs/heads/master@{#22898}
> > > 
> > > TBR=alessiob@webrtc.org,aleloi@webrtc.org
> > > 
> > > Change-Id: Ic6014dde78b0ef371804c52608145ba8acdd9c97
> > > No-Presubmit: true
> > > No-Tree-Checks: true
> > > No-Try: true
> > > Bug: webrtc:9076
> > > Reviewed-on: https://webrtc-review.googlesource.com/70144
> > > Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> > > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > > Cr-Commit-Position: refs/heads/master@{#22899}
> > 
> > TBR=alessiob@webrtc.org,aleloi@webrtc.org
> > 
> > Change-Id: I55e5a77274684b4cff3c950ca3514cc769d5dc26
> > No-Presubmit: true
> > No-Tree-Checks: true
> > No-Try: true
> > Bug: webrtc:9076
> > Reviewed-on: https://webrtc-review.googlesource.com/70145
> > Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#22901}
> 
> TBR=alessiob@webrtc.org,aleloi@webrtc.org
> 
> Change-Id: Ia6a837f79ac3f12aa4b0659938454141c69fee61
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:9076
> Reviewed-on: https://webrtc-review.googlesource.com/70520
> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22902}

TBR=alessiob@webrtc.org,aleloi@webrtc.org

Change-Id: If0884ab59d66ac3ba6460dbfe14a083f20493c10
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9076
Reviewed-on: https://webrtc-review.googlesource.com/70521
Reviewed-by: Minyue Li <minyue@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22904}
2018-04-17 14:34:14 +00:00
Alessio Bazzica
772d43d4c0 Revert "Reland "AGC2 RNN VAD: initial build targets""
This reverts commit e0031500ba.

Reason for revert: reland automatically landed by mistake

Original change's description:
> Reland "AGC2 RNN VAD: initial build targets"
> 
> This reverts commit a153c00bce.
> 
> Reason for revert: fix issues and reland revert
> 
> Original change's description:
> > Revert "AGC2 RNN VAD: initial build targets"
> > 
> > This reverts commit 8628f5bb7c.
> > 
> > Reason for revert: iOS buildbot failing
> > 
> > Original change's description:
> > > AGC2 RNN VAD: initial build targets
> > > 
> > > rnn_vad_tool is an executable that reads a wav file of any sample rate
> > > compatible with 10 ms frames that are resampled and, when the VAD is
> > > fully landed, will process the resampled frames to compute the VAD
> > > probability.
> > > 
> > > To avoid mac, win and ios trybot failures, to_be_removed.h/.cc have
> > > been added and will be removed as soon as the :lib target includes
> > > code that leads to a non-empty static lib file on those platforms.
> > > 
> > > Bug: webrtc:9076
> > > Change-Id: I810c08acfa1adf2029e3baac2adda3045ae5214a
> > > Reviewed-on: https://webrtc-review.googlesource.com/70202
> > > Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> > > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > > Cr-Commit-Position: refs/heads/master@{#22898}
> > 
> > TBR=alessiob@webrtc.org,aleloi@webrtc.org
> > 
> > Change-Id: Ic6014dde78b0ef371804c52608145ba8acdd9c97
> > No-Presubmit: true
> > No-Tree-Checks: true
> > No-Try: true
> > Bug: webrtc:9076
> > Reviewed-on: https://webrtc-review.googlesource.com/70144
> > Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#22899}
> 
> TBR=alessiob@webrtc.org,aleloi@webrtc.org
> 
> Change-Id: I55e5a77274684b4cff3c950ca3514cc769d5dc26
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:9076
> Reviewed-on: https://webrtc-review.googlesource.com/70145
> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22901}

TBR=alessiob@webrtc.org,aleloi@webrtc.org

Change-Id: Ia6a837f79ac3f12aa4b0659938454141c69fee61
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9076
Reviewed-on: https://webrtc-review.googlesource.com/70520
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22902}
2018-04-17 13:17:49 +00:00
Alessio Bazzica
e0031500ba Reland "AGC2 RNN VAD: initial build targets"
This reverts commit a153c00bce.

Reason for revert: fix issues and reland revert

Original change's description:
> Revert "AGC2 RNN VAD: initial build targets"
> 
> This reverts commit 8628f5bb7c.
> 
> Reason for revert: iOS buildbot failing
> 
> Original change's description:
> > AGC2 RNN VAD: initial build targets
> > 
> > rnn_vad_tool is an executable that reads a wav file of any sample rate
> > compatible with 10 ms frames that are resampled and, when the VAD is
> > fully landed, will process the resampled frames to compute the VAD
> > probability.
> > 
> > To avoid mac, win and ios trybot failures, to_be_removed.h/.cc have
> > been added and will be removed as soon as the :lib target includes
> > code that leads to a non-empty static lib file on those platforms.
> > 
> > Bug: webrtc:9076
> > Change-Id: I810c08acfa1adf2029e3baac2adda3045ae5214a
> > Reviewed-on: https://webrtc-review.googlesource.com/70202
> > Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> > Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#22898}
> 
> TBR=alessiob@webrtc.org,aleloi@webrtc.org
> 
> Change-Id: Ic6014dde78b0ef371804c52608145ba8acdd9c97
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:9076
> Reviewed-on: https://webrtc-review.googlesource.com/70144
> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
> Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22899}

TBR=alessiob@webrtc.org,aleloi@webrtc.org

Change-Id: I55e5a77274684b4cff3c950ca3514cc769d5dc26
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9076
Reviewed-on: https://webrtc-review.googlesource.com/70145
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22901}
2018-04-17 13:16:44 +00:00