479 Commits

Author SHA1 Message Date
ekm
db4fecfb01 Attempt to reland: Allow intelligibility to compile in apm (https://codereview.webrtc.org/1182323005/)
Revert of original: https://codereview.webrtc.org/1187033005/

Changes in original:
- Added files to gyp and BUILD
- Made minor fixes to get everything to compile
    and intelligibility_proc to run
- Added comments
- Auto-reformatting

New Changes:
- Added <numeric> header to intelligibility_enhancer.cc to address buildbot errors
- Switched to use WAV for i/o in intelligibility_proc.cc to address windows errors
- clean up

Note: Patch 1 duplicates Patch 7 of https://codereview.webrtc.org/1182323005/

R=andrew@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9486}
2015-06-23 00:49:14 +00:00
Alejandro Luebs
f260fc2136 Revert "Pull the Voice Activity Detector out from the AGC"
This reverts commit 34be126c1b3ee60ecdb86b1de41a0648347450b2.

It breaks Chromium ASAN.

TBR=niklas.enbom@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9472}
2015-06-19 18:24:01 +00:00
Alejandro Luebs
f5f8f52a4b Revert "Increase the kMaxNoiseProbability in voice_activity_detector_test"
This reverts commit c9b0f675687d318b9367b1d6764182b9411355de.

It breaks Chromium ASAN.

TBR=niklas.enbom@webrtc.org
BUG=

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

Cr-Commit-Position: refs/heads/master@{#9471}
2015-06-19 18:18:02 +00:00
Alejandro Luebs
c9b0f67568 Increase the kMaxNoiseProbability in voice_activity_detector_test
Because it breaks on Android.

TBR=ajm

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

Cr-Commit-Position: refs/heads/master@{#9467}
2015-06-18 21:48:09 +00:00
Alejandro Luebs
34be126c1b Pull the Voice Activity Detector out from the AGC
This change generates bit-exact values when running through audioproc_f than before.

R=andrew@webrtc.org, bloch@google.com

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

Cr-Commit-Position: refs/heads/master@{#9465}
2015-06-18 19:34:00 +00:00
Bjorn Volcker
7101269c61 Reland "Revert "audio_processing/aec: make delay estimator aware of starving farend buffer""
Original review at https://codereview.webrtc.org/1180423006

SystemDelayTests was not updated w.r.t. extended_filter mode and some tests were disabled on Android since DA-AEC is automatically set.
All tests have now been updated for both extended_filter mode as well as DA-AEC, hence are now enabled on Android.

Also
* Moves default settings of extended_filter and DA-AEC form Init() to Create() to avoid unintentional loss of state during a reset.
* Fixes a potential bug of starting from scratch in extended_filter mode + DA-AEC.

This reverts commit 01c9b012e9171c813ace9e405c32fc75f4262bf6.

BUG=
R=henrik.lundin@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9458}
2015-06-18 09:05:03 +00:00
aluebs
c555b99c13 Revert of Allow intelligibility to compile in apm (patchset #1 id:1 of https://codereview.webrtc.org/1182323005/)
Reason for revert:
Breaking the build bots: http://build.chromium.org/p/client.webrtc/builders/Mac32%20Release%20%5Blarge%20tests%5D/builds/4544

Fails to compile with this error:

../../webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.cc:218:25: error: no member named 'accumulate' in namespace 'std'
    power_target = std::accumulate(clear_variance_.variance(),

Original issue's description:
> Allow intelligibility to compile in apm
>
> - Added files to gyp and BUILD
> - Made minor fixes to get everything to compile
>     and intelligibility_proc to run
> - Added comments
> - Auto-reformatting
>
> Original cl is at: https://webrtc-codereview.appspot.com/57579004/
>
> TBR=aluebs@webrtc.org
>
> Committed: b7553dfdbb

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

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

Cr-Commit-Position: refs/heads/master@{#9455}
2015-06-17 03:26:20 +00:00
ekm
b7553dfdbb Allow intelligibility to compile in apm
- Added files to gyp and BUILD
- Made minor fixes to get everything to compile
    and intelligibility_proc to run
- Added comments
- Auto-reformatting

Original cl is at: https://webrtc-codereview.appspot.com/57579004/

TBR=aluebs@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9454}
2015-06-17 01:57:37 +00:00
Bjorn Volcker
01c9b012e9 Revert "audio_processing/aec: make delay estimator aware of starving farend buffer"
The code only affects DA-AEC, but since DA-AEC is the default AEC if run on Android tests failed. Reverting to fix that test.

This reverts commit 9002cc426dab7a576f5247f45ba888cd081a39f0.

BUG=
TBR=henrik.lundin@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9453}
2015-06-16 21:09:51 +00:00
Bjorn Volcker
9002cc426d audio_processing/aec: make delay estimator aware of starving farend buffer
We've seen that if we get a buffer underrun followed by a sudden buffer build up the DA-AEC can't really catch up even though it should be possible to estimate the upcoming difference. We have a feature for this already, but that is only used in the regular AEC. This CL turns that feature on also for DA-AEC.

- Adds a helper function MoveFarReadPtrWithoutSystemDelayUpdate()
- Only apply conservative correction for positive delays, where we can put the AEC into a non-causal state
- Stuff the farend buffer if we don't have enough data to process w.r.t. to current nearend buffer.
- Always run delay estimation based on reported delays to catch buffer starvation.

BUG=
R=henrik.lundin@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9452}
2015-06-16 20:29:52 +00:00
henrika
1d34fe979c Adds support for webrtc::test::ResourcePath on iOS
BUG=webrtc:4752
R=tkchin@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9445}
2015-06-16 08:04:24 +00:00
Henrik Lundin
b02af18c5c Follow-up: Remove old DelayCorrection AEC config
This is a follow-up to r9401, where the configuration DelayCorrection
was replaced by ExtendedFilter.

This change also removes the media constraint
kExperimentalEchoCancellation which was replaced by
kExtendedFilterEchoCancellation in the same CL.

Both settings that are now being removed were kept in the code to avoid
API breakages. In https://codereview.chromium.org/1167343004,
depending code has been updated to avoid breakages.

BUG=webrtc:4696
R=bjornv@webrtc.org, tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9444}
2015-06-16 07:53:32 +00:00
ekm
030249dd24 Initial SIE commit: migrating existing code
Moved exact existing intelligibility enhancement implementation into new
repository for reference when making further changes.

