14 Commits

Author SHA1 Message Date
peah
2ace3f9406 The audio processing module (APM) relies on two for
functionalities  doing sample-rate conversions:
-The implicit resampling done in the AudioBuffer CopyTo,
 CopyFrom, InterleaveTo and DeinterleaveFrom methods.
-The multi-band splitting scheme.

The selection of rates in these have been difficult and
complicated, partly due to that the APM API which allows
for activating the APM submodules without notifying
the APM.

This CL adds functionality that for each capture frame
polls all submodules for whether they are active or not
and compares this against a cached result.
Furthermore, new functionality is added that based on the
results of the comparison do a reinitialization of the APM.

This has several advantages
-The code deciding on whether to analysis and synthesis is
 needed for the bandsplitting can be much simplified and
 centralized.
-The selection of the processing rate can be done such as
 to avoid the implicit resampling that was in some cases
 unnecessarily done.
-The optimization for whether an output copy is needed
 that was done to improve performance due to the implicit
 resampling is no longer needed, which simplifies the
 code and makes it less error-prone in the sense that
 is no longer neccessary to keep track of whether any
 module has changed the signal.

Finally, it should be noted that the polling of the state
for all the submodules was done previously as well, but in
a less obvious and distributed manner.

BUG=webrtc:6181, webrtc:6220, webrtc:5298, webrtc:6296, webrtc:6298, webrtc:6297

