Commit Graph

37 Commits

Author SHA1 Message Date
bac0012120 Extend delay estimation window in AEC to 500 ms on all platforms
On non-Android the delay estimator in audio_processing/aec has solely been used for logging purposes. The maximum possible observed delay has been 236 ms. We have seen longer delays for which the delay estimate at best ends up at 236 ms, but can also be 'random'. reported delays are clamped to 500 ms.
This cl extends the delay estimation window to match that.

BUG=4086, 3504, 4113
TESTED=locally on Linux and trybots
R=kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7989 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-01-02 09:23:49 +00:00
8789376cd3 Move ChannelBuffer class to channel_buffer file
No change in functionallity.

BUG=webrtc:3146
R=andrew@webrtc.org, bjornv@webrtc.org, kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7760 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-11-27 23:40:25 +00:00
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
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
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
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
a0ce9fa2a6 Call NS AnalyzeCaptureAudio before AEC
This attenuates the noise pumping generated from the NS adapting to the AEC comfort noise.

When there is echo present the AEC suppresses it and adds comfort noise. This is underestimated on purpose to avoid adding more than the original background noise. The NS has to be called after the AEC, because every non-linear processing before it can ruin its performance. Therefore the noise estimation can adapt to this comfort noise, making it less aggressive and generating noise pumping.

By putting the noise estimation analysis stage from the NS before the AEC, this effect can be avoided. This has been tested manually on recordings where noise pumping was present: Two long recordings done in our team by bjornv and kwiberg plus the most noisy (5) recordings in the QA set.

On the other hand, one risk of doing this is to not adapt to the comfort noise and therefore suppress too much. As verified in the tested files, this is not a problem in practice.

BUG=webrtc:3763
R=andrew@webrtc.org, bjornv@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7289 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-09-24 14:18:03 +00:00
dc0b37dcb1 modules_unittests: Turned on ApmTest.Process test for Android
The reason why ApmTest.Process breaks on Android is that two metrics over counts. I decided to add an offset and a different slack to the EXPECT_NEAR() calls that are affected. I think this is a reasonable approach since we have no more than two failing metrics. If any feature change that will make another metric fail, we should go back to the desk and find another way of solving this.

BUG=114
TESTED=locally on Nexus 7 and trybots
R=aluebs@webrtc.org, andrew@webrtc.org, kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7268 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-09-23 05:03:44 +00:00
8dd60cc855 audio_processing_unittests: Enabled ApmTest.Process for all platforms but Android
During porting some neon optimizations to sse2 the ApmTest.Process failed despite bit exact outputs. The reason is that with float data between component, as to previously truncating to int, we get small deviations in logged metrics. This affected a noise probability to a small fraction, which is not a particular bug.

This CL change the comparison from EXPECT_EQ() to EXPECT_NEAR() which then as a result makes the test run on Mac and Windows as well.

For int values a deviation of 1 is acceptable, which would include any rounding errors.
For float values a deviation of 0.0005 is chosen by looking at current test stats for the affected platforms/optimizations.

BUG=114
TESTED=locally on linux with and without sse2 optimizations and trybots
R=aluebs@webrtc.org, andrew@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7149 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-09-11 08:36:35 +00:00
84f8ec1f9c Changes to tests and tools in audio_processing.
- Disables ApmTest.EchoCancellationReportsCorrectDelays
This test relys completely on the structure of how reported system delays are handled in AEC. In addition it assumes a fix setup of delay logging buffers. This test should be refactored.

- Adds flag to turn off reported_delay in audioproc
Now it is feasible to turn on and off the use of reported system delays.

BUG=N/A
R=aluebs@webrtc.org, kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6492 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-06-19 12:14:33 +00:00
5c3f4e3b0f Fixes and re-enables tests disabled on Android
Several tests were disabled in r6325 and r6326. Also, see issue 3445. This CL fixes the remaining four of the audio_processing related ones. Affects the tests:
- SystemDelayTest.CorrectDelayAfterStableBufferBuildUp
- SystemDelayTest.CorrectDelayDuringDrift
- SystemDelayTest.ShouldRecoverAfterGlitch
- ApmTest.EchoCancellationReportsCorrectDelays

The tests assumes reported delays are used, which now is explicitly set.

BUG=3445
TESTED=trybots
R=aluebs@webrtc.org, kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6489 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-06-19 09:51:29 +00:00
cb0ea43e57 audio_processing: Forces extended filter to be used in splitting filter test.
The behavior differ between "normal" and "extended" modes when using AEC. In the extended filter mode nothing is processed until we have received a farend frame. This is exactly what is needed in this part of the splitting filter test.
On Android, we do not use the normal mode, which made the test to fail.