Note: this cl does not add these files to any gyp.

Original cl is at https://webrtc-codereview.appspot.com/52719004/ .

TBR=aluebs@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9441}
2015-06-15 20:02:33 +00:00
Peter Kasting
728d9037c0 Reformat existing code. There should be no functional effects.
This includes changes like:
* Attempt to break lines at better positions
* Use "override" in more places, don't use "virtual" with it
* Use {} where the body is more than one line
* Make declaration and definition arg names match
* Eliminate unused code
* EXPECT_EQ(expected, actual) (but use (actual, expected) for e.g. _GT)
* Correct #include order
* Use anonymous namespaces in preference to "static" for file-scoping
* Eliminate unnecessary casts
* Update reference code in comments of ARM assembly sources to match actual current C code
* Fix indenting to be more style-guide compliant
* Use arraysize() in more places
* Use bool instead of int for "boolean" values (0/1)
* Shorten and simplify code
* Spaces around operators
* 80 column limit
* Use const more consistently
* Space goes after '*' in type name, not before
* Remove unnecessary return values
* Use "(var == const)", not "(const == var)"
* Spelling
* Prefer true, typed constants to "enum hack" constants
* Avoid "virtual" on non-overridden functions
* ASSERT(x == y) -> ASSERT_EQ(y, x)

