WHAT: made a BUILD.gn with library and tests in the Audio Processing
Module Voice Activity Detector directory. Updated depending
code. Fixed a Clang warning.
WHY: to make it possible for a target to depend on just the VAD and
not the whole APM. There are other benefits:
* Sometimes faster compilation.
* The VAD takes up 28000 bytes of libjingle_peerconnection_so.so. Making
a peerconnection shared object file without the VAD has to be done in
steps. The first step is a custom target for the VAD. Hence this Cl.
Change-Id: Iea0207a0b5979db26baaf46b24beaefbb1c431af
BUG: webrtc:5716, webrtc:7494
Reviewed-on: https://webrtc-review.googlesource.com/47521
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21893}
Due to the growing number of arguments, these functions are being replaced by the AudioProcessingBuilder class.
Bug: webrtc:8668
Change-Id: Ic3936fbd47d92eac22a857a678dca5fd8c029d8b
Reviewed-on: https://webrtc-review.googlesource.com/46241
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21826}
If a WebRTC build target requires gmock it has to include
test/gmock.h and just depend on //test:test_support.
Unfortunately //testtest_support was a leaky abstraction because it
wasn't propagating the correct -I compiler flag. To make everything
work, all the targets that use gmock started also to depend on
//testing/gmock (even if they were not including any gmock header
directly).
This CL makes //testtest_support propagate the include path up in the
dependency chain so it is possible to remove unused dependencies.
Note: all_dependent_configs should probably be used in the original
gmock target. There is an ongoing discussion about it. This CL solves
the problem on WebRTC side and it is forward compatible.
TBR=phoglund@webrtc.org
Bug: webrtc:8603
Change-Id: If08daf2ce9a6431a6e881a236743b4ec33b59ea7
Reviewed-on: https://webrtc-review.googlesource.com/44340
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21776}
The AecMobile struct contains a ::farendOld field. It's type is 'short [2][80]'.
The field was initialized by
memset(&aecm->farendOld[0][0], 0, 160);
But sizeof(short) is not guaranteed to be 1. This causes use of
unititialized memory on some platforms. According to MSAN, it can
affect the output of the echo canceller.
The issue was found by the MSAN fuzzer.
This change initializes the array properly.
Bug: chromium:805396
Change-Id: Ibcaca2185cfa153e8fd826e9addfc04d7b65e417
Reviewed-on: https://webrtc-review.googlesource.com/43860
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21764}
A coherence vector cohxd is computed in
WebRtcAec_ComputeCoherence. The coherence values should theoretically
be 0 <= x <= 1. Due to the way they are computed that is not always
the case.
The coherence values are used to update an error signal
estimate hNl in webrtc::EchoSuppression. 'hNl[i]' should contain an
error magnitude for frequency 'i'.
The error magnitudes are used as a basis for exponentiation. If a
magnitude is negative, the result is NaN.
The NaNs will then spread to the output signal.
This change caps the hNl values at 0. I considered capping the
coherence values at 1. The coherence values are calculated differently
for MIPS, NEON and SSE. Therefore it's simpler to cap the hNl values
instead.
The issue was found by the AudioProcessing fuzzer.
Bug: chromium:804634
Change-Id: I8ebaa441d77c3f79d9c194a850cb2b9eed1c2024
Reviewed-on: https://webrtc-review.googlesource.com/43740
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21761}
This change
* replaces a left shift with multiplication, because the shiftee can
be negative.
* replaces a right shift (a >> b) with the expression (b >= 32 ? 0 : a >> b)
because a is a 32-bit value, and b can be >= 32.
cppreference quote relating to the second change:
"In any case, if the value of the right operand is
negative or is greater or equal to the number of bits in the promoted
left operand, the behavior is undefined."
Bug: chromium:805832 chromium:803078
Change-Id: I67db0c3fedb0af197b2205d424414a84f8fde474
Reviewed-on: https://webrtc-review.googlesource.com/43761
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21760}
The faster AEC3 alignment introduced recently may in
cases cause the alignment (and the AEC3) to repeatedly
reset. This CL avoids these resets by handling buffer
issues (which are triggering the resets) separately
during the initial coarse alignment phase.
Change-Id: Idf5e2ffda2591906da8060d03ec8ca73cdaedf53
Bug: webrtc:8798,chromium:805815
Reviewed-on: https://webrtc-review.googlesource.com/43480
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21758}
This change handles a special case in NoiseSuppression. The special
case was found by the AudioProcessing fuzzer.
A const copy of the capture audio stream is sent to
NoiseSuppression::AnalyzeCaptureAudio. Then audio undergoes processing
by e.g. the echo canceller. Then it's processed by
NoiseSuppression::ProcessCaptureAudio.
The special case is when the following conditions are all satisfied:
* All stream samples are constantly zero in the call to
AnalyzeCaptureAudio
* a processing component modifies it to be nonzero before the call to
ProcessCaptureAudio
* The array NoiseSuppressionC::magnPrevAnalyze is filled with
zeros. This holds after initialization.
In this case, there is a division by zero in WebRtcNs_ProcessCore. The
resulting NaN values pollute the output signal. They are only detected
several submodules later in the process chain. The NaN values cause
the EchoDetector to crash in debug mode.
There is special handling of the case when the signal is constant zero
in ProcessCore. This change avoids zero division by handling this
issue the same way.
Bug: chromium:803810 chromium:804634
Change-Id: I6d698dd0cd27e6d550b42085124300ce58533125
Reviewed-on: https://webrtc-review.googlesource.com/41282
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21745}
This CL increases the speech of the initial alignment in AEC3 by
loosening the requirements on the accuracy of the initial estimates.
Bug: webrtc:8784, chromium:804270
Change-Id: I86e2d97830843524090a1cf877965739f66dc058
Reviewed-on: https://webrtc-review.googlesource.com/40660
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21728}
The conversational_speech_generator tool now adjusts the level of
different speech segments.
Implementation:
The Turn and MultiEndCall::SpeakingTurn structs have an extra 'gain'
member. It's read and parsed in timing.cc and put in a Turn
struct. It's put in a SpeakingTurn struct in multiend_call.cc and read
and applied to the signal in simulator.cc
Bug: webrtc:7494
Change-Id: I9b82a896eb616c8b5ef14d41dfdfd085ef1d3fbb
Reviewed-on: https://webrtc-review.googlesource.com/26280
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21714}
This minor issue was found by the UBSAN fuzzer.
We have used the Godbolt compiler explorer to check that similar
changes produce identical compiled code.
Bug: chromium:803078
Change-Id: Ib3fa38c101d7bda53d8d39062cb2c0a55144305f
Reviewed-on: https://webrtc-review.googlesource.com/42580
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21713}
We have done changes to the Audio Processing fuzzer here
https://webrtc-review.googlesource.com/c/src/+/36500/6.
We ran the new version of the fuzzer locally. The UBSAN
detector found these (minor) issues.
We have used the Godbolt compiler explorer to check that similar
changes produce identical compiled code.
Bug: webrtc:7820
Change-Id: I9cc3b81e4be7cf691f878c37010ce105bc2f3e38
Reviewed-on: https://webrtc-review.googlesource.com/39264
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21605}
This CL generalizes the hysteresis behavior on the AEC3 delay estimator
to be two-sided and easier to configure.
Bug: webrtc:8671
Change-Id: Ife21c1511416e32eb3618c81178deefe332ac1e8
Reviewed-on: https://webrtc-review.googlesource.com/39267
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21604}
This adds a generic interface for an echo detector, and makes it possible to inject one into the audio processing module.
Bug: webrtc:8732
Change-Id: I30d97aeb829307b2ae9c4dbeb9a3e15ab7ec0912
Reviewed-on: https://webrtc-review.googlesource.com/38900
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21588}
This CL adds an nonwindowed spectrum of the linear filter error
to use in the NLP computation.
Bug: webrtc:8661
Change-Id: I45bc9bb3eb8eeac0c5d6adb414638eb12b635a27
Reviewed-on: https://webrtc-review.googlesource.com/38701
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21583}
This reverts commit c73e1f4378.
Reason for revert:
The problem with failed deps in chrome content/renderer had already been fixed in https://webrtc-review.googlesource.com/c/src/+/38660
Original change's description:
> Revert "GN rtc_* templates: Set default visibility to webrtc_root + "/*""
>
> This reverts commit 588c548657.
>
> Reason for revert:
>
> Breaks Chrome FYI:
>
> /b/c/b/Linux_Builder/src/buildtools/linux64/gn gen //out/Release --check
> -> returned 1
> ERROR at //build/split_static_library.gni:12:5: Dependency not allowed.
> static_library(target_name) {
> ^----------------------------
> The item //content/renderer:renderer
> can not depend on //third_party/webrtc/media:rtc_internal_video_codecs
> because it is not in //third_party/webrtc/media:rtc_internal_video_codecs's visibility list: [
> //third_party/webrtc/*
> //third_party/webrtc_overrides/*
> ]
>
> https://logs.chromium.org/v/?s=chromium%2Fbb%2Fchromium.webrtc.fyi%2FLinux_Builder%2F23560%2F%2B%2Frecipes%2Fsteps%2Fgenerate_build_files%2F0%2Fstdout
>
> Original change's description:
> > GN rtc_* templates: Set default visibility to webrtc_root + "/*"
> >
> > This means that by default, targets are visible to everything under
> > the WebRTC root, but not visible to anything else.
> >
> > API targets are manually tagged with visibility "*", so that targets
> > outside the WebRTC tree can see them.
> >
> > BUG=webrtc:8254
> >
> > Change-Id: Icdbee6e0d22d93240ff2fb530c8f9dc48e351509
> > Reviewed-on: https://webrtc-review.googlesource.com/24140
> > Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> > Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#21548}
>
> TBR=mbonadei@webrtc.org,kwiberg@webrtc.org
>
> Change-Id: I06620ce3d6f67482935c22efa231dd6cab91625a
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:8254
> Reviewed-on: https://webrtc-review.googlesource.com/38760
> Reviewed-by: Per Kjellander <perkj@webrtc.org>
> Commit-Queue: Per Kjellander <perkj@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21555}
TBR=mbonadei@webrtc.org,kwiberg@webrtc.org,perkj@webrtc.org
Change-Id: I6f720078ce21bd172e0a6471bae8c4c011e4a657
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8254
Reviewed-on: https://webrtc-review.googlesource.com/38860
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21558}
This CL corrects the way that the estimated filter delay is used in
AEC3. In particular
-It uses the filter delay to choose the correct render block in AecState
-It changes the code to reflect that the filter delay is always computed
-It removes part of the code that formerly relied on the filter delay
being an Optional.
Bug: webrtc:8671
Change-Id: I58135a5c174b404707e19a41c3617c09831e871d
Reviewed-on: https://webrtc-review.googlesource.com/35221
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21557}
This reverts commit 588c548657.
Reason for revert:
Breaks Chrome FYI:
/b/c/b/Linux_Builder/src/buildtools/linux64/gn gen //out/Release --check
-> returned 1
ERROR at //build/split_static_library.gni:12:5: Dependency not allowed.
static_library(target_name) {
^----------------------------
The item //content/renderer:renderer
can not depend on //third_party/webrtc/media:rtc_internal_video_codecs
because it is not in //third_party/webrtc/media:rtc_internal_video_codecs's visibility list: [
//third_party/webrtc/*
//third_party/webrtc_overrides/*
]
https://logs.chromium.org/v/?s=chromium%2Fbb%2Fchromium.webrtc.fyi%2FLinux_Builder%2F23560%2F%2B%2Frecipes%2Fsteps%2Fgenerate_build_files%2F0%2Fstdout
Original change's description:
> GN rtc_* templates: Set default visibility to webrtc_root + "/*"
>
> This means that by default, targets are visible to everything under
> the WebRTC root, but not visible to anything else.
>
> API targets are manually tagged with visibility "*", so that targets
> outside the WebRTC tree can see them.
>
> BUG=webrtc:8254
>
> Change-Id: Icdbee6e0d22d93240ff2fb530c8f9dc48e351509
> Reviewed-on: https://webrtc-review.googlesource.com/24140
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21548}
TBR=mbonadei@webrtc.org,kwiberg@webrtc.org
Change-Id: I06620ce3d6f67482935c22efa231dd6cab91625a
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8254
Reviewed-on: https://webrtc-review.googlesource.com/38760
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21555}
This means that by default, targets are visible to everything under
the WebRTC root, but not visible to anything else.
API targets are manually tagged with visibility "*", so that targets
outside the WebRTC tree can see them.
BUG=webrtc:8254
Change-Id: Icdbee6e0d22d93240ff2fb530c8f9dc48e351509
Reviewed-on: https://webrtc-review.googlesource.com/24140
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21548}
The AudioProcessingBuilder was recently introduced in https://webrtc-review.googlesource.com/c/src/+/34651 to make it easier to create APM instances. This CL replaces all calls to the old Create methods with the new AudioProcessingBuilder.
Bug: webrtc:8668
Change-Id: Ibb5f0fc0dbcc85fcf3355b01bec916f20fe0eb67
Reviewed-on: https://webrtc-review.googlesource.com/36082
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21534}
This will require a manual roll to downstream projects, since
the //test:perf_test target was introduced.
This is a reland of 10a8e7a9b5
Original change's description:
> iOS: Save perf results under Documents/perf_result.json
>
> TBR=henrika@webrtc.org
>
> Bug: webrtc:7156
> Change-Id: Ib00992cce0007e0b5c9274340df1a892f810b0c5
> Reviewed-on: https://webrtc-review.googlesource.com/29202
> Commit-Queue: Edward Lemur <ehmaldonado@webrtc.org>
> Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
> Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21244}
R=henrika@webrtc.org, phoglund@webrtc.org
Bug: webrtc:7156
Change-Id: I85fc7bc5fce0894af90017b71b9952b61b523424
Reviewed-on: https://webrtc-review.googlesource.com/37643
Reviewed-by: Patrik Höglund <phoglund@google.com>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Commit-Queue: Edward Lemur <ehmaldonado@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21518}
This CL forces the AEC2 to assume a stream delay of 0, thereby
avoiding that the incorrect stream delays reported on Chrome OS
causes echo issues.
Bug: chromium:797274, chromium:797272
Change-Id: I10f295c9f1d735622c55fc56be99a14c6cdd88a2
Reviewed-on: https://webrtc-review.googlesource.com/36081
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21432}
As the number of injectable components of the APM increases, it is become increasingly unwieldy to keep expanding the Create function with more parameters. This builder class should make it easier to inject more components in the future.
Bug: webrtc:8668
Change-Id: If91547527760486c2a4daa9696bee22ec1d7675e
Reviewed-on: https://webrtc-review.googlesource.com/34651
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21425}
I realized I could use configs to fix some duplication that I
partially introduced.
Verified APM_DEBUG_DUMP is set appropriately by looking at the
compiler command line.
Bug: webrtc:6828
Change-Id: Ia990e2721546d65639567cd3ab788439e328c5da
Reviewed-on: https://webrtc-review.googlesource.com/34642
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21349}
Changing window type which improves the filter accuracy
at the cost of a slight reduction in convergence time.
Bug: webrtc:8661
Change-Id: Id0e5c66ec179f94471cbca0a2b8d1b94d8146ca6
Reviewed-on: https://webrtc-review.googlesource.com/34501
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21347}
This solves a circular dep and eliminates a target.
This means we will apply neon copts to some files that weren't before,
but I don't think that is a problem.
Bug: webrtc:6828,webrtc:7042
Change-Id: I3bb656ba5b13d6104b519c2dbf6a4b2814575b87
Reviewed-on: https://webrtc-review.googlesource.com/34183
Reviewed-by: Per Åhgren <peah@webrtc.org>
Commit-Queue: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21330}