Commit graph

123 commits

Author SHA1 Message Date
Tanu Kaskinen
aca1c4001d echo-cancel: Fix memblockq length check.
In addition to changing "plen > u->blocksize" to "plen >=
u->blocksize", I also removed one of the duplicated ifs.
2012-04-27 11:37:26 +03:00
Tanu Kaskinen
af78613b70 echo-cancel: Drop the correct amount of samples when skipping. 2012-04-27 11:36:56 +03:00
Peter Meerwald
202b7e3abb echo-cancel: Upper/lowercase in comment. 2012-04-17 18:15:03 +03:00
Peter Meerwald
be9ef2e96c echo-cancel: Better handling of error conditions in test 2011-12-14 21:53:39 +05:30
Peter Meerwald
6eb0f133c4 echo-cancel: Begin log message with uppercase letter 2011-12-14 21:52:17 +05:30
Peter Meerwald
f40df053c8 echo-cancel: Set file mode to binary in test code 2011-12-14 21:52:05 +05:30
Peter Meerwald
dc5a39b124 echo-cance: Make Adrian canceller optional
makes the Adrian echo canceller implementation optional at compile time

this patch supersedes an earlier patch proposal and addresses the following
comments:
* separate patch from speex dependency rework (Arun)
* check that at least one EC implementation is available (Arun)
* properly align yes/no in configure summary for Adrian (Frederic)
2011-12-13 09:16:32 +05:30
Peter Meerwald
5f2286e6f7 build-sys: Make speex library optional
make speex library dependency optional, this affects the resampler
and the echo canceller module