BUG=none
R=andrew@webrtc.org, asapersson@webrtc.org, henrika@webrtc.org, juberti@webrtc.org, kjellander@webrtc.org, kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9420}
2015-06-11 21:31:48 +00:00
Peter Kasting
b7e5054414 Match existing type usage better.
This makes a variety of small changes to synchronize bits of code using different types, remove useless code or casts, and add explicit casts in some places previously doing implicit ones.  For example:

* Change a few type declarations to better match how the majority of code uses those objects.
* Eliminate "< 0" check for unsigned values.
* Replace "(float)sin(x)", where |x| is also a float, with "sinf(x)", and similar.
* Add casts to uint32_t in many places timestamps were used and the existing code stored signed values into the unsigned objects.
* Remove downcasts when the results would be passed to a larger type, e.g. calling "foo((int16_t)x)" with an int |x| when foo() takes an int instead of an int16_t.
* Similarly, add casts when passing a larger type to a function taking a smaller one.
* Add casts to int16_t when doing something like "int16_t = int16_t + int16_t" as the "+" operation would implicitly upconvert to int, and similar.
* Use "false" instead of "0" for setting a bool.
* Shift a few temp types when doing a multi-stage calculation involving typecasts, so as to put the most logical/semantically correct type possible into the temps.  For example, when doing "int foo = int + int; size_t bar = (size_t)foo + size_t;", we might change |foo| to a size_t and move the cast if it makes more sense for |foo| to be represented as a size_t.

BUG=none
R=andrew@webrtc.org, asapersson@webrtc.org, henrika@webrtc.org, juberti@webrtc.org, kwiberg@webrtc.org
TBR=andrew, asapersson, henrika

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

Cr-Commit-Position: refs/heads/master@{#9419}
2015-06-11 19:56:03 +00:00
Peter Kasting
f045e4da43 Prepare to convert various types to size_t.
This makes some behaviorally-invariant changes to make certain code that
currently only works correctly with signed types work safely regardless of the
signedness of the types in question.  This is preparation for a future change
that will convert a variety of types to size_t.

There are also some formatting changes (e.g. converting "enum hack" usage to real consts) to make it simpler to just change "int" to "size_t" in the future to change the types of those constants.

BUG=none
R=andrew@webrtc.org, juberti@webrtc.org, kwiberg@webrtc.org
TBR=ajm

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

Cr-Commit-Position: refs/heads/master@{#9413}
2015-06-11 04:15:51 +00:00
Zeke Chin
786dbdcc38 Rename targets to use lower case format.
It makes writing a build script for merging libraries
across architectures easier. See talk/build/build_ios_libs.sh.

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

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

Cr-Commit-Position: refs/heads/master@{#9412}
2015-06-10 20:45:12 +00:00
Bjorn Volcker
9345e86551 audio_processing: Create now returns a pointer to the object
Affects
* NS
* AGC
* AEC

BUG=441
TESTED=locally on Linux and trybots
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9411}
2015-06-10 19:43:46 +00:00
henrika
a2c79405b4 Ensures that modules_unittests runs on iOS
BUG=4752
R=tkchin@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#9408}
2015-06-10 11:24:58 +00:00
Henrik Lundin
441f634731 Re-land r9378 "Rename APM Config DelayCorrection to ExtendedFilter"
(This reverts commit 3fbf3f8841b5460503fb646eaedcb063620434a8.)

The original submission was reverted because it broke the Chrome build. This is fixed in patch set 2 of this change by keeping the old MediaConstraintsInterface string kExperimentalEchoCancellation. It will be removed once the Chrome code has been updated.

Original description:
"We use this Config struct for enabling/disabling Extended filter mode in AEC. This change renames it to ExtendedFilter for readability reasons. The corresponding media constraint is also renamed to kExtendedFilterEchoCancellation.

The old Config is kept in parallel with the new during a transition period. This is to avoid problems with API breakages. During this period, if any of the two Configs are enabled, the extended filter mode is engaged in APM. That is, the two Configs are combined with an "OR" operation.

This change also renames experimental_aec in AudioOptions to extended_filter_aec."

BUG=webrtc:4696
R=bjornv@webrtc.org, tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9401}
2015-06-09 14:03:23 +00:00
Henrik Lundin
3fbf3f8841 Revert r9378 "Rename APM Config DelayCorrection to ExtendedFilter"
This reverts commit 5f4b7e2873864c61e2ad6d88679dcd5d321bfd16, since it
broke some of the build bots.

BUG=4696
TBR=bjornv@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9380}
2015-06-05 09:04:20 +00:00
Henrik Lundin
5f4b7e2873 Rename APM Config DelayCorrection to ExtendedFilter
We use this Config struct for enabling/disabling Extended filter mode
in AEC. This change renames it to ExtendedFilter for readability
reasons. The corresponding media constraint is also renamed to
kExtendedFilterEchoCancellation.