BUG=3445
R=kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6368 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-06-09 08:21:52 +00:00
b616e1211f Disables some modules_unittests on Android.
BUG=3445
R=henrik.lundin@webrtc.org, kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6325 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-06-04 12:12:58 +00:00
2812b59acd Re-enables CommonFormats test for Android.
It seems like this was a one time only and not a flaky test.

BUG=3376
TESTED=trybots
R=kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6298 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-06-02 11:27:29 +00:00
be4ab99a53 Disabling RealFFTTest.RealAndComplexMatch and AudioProcessingTest.Formats as they currently are broken with gcc 4.8.
BUG=3370
R=bjornv@webrtc.org, kjellander@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6197 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-05-20 12:42:01 +00:00
21299d4e00 Remove the use of AudioFrame::energy_ from AudioProcessing and VoE.
We want to remove energy_ entirely as we've seen that carrying around
this potentially invalid value is dangerous.

Results in the removal of AudioBuffer::is_muted(). This wasn't used in
practice any longer, after the level calculation moved directly to
channel.cc

Instead, now use ProcessMuted() in channel.cc, to shortcut the level
computation when the signal is muted.

BUG=3315
TESTED=Muting the channel in voe_cmd_test results in rms=127.
R=bjornv@webrtc.org, kwiberg@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6159 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-05-14 19:00:59 +00:00
103657b484 Add keyboard channel support to AudioBuffer.
Also use local aliases for AudioBuffers for brevity.

BUG=2894
R=aluebs@webrtc.org, bjornv@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5973 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-24 18:28:56 +00:00
f26c9e8369 Use unique filenames in AudioProcessingTests for parallelization.
TBR=bjornv
TESTED="gtest-parallel -w 32 --gtest_filter=*AudioProcessingTests*
out/Debug/modules_unittests" passes.

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5968 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-24 03:46:46 +00:00
ddbb8a2c24 Support arbitrary input/output rates and downmixing in AudioProcessing.
Select "processing" rates based on the input and output sampling rates.
Resample the input streams to those rates, and if necessary to the
output rate.

- Remove deprecated stream format APIs.
- Remove deprecated device sample rate APIs.
- Add a ChannelBuffer class to help manage deinterleaved channels.
- Clean up the splitting filter state.
- Add a unit test which verifies the output against known-working
native format output.

BUG=2894
R=aluebs@webrtc.org, bjornv@webrtc.org, xians@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5959 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-22 21:00:04 +00:00
1092ea0192 Add format specification to output file names
This change facilitates running ApmTest.VerifyDebugDumpInt and
ApmTest.VerifyDebugDumpFloat in parallel, since they are not writing
to the same files any longer.

R=andrew@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5829 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-02 07:46:49 +00:00
a8b97373d5 Add tests and modify tools for new float deinterleaved interface.
- Add an Initialize() overload to allow specification of format
parameters. This is mainly useful for testing, but could be used in
the cases where a consumer knows the format before the streams arrive.
- Add a reverse_sample_rate_hz_ parameter to prepare for mismatched
capture and render rates. There is no functional change as it is
currently constrained to match the capture rate.
- Fix a bug in the float dump: we need to use add_ rather than set_.
- Add a debug dump test for both int and float interfaces.
- Enable unpacking of float dumps.
- Enable audioproc to read float dumps.
- Move more shared functionality to test_utils.h, and generally tidy up
a bit by consolidating repeated code.

BUG=2894
TESTED=Verified that the output produced by the float debug dump test is
correct. Processed the resulting debug dump file with audioproc and
ensured that we get identical output. (This is crucial, as we need to
be able to exactly reproduce online results offline.)

R=aluebs@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5676 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-03-10 22:26:12 +00:00
3e0b60f465 Switch to correct interpretation of int and float input data in audio_processing_unittest
BUG=N/A
TESTED=trybots
TBR=andrew@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5642 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-03-05 00:18:53 +00:00
17e40641b3 Add a deinterleaved float interface to AudioProcessing.
This is mainly to support the native audio format in Chrome. Although
this implementation just moves the float->int conversion under the hood,
we will transition AudioProcessing towards supporting this format
throughout.

- Add a test which verifies we get identical output with the float and
int interfaces.
- The float and int wrappers are tasked with conversion to the
AudioBuffer format. A new shared Process/Analyze method does most of
the work.
- Add a new field to the debug.proto to hold deinterleaved data.
- Add helpers to audio_utils.cc, and start using numeric_limits.
- Note that there was no performance difference between numeric_limits
and a literal value when measured on Linux using gcc or clang.