this patch supersedes an earlier patch proposal and addresses the following
comments:
* fix order of pa_echo_canceller_method_t enum and ec_table (Frederic)
* the default resampler is speex if available as before, otherwise ffmpeg (Arun)
* does not touch the Adrian EC implementation (see separate patch) (Arun)
2011-12-13 09:10:08 +05:30
Peter Meerwald
8fc8d3d586 echo-cancel: Fix memory leak in test program
memory for pa_echo_canceller is allocated in init_common() a second time,
hence the allocated memory in main() is leaked
2011-11-29 10:08:04 +05:30
Arun Raghavan
23fb081795 echo-cancel: Fix warning for undefined HAVE_WEBRTC 2011-11-28 15:16:55 +05:30
Arun Raghavan
aaf0f5bd6e filters: Fix the master source/sink when autoloaded
When autoloaded, it is expected that module-filter-apply (or whatever is
loading us) will take care of applying the filter on the correct
sink/source master. Instead of adding complexity by tracking what is
currently being filtered, we just disallow filtering anything except the
original master sink/source and let module-filter-apply or whatever is
loading us deal with dynamic sink/source changes.
2011-11-24 12:35:48 +05:30
Arun Raghavan
ac3d66f978 echo-cancel: Use more human-friendly descriptions
This makes what devices are being cancelled clearer in the UI (at the
cost of being somewhat less clear when multiple devices of the same name
are plugged, but at least that's a much smaller set than everyone).
2011-11-23 12:00:29 +05:30
Arun Raghavan
4b7b244564 echo-cancel: Use speex by default if webrtc isn't available
Thanks to Peter Meerwald <pmeerw@pmeerw.net> for pointing this out.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=42925
2011-11-15 12:51:32 +05:30
Maarten Bosmans
93f46b92c7 Squash unused variable compiler warning 2011-11-14 11:08:04 +05:30
Arun Raghavan
cc89b4aff1 echo-cancel: Make WebRTC the default canceller
Works pretty well, and isn't a CPU hog, so let's use it!
2011-11-07 19:36:23 +05:30
Arun Raghavan
3d2f2424eb echo-cancel: Add infrastructure for cancellers to do AGC
This adds some infrastructure for canceller implementations to also
perform acoustic gain control. Cancellers now have a couple of new API
calls that allow them to get/set capture volume.

This is made slightly complex by the fact that cancellation happens in
thread context while most volume mangling needs to be done in main
context. To deal with this, while getting the volume we save source
volume updates as they are propagated to thread context and use this
cached value for queries. To set the volume, we send an async message to
main context and let that set the source volume.
2011-11-07 17:37:50 +05:30
Arun Raghavan
e310f4853e echo-cancel: Adapt test code for drift compensation
This dumps out an additional file with each line having a command of the
form:

p <number of playback samples processed>
c <number of capture samples processed>
d <drift as passed to set_drift()>

The test program can be provided this file to "replay" the data exactly
as when it was run live.

The non-drift-compensation path is retained as-is since it is much
simpler.
2011-11-01 18:20:43 +05:30
Arun Raghavan
23ce9a4f79 echo-cancel: Plug in WebRTC drift compensation
This adds the ability for echo cancellers to provide their own drift
compensation, and hooks in the appropriate bits to implement this in the
WebRTC canceller.

We do this by introducing an alternative model for the canceller. So
far, the core engine just provided a run() method which was given
blocksize-sized chunks of playback and record samples. The new model has
the engine provide play() and record() methods that can (in theory) be
called by the playback and capture threads. The latter would actually do
the processing required.

In addition to this a set_drift() method may be provided by the
implementation. PA will provide periodic samples of the drift to the
engine. These values need to be aggregated and processed over some time,
since the point values vary quite a bit (but generally fit a linear
regression reasonably accurately). At some point of time, we might move
the actual drift calculation into PA and change the semantics of this
function.

NOTE: This needs further testing before being deemed ready for wider use.
2011-11-01 18:20:32 +05:30
Arun Raghavan
6df6eb959e echo-cancel: Add the WebRTC echo canceller
This adds the WebRTC echo canceller as another module-echo-cancel
backend. We're exposing both the full echo canceller as well as the
mobile echo control version as modargs.

Pending items:

1. The mobile canceller doesn't seem to work at the moment.

2. We still need to add bits to hook in drift compensation (to support
   sink and source from different devices).

The most controversial part of this patch would probably be the
mandatory build-time dependency on a C++ compiler. If the optional
--enable-webrtc-aec is set, then there's also a dependency on libstdc++.
2011-10-17 16:42:59 +05:30
Arun Raghavan
e40bddc946 echo-cancel: Simplify checking if AEC is active
This removes the active_mask bits and just check source and sink states
directly.
2011-10-17 16:42:59 +05:30
Arun Raghavan
4bd357ae57 echo-cancel: Don't process if sink is unconnected
If there's no playback data, there's no point in actually processing the
capture data.
2011-10-12 13:04:57 +05:30
Arun Raghavan
518338ac0e echo-cancel: Close debug files on module unload 2011-10-10 22:18:22 +05:30
Arun Raghavan
f1e41a78cc echo-cancel: Drop sink/source samples before processing begins
This moves the bits that skip source/sink samples for resync from inside
the processing loop to just before. The actual effect should be the
the same.
2011-10-10 13:27:17 +05:30
Arun Raghavan
17011fcf70 echo-cancel: Skip processing till there's enough data
This makes sure that we only perform any processing (resync or actual
cancellation) after the source provides enough data to actuall run the
canceller.
2011-10-10 13:26:27 +05:30
Arun Raghavan
cee6011572 echo-cancel: Skip canceller when no source outputs are connected
When a source-output isn't connected to our virtual source, we skip echo
cancellation altogether. This makes sense in general, and makes sure
that we don't end up adjusting for delay/drift when nothing is
connected. This should make convergence faster when the canceller
actually starts being used.
2011-10-10 13:26:06 +05:30
Arun Raghavan
4cacb1b670 echo-cancel: Increase threshold for resyncing, make it configurable
This increase the threshold for difference between the playback and
capture stream before samples are dropped from 1ms to 5ms (the
cancellers are generally robust to this much and higher). Also, we make
this a module parameter to allow easier experimentation with different
values.
2011-10-10 13:25:46 +05:30
Arun Raghavan
0429fe6153 echo-cancel: Don't crash if adjust_time = 0 2011-10-10 13:25:40 +05:30
Arun Raghavan
f9b59e457c echo-cancel: Remove redundant variable 2011-10-10 13:25:35 +05:30
Arun Raghavan
3f5c5582f4 echo-cancel: Add a standalone test program
This is useful to test the canceller implementation on data from disk
rather than testing live. Handy for comparing implementations reliably.
2011-10-10 13:25:25 +05:30
Arun Raghavan
e681469154 echo-cancel: Fail if loaded between a sink and its monitor
Loading between a sink and its monitor causes a deadlock (while sending
messages for latency snapshots). It isn't a case that has any real
conceivable use, so let's just disallow it.
2011-10-04 14:08:01 +05:30
Tanu Kaskinen
666261ece8 memblockq: Improve debuggability by storing a name and a sample spec.
These are not used for anything at this point, but this
makes it easy to add ad-hoc debug prints that show the
memblockq name and to convert between bytes and usecs.
2011-10-01 13:25:16 +01:00
Arun Raghavan
38be4a2d44 echo-cancel: Use volume sharing by default
Uses the shared volume infrastructure by default with an option to
fallback on the old pretend-volume-sharing-that-kind-of-works if someone
wants it that way.

Users who keep left != right (or any sort of unbalanced channel volumes)
will likely want to disable shared volumes since it will cause their
master sink/source volume to be balanced.

This really isn't a very pleasant scenario since users would need to
manually set up echo cancellation in their config for this (until we
have a way to store module configuration). That said, the majority case
benefits from the volume sharing, so let's not wait for the
configuration infrastructure to be ready to use this.
2011-09-14 14:15:01 +05:30
Arun Raghavan
394d8a6b6b echo-cancel: Get rid of annoying compiler warnings 2011-08-29 22:13:44 +05:30
Arun Raghavan
837ac4c225 echo-cancel: Don't allow streams to attach while unloading
When unloading, some module may end up trin to move a sink-input or
source-output back onto our virtual sink/source, causing an infinite
loop of us moving the stream away and having it moved back.

We prevent this from happening by preventing any stream from being
attached during unload.
2011-08-29 21:42:57 +05:30
Arun Raghavan
fe52c351c3 echo-cancel: Make save_aec modarg a bool instead of an int 2011-08-29 21:42:57 +05:30
Maarten Bosmans
168254f3bf echo-cancel: Use stream index in debug message
instead of the less useful stream pointer.
2011-08-25 18:19:41 +05:30
Arun Raghavan
7dfb166dba echo-cancel: Move speex preprocessing out of the main module
I initially included put the Speex preprocessing assuming that we'd want
to use the digital gain control and noise suppression from Speex for all
echo cancelling implementations. In practice, we're probably going to
get entire implementations all processing in one package (WebRTC, custom
modules from various vendors, etc.).

This moves out this preprocessing and related knobs into the speex
implementation, which serves to clean out all implementation-specific
details from the module-echo-cancel core.
2011-08-25 18:08:42 +05:30
Arun Raghavan
af6229cbe1 echo-cancel: Use pa_streq instead of strcmp 2011-08-25 17:53:37 +05:30
Maarten Bosmans
c5dca7cf2b More spelling fixes 2011-08-25 11:27:47 +01:00
Maarten Bosmans
b4e938e194 Move i18n.[ch] to src/pulsecore
The header is used in files troughout the tree and is not included in the public api,
so it belongs in pulsecore, not in pulse.
2011-08-11 13:23:42 +02:00
Colin Guthrie
6c6b50d6a8 alsa: Reinitialise the mixer on port change.
This allows us to flip from software to hardware volume control as the port's
mixer path dictates.
2011-07-20 22:23:10 +01:00
Colin Guthrie
a9cf320bc1 devices: Set certain sink/source flags automatically.
Some sink flags are really just a product of what callbacks
are set on the device. We still enforce a degree of sanity
that the flags match the callbacks set, but we also set the
flags automatically in our callback setter functions to
help ensure that a) people use them and b) flags & callbacks
are kept in sync.
2011-07-20 22:20:37 +01:00
Colin Guthrie
ded07a5898 devices: Use wrapper functions to set the *_volume and *_mute callbacks.
This is not currently useful but future commits will make further
changes concerning automatic setting of flags and event delivery
that makes this structure necessary.
2011-07-19 19:50:43 +01:00
Arun Raghavan
0f91e43d99 echo-cancel: Set sane defaults for module initialisation
This picks sane defaults for the sample spec used (32 kHz, mono) and
preprocessing (on by default). This should make it unncessary to provide
additional parameters in the default desktop case.