The old Config is kept in parallel with the new during a transition
period. This is to avoid problems with API breakages. During this
period, if any of the two Configs are enabled, the extended filter
mode is engaged in APM. That is, the two Configs are combined with an
"OR" operation.

This change also renames experimental_aec in AudioOptions to extended_filter_aec.

BUG=4696
R=bjornv@webrtc.org, tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9378}
2015-06-05 07:55:40 +00:00
Bjorn Volcker
7dbc076f34 audio_processing/aec: Turn SignalBasedDelayCorrection to after 15 seconds
The delay agnostic AEC uses a signal based delay correction method to adjust buffer synchronization between loudspeaker and microphone. On Mac in particular we have seen deviations in UMA stats that point towards an echo already at startup. This is likely due to an early and incorrect correction based on poor audio data.
By waiting 15 seconds before we turn on the ability to correct we can avoid a majority of these.
The reported delay values are in general accurate enough and relying on them in the beginning is fine. The value 15 seconds is chosen because we have seen from UMA data that a significant amount of calls tend to end before 15 seconds when being in the UseDelayAgnosticAEC Finch experiment.

We turn this "feature" on for all platforms but Android, where the reported system delays are inaccurate and we want to take action as soon as possible.
In addition, the set of "good" delay values has been increased from 25% to 75% of the filter length.

BUG=webrtc:3504
R=henrik.lundin@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9376}
2015-06-05 07:40:45 +00:00
Andrew MacDonald
645299d4e0 Add frequency smoothing to postfilter.
Reduces musical noise with minimal impact on interferer suppression.

This also unifies the treatment of "mean bins". The "end" bin is now
inclusive in the mean range as with the "start" bin.

Corrects interpretation of quantile.

BUG=chromium:490477
R=aluebs@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9317}
2015-05-28 20:10:32 +00:00
Bjorn Volcker
a743794d06 audio_processing/aecm: Create() now returns a pointer to the object
Changed Create() to return a pointer to the object rather than an error message, which is in line with how objects should be created.

BUG=441
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9315}
2015-05-28 13:58:53 +00:00
Peter Boström
23c2e55479 Remove remaining .mk files.
These files are not supported, kept up to date or likely to build
anymore.

BUG=
R=glaznev@webrtc.org, tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9303}
2015-05-28 09:05:11 +00:00
Andrew MacDonald
b444b3f0ff Redirect logs to stderr in audioproc_f.
Notably, this displays logs from the AGC.

Also add a "time per chunk" field to the perf output.

R=aluebs@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9302}
2015-05-28 00:26:12 +00:00
Bjorn Volcker
de4703c5d1 Refactor common_audio/vad: Create now returns the handle directly instead of an error code
Changed the WebRtcVad_Create() function to the more conventional format of returning the handle directly instead of an error code to take care of.
In addition NULL was changed to nullptr in the files where it applied.

Affected components:
* AGC
* VAD
* NetEQ