Review-Url: https://codereview.webrtc.org/2304123002
Cr-Commit-Position: refs/heads/master@{#14175}
2016-09-10 11:42:36 +00:00
aluebs
eb3603bd5e Don't always downsample to 16kHz in the reverse stream in APM
The first approach landed here: https://codereview.webrtc.org/1773173002
But it was partially reverted, because it affected the AEC performance, here: https://codereview.webrtc.org/1867483003/
The main difference of this approach is that it doesn't use the 3-band splitting filter in the reverse stream, which seems to be the culprit of the AEC regression.
Also, the 2-band splitting filter has been used for the 32kHz case for a long time without any problem, and this is expanded in the CL to cover the 48kHz case as well.

BUG=webrtc:5725
TBR=tina.legrand@webrtc.org

Review URL: https://codereview.webrtc.org/1865633005

Cr-Commit-Position: refs/heads/master@{#12451}
2016-04-20 22:28:01 +00:00
peah
0bf612b3ec This CL is partially reverting the effects that
were added in https://codereview.webrtc.org/1773173002.

The reason for the revert is that for some scenarios
that CL causes problems in the coherence estimate used
in the AEC, which in turn causes echo leakage.

The reason for not reverting the actual CL is that
it would cause subsequent CLs to be reverted as well.
Therefore the choice was made to in this CK
instead revert the effects of that CL.

With the changes in this CL, the behavior is bitexact
to what it was before the CL mentioned above.

TBR=aluebs@webrtc.org

BUG=webrtc:5725

Review URL: https://codereview.webrtc.org/1867483003

Cr-Commit-Position: refs/heads/master@{#12259}
2016-04-06 09:47:52 +00:00
Alejandro Luebs
40cbec5415 Fix the number of frames used when interleaving in AudioBuffer::InterleaveTo()
R=henrik.lundin@webrtc.org, peah@webrtc.org
TBR=tina.legrand@webrtc.org

Review URL: https://codereview.webrtc.org/1862553002 .

Cr-Commit-Position: refs/heads/master@{#12249}
2016-04-06 00:29:29 +00:00
aluebs
776593b139 Reland: Drop the 16kHz sample rate restriction on AECM and zero out higher bands
Landed originally here: https://codereview.webrtc.org/1774553002/
Revertede here: https://codereview.webrtc.org/1781893002/

TBR=solenberg@webrtc.org, tina.legrand@webrtc.org

Review URL: https://codereview.webrtc.org/1777093004

Cr-Commit-Position: refs/heads/master@{#12005}
2016-03-15 21:05:05 +00:00
perkj
dfc2870380 Revert of Drop the 16kHz sample rate restriction on AECM and zero out higher bands (patchset #3 id:40001 of https://codereview.webrtc.org/1774553002/ )
Reason for revert:
Breaks Android it looks like.
See your own try jobs and
https://build.chromium.org/p/client.webrtc/builders/Android32%20Tests%20%28L%...

Original issue's description:
> Drop the 16kHz sample rate restriction on AECM and zero out higher bands
>
> The restriction has been removed completely and AECM now supports any
> number of higher bands. But this has been achieved by always zeroing out the
> higher bands, instead of applying a constant gain which is the average over half
> of the lower band (like it is done for the AEC), because that would be
> non-trivial to implement and we don't want to spend too much time on AECM, since
> we want to get rid of it in the long term anyway.
>
> R=peah@webrtc.org, solenberg@webrtc.org, tina.legrand@webrtc.org
>
> Committed: https://crrev.com/f687d53aabee0523ce6e9e0636163af8df120e41
> Cr-Commit-Position: refs/heads/master@{#11931}

TBR=peah@webrtc.org,turaj@webrtc.org,tina.legrand@webrtc.org,solenberg@webrtc.org,aluebs@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Review URL: https://codereview.webrtc.org/1781893002

Cr-Commit-Position: refs/heads/master@{#11932}
2016-03-10 00:23:32 +00:00
Alex Luebs
f687d53aab Drop the 16kHz sample rate restriction on AECM and zero out higher bands
The restriction has been removed completely and AECM now supports any
number of higher bands. But this has been achieved by always zeroing out the
higher bands, instead of applying a constant gain which is the average over half
of the lower band (like it is done for the AEC), because that would be
non-trivial to implement and we don't want to spend too much time on AECM, since
we want to get rid of it in the long term anyway.

R=peah@webrtc.org, solenberg@webrtc.org, tina.legrand@webrtc.org

Review URL: https://codereview.webrtc.org/1774553002 .

Cr-Commit-Position: refs/heads/master@{#11931}
2016-03-09 15:38:09 +00:00
aluebs@webrtc.org
f17ee9c709 Add case to ApmTest.Process to test the extended filter mode
R=andrew@webrtc.org, bjornv@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/40509004

Cr-Commit-Position: refs/heads/master@{#8192}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8192 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-01-29 00:04:18 +00:00
andrew@webrtc.org
8328e7c44d Revert "Revert part of r7561, "Refactor audio conversion functions.""
This restores the conversion changes to AudioProcessing originally
added in r7561, with minor alterations to ensure it passes all tests.

TBR=kwiberg

Review URL: https://webrtc-codereview.appspot.com/28899004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7574 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-10-31 04:58:14 +00:00
kwiberg@webrtc.org
bcfb4d0403 Revert part of r7561, "Refactor audio conversion functions."
Specifically, revert this part:

  "Remove hacks in AudioBuffer intended to maintain bit-exactness with
   the float path. The conversions etc. are now all natural, and
   instead we enforce close but not bit-exact output between the two
   paths."

But keep the conversion function rename, since that doesn't seem to be
causing problems.

R=tina.legrand@webrtc.org, bjornv@webrtc.org
TBR=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/24999004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7569 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-10-30 11:16:06 +00:00
andrew@webrtc.org
4fc4addc81 Refactor audio conversion functions.
Use a consistent naming scheme that can be understood at the callsite
without having to refer to documentation.

Remove hacks in AudioBuffer intended to maintain bit-exactness with the
float path. The conversions etc. are now all natural, and instead we
enforce close but not bit-exact output between the two paths.

Output of ApmTest.Process:
https://paste.googleplex.com/5931055831842816

R=aluebs@webrtc.org, bjornv@webrtc.org, kwiberg@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/13049004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7561 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-10-30 03:40:10 +00:00
andrew@webrtc.org
30be827e6a Enable render downmixing to mono in AudioProcessing.
In practice, we have been doing this since time immemorial, but have
relied on the user to do the downmixing (first voice engine then
Chromium). It's more logical for this burden to fall on AudioProcessing,
however, who can be expected to know that this is a reasonable approach
for AEC. Permitting two render channels results in running two AECs
serially.

Critically, in my recent change to have Chromium adopt the float
interface:
https://codereview.chromium.org/420603004
I removed the downmixing by Chromium, forgetting that we hadn't yet
enabled this feature in AudioProcessing. This corrects that oversight.

The change in paths hit by production users is very minor. As commented
it required adding downmixing to the int16_t path to satisfy
bit-exactness tests.

For reference, find the ApmTest.Process errors here:
https://paste.googleplex.com/6372007910309888

BUG=webrtc:3853
TESTED=listened to the files output from the Process test, and verified
that they sound as expected: higher echo while the AEC is adapting, but
afterwards very close.

R=aluebs@webrtc.org, bjornv@webrtc.org, kwiberg@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/31459004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7292 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-09-24 20:06:23 +00:00
bjornv@webrtc.org
c98ce3b34c modules/audio_processing: Updates output_data_fixed.pb test file
In r6591 a shift macro was removed affecting AECM. In addition to that change a bug was fixed. The fix added a few voice_counts in ApmTest.Process.

This CL updates the reference file, even though it is not used in practice since the test is currently turned off for Android (where AECM is used).

BUG=3672
TESTED=locally
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/14089004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6868 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-08-12 07:35:52 +00:00
andrew@webrtc.org
9dc45dad1b Move trunk/test/data -> trunk/data
BUG=
TEST=all trybot test failures passed locally

Review URL: https://webrtc-codereview.appspot.com/583007

git-svn-id: http://webrtc.googlecode.com/svn/trunk@2280 4adac7df-926f-26a2-2b94-8c16560cd09d
2012-05-23 15:39:01 +00:00