BUG=2894
R=aluebs@webrtc.org, bjornv@webrtc.org, henrikg@webrtc.org, tommi@webrtc.org, turaj@webrtc.org, xians@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5641 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-03-04 20:58:13 +00:00
27c6980239 Move the volume quantization workaround from VoE to AGC.
Voice engine shouldn't really have to manage this. Instead, have AGC
keep track of the last input volume, so that it can avoid getting stuck
under coarsely quantized conditions.

Add a test to verify the behavior.

TESTED=unittests, and observed that AGC didn't get stuck on a MacBook
where this problem can actually occur.

R=bjornv@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5571 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-02-18 20:24:56 +00:00
c9ee412070 Re-enabling audio processing tests
R=bjornv@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5473 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-02-03 14:41:57 +00:00
8bc4fcfeb6 Temporarily disabling audio processing tests.
R=andrew@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5370 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-01-13 09:14:47 +00:00
bbd47fc5b5 Enables robust delay validation in AEC delay logging.
* Explicitly disabled robust validation in AECM.
* Updated audio_processing_unittests for using robust delay validation in AEC.
* Updated output_data_float.pb (not needed for Android nor fixed point, since AECM is untouched).

BUG=None
TESTED=modules_unittests, trybots
R=aluebs@webrtc.org, andrew@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5368 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-01-13 08:54:34 +00:00
d335094852 Init to 16 kHz in the fixed-point profile.
Fixes modules_unittests for fixed-point builds (Android).

TBR=bjornv

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5349 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-01-07 18:57:10 +00:00
60730cfe3c Remove the requirement to call set_sample_rate_hz and friends.
Instead have ProcessStream transparently handle changes to the stream
audio parameters (sample rate and channels). This removes two locks
per 10 ms ProcessStream call taken by VoiceEngine (four total with the
audio level indicator.)

Also, prepare future improvements by having the splitting filter take
a length parameter. This will allow it to work at different sample
rates. Remove the useless splitting_filter wrapper.

TESTED=voe_cmd_test with audio processing enabled and switching between
codecs; unit tests.

R=aluebs@webrtc.org, bjornv@webrtc.org, turaj@webrtc.org, xians@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5346 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-01-07 17:45:09 +00:00
f8be8df33a audio_processing_unittest: unbreak clang compilation.
BUG=2735
R=andrew@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5313 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-12-17 23:46:39 +00:00
863b536100 Allow opening an AEC dump from an existing file handle.
This is necessary for Chromium to be able enable the dump with the sanbox enabled. It will open the file in the browser process and pass the handle to the render process.

This changes FileWrapper to deal with the case were the file handle is not managed by the wrapper.

BUG=2567
R=andrew@webrtc.org, henrika@webrtc.org, perkj@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5239 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-12-06 16:05:17 +00:00
3d9981d58a Remove unused ThreadData struct.
TBR=bjornv

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5216 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-12-04 17:13:47 +00:00
d7696c4ed1 Compile-out functions only used by the bit-exact test.
Causes errors on platforms where the test is unused.

TBR=bjornv

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5207 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-12-03 23:39:16 +00:00
3555303cb0 Roll chromium_revision 226126:228675 and fix clang warnings
By request from thakis@chromium.org, I disabled the
-Wno-unused-const-variable setting that is set in Chromium's
common.gypi so we can prepare our code for it's removal.

This required some cleanup in order to get the code to compile
with Clang having the -Wunused-const-variable warning enabled.

TEST=all trybots passing
BUG=none
R=niklas.enbom@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4966 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-15 20:10:17 +00:00
f3930e941c Small refactoring of AudioProcessing use in channel.cc.
- Apply consistent naming.
- Use a scoped_ptr for rx_audioproc_.
- Remove now unnecessary AudioProcessing::Destroy().

R=bjornv@webrtc.org, xians@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4784 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-18 22:37:32 +00:00
a950300b0e Disables unit tests that don't work on Android for Android.
BUG=N/A
R=andrew@webrtc.org, kjellander@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4306 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-07-08 18:53:54 +00:00
c66aaaf921 Rename unit_test.{cc,h} under module_unittest.
Squelches the following Windows trybot warning:
warning LNK4042: object specified more than once; extras ignored

BUG=
R=andrew@webrtc.org, stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4288 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-07-03 07:56:33 +00:00