BUG=441, 3347
TESTED=locally on Linux and trybots
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9291}
2015-05-27 05:23:11 +00:00
Henrik Kjellander
57e5fd2e60 PRESUBMIT: Improve PyLint check and add GN format check.
Add pylintrc file based on
https://code.google.com/p/chromium/codesearch#chromium/src/tools/perf/pylintrc
bit tightened up quite a bit (the one in depot_tools is far
more relaxed).

Remove a few excluded directories from pylint check and fixed/
suppressed all warnings generated.

Add GN format check + formatted all GN files using 'gn format'.
Cleanup redundant rules in tools/PRESUBMIT.py

TESTED=Ran 'git cl presubmit -vv', fixed the PyLint violations.
Ran it again with a modification in webrtc/build/webrtc.gni, formatted
all the GN files and ran it again.

R=henrika@webrtc.org, phoglund@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9274}
2015-05-25 10:55:50 +00:00
Alejandro Luebs
477487410a Enable AudioProcessing48kHzSupport by default
Because of the Finch experiment, this will not affect Chrome's behaviour at all.
The SNRs in AudioProcessingTest.Formats were only increased to the next multiple of 5.

BUG=webrtc:3146
R=andrew@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9263}
2015-05-22 18:59:59 +00:00
Brave Yao
1a07a1e825 Solve data race in Pulse audio implementation.
BUG=3056, 1320
TEST=AutoTest

Mainly add threadchecker and remove unnecessary lock.
And some more styling working.
- audio_device_pulse_linux.cc: wrap lines longer than 80 chars. And add '.' to some comments around. Not do it to all places.
- audio_mixer_manager_pulse_linux.cc: Here I adopt some chromium practice. We use to do many things to the failure of pulse operation, which causes most of the data race issue. In chromium, if we failed to call any pulse function, we just fail it w/o use the previous results. Here I did same. Please check if it's good.

R=bjornv@webrtc.org, henrika@webrtc.org, tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9243}
2015-05-21 04:42:24 +00:00
Alejandro Luebs
05c760533f Add resampling support in AudioBuffer::DeinterleaveFrom
It is necessary for adding 48kHz support to the AudioProcessing::AnalyzeReverseStream int interface (It was not necessary for 32kHz since in that case the splitting filter is more efficient).

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

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

Cr-Commit-Position: refs/heads/master@{#9241}
2015-05-20 21:39:17 +00:00
André Susano Pinto
664cdafb8a Replace assert() with static_assert() if the condition is evaluatable at
compile time.

The condition of static_assert() is evaluated at compile time which is safer and
more efficient.

Note that static_assert() requires C++11.

The changes were generated by the misc-static-assert ClangTidy check by alexfh@google.com

R=tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9231}
2015-05-20 09:11:02 +00:00
Andrew MacDonald
cb7f8ce2df Clear ARM NEON flag
Merge WEBRTC_ARCH_ARM64_NEON and WEBRTC_ARCH_ARM_NEON into one
WEBRTC_HAS_NEON.
Replace WEBRTC_DETECT_ARM_NEON by WEBRTC_DETECT_NEON.
Replace WEBRTC_ARCH_ARM by WEBRTC_ARCH_ARM64 for arm64 cpu.

BUG=4002
R=andrew@webrtc.org, jridges@masque.com, kjellander@webrtc.org

Change-Id: I870a4d0682b80633b671c9aab733153f6d95a980

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

Cr-Commit-Position: refs/heads/master@{#9228}
2015-05-20 05:20:04 +00:00
Alejandro Luebs
8db8069660 Change high frequency correction range
From 6kHz-6.5kHz to 3kHz-5kHz. Previous range had unreliable mask values, letting high frequencies from all directions through. The new range is wider and lower, which results in better estimates.

R=andrew@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9213}
2015-05-19 01:19:39 +00:00
Peter Boström
fade1790a7 Remove leaking aecdump testfiles.
Also removes tracing to file in ApmTest because it leads to remaining
files.