The main exception would be decreasing the sample rate for hardware with
limited processing power (can bring it down to 16 or 8 kHz).
2011-07-09 12:59:11 -07:00
Maarten Bosmans
dd9265ac78 Remove unnecessary #includes 2011-06-22 23:12:20 +01:00
Colin Guthrie
dffc4d18d3 capture: Implement per-stream volume control for capture streams.
This piggy backs onto the previous changes for protocol 22 and
thus does not bump the version. This and the previous commits should be
seen as mostly atomic. Apologies for any bisecting issues this causes
(although I would expect these to be minimal)
2011-06-22 22:45:27 +01:00
Colin Guthrie
5d35375aa7 capture: Add the passthrough format negotiation to capture streams.
This helps to keep the API more symmetrical and also potentially
allows support for passthrough monitor sources at some point in the future.
2011-06-22 21:55:27 +01:00
Arun Raghavan
4e9328cb93 echo-cancel: More preprocessing fixes
The speex_preprocess_ctl() function takes a spx_int32_t, but we've been
passing a pa_bool_t, which could potentially crash.
2011-06-13 15:25:54 -07:00
Arun Raghavan
b2f83b2502 echo-cancel: Fix preprocessor initialisation
We were using the block size in bytes instead of samples, which meant
preprocessing was broken. This fix makes a large-ish difference in the
quality of echo-cancellation with speex.
2011-06-13 15:25:32 -07:00
Bart Cerneels
9e78de2da2 echo-cancel: Fix echo suppression, add some knobs
The echo suppress attenuation value was being incorrectly modified.
Fixed and added 2 arguments to change the attenuation of the residual
echo filter. Default values of the speex preprocessor will be used when
omitted.
2011-05-28 07:59:07 +05:30