BUG=4258
R=bjornv@webrtc.org, kjellander@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9175}
2015-05-12 08:44:03 +00:00
Andrew MacDonald
cb05b72eb2 Add WAV and arbitrary geometry support to nlbf test.
This adds functionality from audioproc_float. The geometry parsing code
is now shared from test_utils.h. I removed the "mic_spacing" flag from
audioproc_float because it's a redundancy that I suspect isn't very
useful.

Includes a cleanup of the audio_processing test utils. They're now
packaged in targets, with the protobuf-using ones split out to avoid
requiring users to depend on protobufs.

pcm_utils is no longer needed and removed.

The primary motivation for this CL is that AudioProcessing currently
doesn't support more than two channels and we'd like a way to pass
more channels to the beamformer.

R=aluebs@webrtc.org, mgraczyk@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#9157}
2015-05-08 05:17:58 +00:00
Bjorn Volcker
1ff218fac3 audio_processing/aec: Do not scale target delay at startup when on Android
When running AEC in extended_filter mode there is no startup phase to evaluate the reported system delay values.
Instead we simply use the first value and scale by two to avoid over compensating when synchronizing render and capture.
We don't need to be too accurate since we have extended the filter length.

On Android we use fixed (measured) reported delay values.
There is no need to be extra conservative here, because that is already built-in in the measured value.
In fact, the difference between devices is large and with such an extra conservative approach the true delay can not be caught by the filter length.
With this change we can improve performance on some devices.

BUG=4472
TESTED=offline on recordings from various devices
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9144}
2015-05-06 10:08:50 +00:00
Bjorn Volcker
532531b656 audio_processing/delay_estimator: Always update robust validation statistics
The delay estimator has a robust_validation mode used to deliver more stable delay etimates. The cost is increased reaction time when we have a delay jump.
This mode can be turned on and off on the fly, but statistics are not updated while disabled. This makes the estimator unreliable if it is enabled on the fly.

This CL makes sure the update is always done.

BUG=4472
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9143}
2015-05-06 09:58:09 +00:00
Bjorn Volcker
40a6d593d2 audio_processing/tests: Adds a flag to unpack input data to text file
For quick and easy aecdump verifiation storing data as text speeds up the issue tracking process, since anyone can simply view values like mic volume.

BUG=4609
TESTED=verified unpacking an aecdump with flag --txt stores that data in text files
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9142}
2015-05-06 08:51:47 +00:00
Bjorn Volcker
3cfa756f37 audio_processing/aec: Fixes an incorrect sampling rate multiplier when processing in 48 kHz
In AEC a fixed fft size is used, but processing can in the lower band be in either 8 or 16 kHz.
Therefore we need a multiplier/rate factor to, for example, map frequency bands in Hz to frequency bins.

The multiplier/rate factor can only be either 1 or 2, but when 48 kHz support was added it was assigned 3.

BUG=crbug.com/482424
R=aluebs@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9117}
2015-04-29 18:22:50 +00:00
Bjorn Volcker
beb9798ab4 audio_processing: Fixed incorrect usage of SetExtraOptions() in offline tool
The way SetExtraOptions() is used today only applies for any one configuration change. The correct way is to set it after all flags have been scanned.

The prefered way to solve this is to use gflags and scan once, followed by applying the configuration when creating audio_processing. This is what is done in the new test tool audioproc_float.cc, but there are still some things left to do before we can replace this one.

BUG=N/A
TESTED=locally
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9097}
2015-04-28 11:52:30 +00:00
Alejandro Luebs
5a92aa8440 Add 3-band filter-bank implementation
The implementation is a FIR filter bank with DCT modulation, similar to the proposed in "Multirate Signal Processing for Communication Systems" by Fredric J Harris.
The lowpass filter prototype has these characteristics:
* Passband ripple = 0.3dB
* Passband frequency = 0.147 (7kHz at 48kHz)
* Stopband attenuation = 40dB
* Stopband frequency = 0.192 (9.2kHz at 48kHz)
* Delay = 24 samples (500us at 48kHz)
* Linear phase

This filter bank does not satisfy perfect reconstruction. The SNR after analysis and synthesis (with no processing in between) is approximately 9.5dB depending on the input signal after compensating for the delay.

The performance on my workstation of AudioProcessing (with AGC and NS enabled) on a 413s recording compared to previous versions is as follows:
* Input signal has 32kHz sample rate: 3.01s
* Resampling 48kHz to 32kHz: 3.56s
* Today's temporary filter bank: 5.67s
* This filter-bank: 4.62s

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

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

Cr-Commit-Position: refs/heads/master@{#9090}
2015-04-27 18:34:16 +00:00
Bjorn Volcker
fb49451014 Disables mic bump-up level if not built with chromium
In http://chromegw.corp.google.com/viewvc/chrome-internal?view=rev&revision=61016 a feature to bump up low input audio levels to a fixed value of 33%. In https://webrtc-codereview.appspot.com/43109004/ a configuration to choose an arbitrary level was added, but still using 33% as default.
The original bump-up feature was added to fix audio issues in chrome, but affected also non-chrome users. This CL disables the feature for non-chrome applications.

Note that the default value is set to 0, but any value up to 12 will do. Zero was selected because it is more clear that the feature is turned off.

BUG=4529
R=andrew@webrtc.org, tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9048}
2015-04-22 04:39:47 +00:00
Henrik Kjellander
f2497cf517 Fix unknown option '-msse2' warning
R=andrew@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9016}
2015-04-16 06:57:12 +00:00
Alejandro Luebs
5d22c006eb Add performance tests flag to audioproc_float
R=andrew@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9012}
2015-04-15 18:26:34 +00:00
Bjorn Volcker
adc46c4cf7 audio_processing/agc: Adds config to set minimum microphone volume at startup
The AGC is currently bumping up the mic volume to 33% at startup if it is below that level. This is to avoid getting stuck in a poor state from which the AGC can not move, simply a too low input audio level. For some users, 33% is instead too loud.

This CL gives the user the possibility to set that level at create time.
- Extends the Config ExperimentalAgc with a startup_mic_volume for the user to set if desired. Note that the bump up does not apply to the legacy AGC and the "regular" AGC is controlled by ExperimentalAgc.
- Without any actions, the same default value as previously is used.
- In addition I removed a return value from InitializeExperimentalAgc() and InitializeTransient()

This has been tested by building Chromium on Mac and verify through apprtc that
1) startup_mic_volume = 128 bumps up to 50%.
2) startup_mic_volume = 500 (out of range) bumps up to 100%.
3) startup_mic_volume = 0 bumps up to 4%, the AGC min level.

BUG=4529
TESTED=locally
R=andrew@webrtc.org, kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9004}
2015-04-15 09:42:35 +00:00
Bjorn Volcker
0f911d71a7 Refactor audio_processing/nsx: Removed usage of macro WEBRTC_SPL_MEMCPY_W16
The macro assumes int16_t pointers, but there is no check for it.

BUG=3348,3353
TESTED=locally on Linux and trybots
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8987}
2015-04-13 13:45:07 +00:00
Bjorn Volcker
f6a99e63b6 Refactor audio_processing: Free functions return void
There is no point in returning an error when Free() fails. In fact it can only happen if we have a null pointer as object. There is further no place where the return value is used.

Affected components are
- aec
- aecm
- agc
- ns

BUG=441
R=kwiberg@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8966}
2015-04-10 05:56:59 +00:00
Richard Coles
d417c93c10 Remove android_webview_build conditions.
Now that android_webview_build is no longer supported, remove build
conditionals referencing it and also remove the extra level of
indirection used to reference the cpufeatures target.

BUG=chromium:440793
R=henrika@webrtc.org

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

Patch from Richard Coles <torne@chromium.org>.

Cr-Commit-Position: refs/heads/master@{#8963}
2015-04-09 15:36:13 +00:00