Commit graph

5800 commits

Author SHA1 Message Date
Forest Bond
249218b944 module-combine-sink: Initialize smoother in paused state
The smoother is paused on initialization and resumed when the sink
state is set to running.  Otherwise, early latency estimates are
too low since there is some delay between module initialization and
entering the running state.

After the smoother is initially resumed, it is paused when the sink
state is not running.  The previous behavior was to pause only when
the sink enters suspended state, however, this would lead to large
errors in latency estimates after the sink has been idle for some
time.
2011-06-02 11:52:01 +02:00
Forest Bond
ab808930ef module-combine-sink: Initialize smoother with offset pa_rtclock_now()
The smoother was being initialized with offset zero, which caused
the sink latency to be unconditionally reported as zero.
2011-06-02 11:46:59 +02:00
Colin Guthrie
51d53016f3 streams: Fix the actual resampler method shown in debug messages. 2011-06-02 11:44:21 +02:00
Daniel Mack
71e936da58 osx: pass -headerpad_max_install_names to the linker, too
This option won't make it to the actual libtool command which does the
linking when not prefixed with -Wl,
2011-05-30 11:26:09 +01:00
Lu Guanqun
6efa693fe7 alsa-mixer: Fix the assumption that volume is always positive
Add a variable to track whether the actual volume is set or not.
Suppose this:
	min volume: -126	max volume: 0
then when user wants to set some constant volume to -10, it would fail.

While the alsa values are typically positive, some values are "funky"
and have negative values. It is desirable to fix this at the alsa
level so that the numbers are positive, but it's not technically
invalid, and thus we have to support it.

Discussed here:
http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/9832
and
http://thread.gmane.org/gmane.linux.alsa.devel/85459
2011-05-30 11:22:21 +01:00
Arun Raghavan
b0f5b8d2fa echo-cancel: Fix a crash is speex cleanup
If module initialisation fails, the speex done() function might try to
free a value that's not been allocated yet. Adding protection for this
condition.
2011-05-28 07:59:49 +05:30
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
Bart Cerneels
4fd3efa46b echo-cancel: Speex preprocessor has to run *after* the AEC.
This is how it is expected to be run.
2011-05-28 07:56:00 +05:30
Arun Raghavan
0ecf51119a echo-cancel: Add speex preprocessing
This allows the selective enabling of speex' preprocessing algorithms
before running the echo-canceller -- for now this includes automatic
gain control, noise suppression and echo suppression. It's all off by
default for now, though at some point in the near future we might want
to enable at least denoising by default.

The denoising works pretty well, though we might want to add a way to
tweak the noise-suppression knob that libspeex provides.

The AGC option is just a stop-gap -- we need a real AGC mechanism that
tweaks the source volume rather than doing this in software.

The speex documentation mentions VAD and dereverb, but it appears that
these are not complete yet.

We don't do all this in a separate module from module-echo-cancel to
avoid the overhead of adding another virtual source. It makes more sense
to make a separate virtual source module that can be used for cases
where preprocessing is useful but AEC is not (for e.g. noise suppression
for fan noise in a recording application).

Another reason to keep this integrated with the AEC module is that the
echo suppression bits use the speex echo canceller state. This does leak
some information about the AEC implementation into module-echo-cancel,
but this is unavoidable.
2011-05-24 13:51:28 +05:30
Arun Raghavan
117c714594 format: Fix channel map handling
Channel map handling in the extended API was broken. Thanks for Milos_SD
for pointing this out on IRC.
2011-05-20 19:21:02 +05:30
Arun Raghavan
f4eccad1e6 echo-cancel: Remove extraneous debug message
This was making it impossible to run in debug mode with save_aec=1
2011-05-20 10:01:57 +05:30
Arun Raghavan
8305284cd2 echo-cancel: Don't overpad variable
The padding was to be 16 bytes, not 16 elements.
2011-05-16 20:22:10 +05:30
Sjoerd Simons
2bc2abc68a build-sys: Link libpulse directly to libdbus-1 if needed
Linking libpulse with gold or when using ld --no-add-needed fails
as libpulse uses dbus methods directly but isn't explicitly linked to it.
So link to it when needed :)
2011-05-16 11:08:32 +01:00
Colin Guthrie
4ff2e85894 protocol-native: Fix memory leaks introduced in protocol 21 (passthrough support)
The proplist used may never be freed if an error condition was found with
CHECK_VALIDITY macro and the formats idxset was never freed regardless
of error state.

This change fixes adds a new maco CHECK_VALIDITY_GOTO() which allows
for cleanup to be done before returning.
2011-05-16 09:59:35 +01:00
Colin Guthrie
e59fc6c6bc sink-input: Fix memory leak of proplist when sending format-changed events 2011-05-16 09:59:19 +01:00
Tanu Kaskinen
3c4accfde2 loopback: Add a modarg for disabling remixing. 2011-05-15 15:11:36 +01:00
Colin Guthrie
ce8b03bb26 bluetooth: Fix early return styling and add missing return value
Thanks to Tanu Kaskinen for pointing out the missing return.
2011-05-15 15:05:55 +01:00
Jyri Sarha
ff79b3147c suspend-on-idle: Trigger mempool vacuuming
In a setup with one or more filter sinks or sources there is always at
least one stream existing. In such a situation normal mempool
vacuuming never happens. This patch causes suspend-on-idle module to
vacuum memory when ever it notices that all sinks and sources are
suspended. The behavior can be enabled with a module parameter.
2011-05-15 14:59:35 +01:00
Jyri Sarha
47b7ca830e protocol-native: Stop auto timing updates if connected to suspended sink or source
This quite is an old patch. It was added to N900 to avoid unnecessary
wake-ups when the phone is in power save mode (= blank screen and
no user interaction). In this situation if the user had a browser
window with flash animation open pulseaudio kept waking up every
10 seconds, causing a severe hit to use times.

Anyway I do not see any reason to send timing updates if the sink or
source where the stream is connected to is suspended.
2011-05-15 14:58:12 +01:00
Colin Guthrie
d5cb59a8d6 i18n: Fix POTFILES 2011-05-15 14:31:22 +01:00
Colin Guthrie
3e0332b071 tests: Fix resampler-test.
This has been broken since c376ac5920 when run
without any arguments. Passing in -v (verbose) caused the test to work fine.

I think this oversight is just a thinko in the original work but it obviously
broke 'make check' and thus distcheck.

Also fix a couple compiler warnings.
2011-05-15 14:16:52 +01:00
Colin Guthrie
26b4bd74aa Merge branch 'passthrough' 2011-05-15 13:14:33 +01:00
Arun Raghavan
7ebc503363 module-tunnel: Update for recent protocol changes
This updates the tunnel module for protocol version >= 19.

module-tunnel-sink does not proxy server-side passthrough support (yet).
This would require a few more changes, namely keeping track of what
formats are available and if any other sink inputs are connected on the
server-side.
2011-05-15 10:09:35 +05:30
Arun Raghavan
cebb4e031d doxygen: generate documentation for format.h 2011-05-15 10:09:35 +05:30
Arun Raghavan
1404db3d47 format: Add some convenience API for setting properties
Adds functions to set sample format, rate, channels and channel map on a
format to make life easier for users of the API.
2011-05-15 10:09:35 +05:30
Arun Raghavan
8d076d0990 format: Extend properties to handle lists/ranges
This replaces the simple string used by pa_format_info's proplist with a
JSON string (accessed via new API only). This allows us to express lists
and ranges more cleanly, and embed type information for future
extensibility.

We use json-c for JSON parsing. This is a lightweight depdency (32 KB on
my system) and avoids the hassle of having to reinvent a JSON parser.

Also included is a test which verifies functionality and is
valgrind-clean.
2011-05-15 10:09:35 +05:30
Arun Raghavan
62f56a9f6b sink-input: Provide more information to client when format is lost
When the sink format changes and we kill the stream, clients need a way
to know (a) what device they should reconnect to, and (b) what the
stream running time was when the stream got killed (pa_stream_get_time()
won't work after the stream has been killed). This adds these two bits
of information in the event callback's proplist parameter.
2011-05-15 10:09:35 +05:30
Arun Raghavan
d1f13fa781 format: Add correct sample spec conversion for E-AC3
IEC61937-encapsulated E-AC3 frames contain 6 audio blocks per substream,
which corresponds to 1536 samples contained a 24576-byte frame. To cope
with this, we maintain the s16le stereo sample spec, but quadruple the
sample rate so that the conversion remains accurate.
2011-05-15 10:09:35 +05:30
Arun Raghavan
13a33abf45 format: Export pa_format_info_is_compatible in API
This allows clients to perform checks between formats as well.
2011-05-15 10:09:35 +05:30
Arun Raghavan
53091cc5f0 sink-input: Add a format-lost event
This event is emitted if the sink-input could not be moved to a new sink
because it doesn't support the format of the sink-input. Clients can
reconnect their stream with a different format if they wish or
gracefully exit.
2011-05-15 10:09:34 +05:30
Arun Raghavan
cb3dcb14f8 sink-input: Don't restore volume for passthrough streams 2011-05-15 10:09:34 +05:30
Arun Raghavan
a199bfb765 sink-input: Don't print an error if a passthrough connection fails
The assertion message is misleading, since the passthrough connection
can fail for reasons the client has no control over (like other sink
inputs being connected).
2011-05-15 10:09:06 +05:30
Arun Raghavan
be4208d079 echo-cancel: Remove unnecessary noalign attribute
This was just introduced for debugging and should not have been in the
final commit. Won't make a difference at the moment since this function
is used as a pointer, but removing this in case we change this in the
future.
2011-05-11 10:30:38 +01:00
Arun Raghavan
e678beaf14 echo-cancel: Handle alignment requirement manually
PA_ALIGNED can't always guarantee that the alignment we want (the GCC
man page suggests that the linker might not be able to meet the
alignment requirements we desire). Instead, we now allocate some extra
memory and guaratee that the alignment we require is met.
2011-05-11 10:30:38 +01:00
Lennart Poettering
8eed569614 rtkit: use private bus connection in order to avoid threading issues when invoking pa_make_realtime() 2011-05-06 23:09:54 +02:00
Arun Raghavan
320b70e94e filter-apply: Mark modules as being autoloaded
(Based on Colin's review) We mark modules as being autoloaded so that
they can handle this as a special case if needed (which is required by
module-echo-cancel for now). This inverts how things were done and makes
using these modules manually less error-prone.
2011-05-03 09:13:00 +01:00
Arun Raghavan
4fb68b91ac core: Factor out passthrough checks into their own functions
Since we currently have two mechanisms to signal a passthrough
connection (non-PCM format or PA_SINK_INPUT_PASSTHROUGH flag), we move
all the related checks into functions and use those everywhere.

This makes things more consistent, and should we decide to get rid of
the flag, we only need to change pa_sink_input_*_is_passthrough()
accordingly.
2011-05-02 11:55:39 +05:30
Arun Raghavan
9a39a3df10 format: Add a type for DTS 2011-05-02 11:55:39 +05:30
Arun Raghavan
7aa84e8208 introspect: Get format of sink input
This gets the negotiated format of sink inputs in
pa_context_get_sink_input*(). Also prints the format in 'pactl list'.
2011-05-02 11:55:39 +05:30
Arun Raghavan
322980e2e3 introspect: Get formats for sinks
This gets the list of supported formats for a sink in
pa_context_get_sink_info*(). Also prints these in 'pactl list'.
2011-05-02 11:55:39 +05:30
Arun Raghavan
dedbc942ab stream: Add API to get a stream's pa_format_info 2011-05-02 11:55:38 +05:30
Arun Raghavan
8631f4e2c4 format: Add some convenience functions for printing 2011-05-02 11:55:38 +05:30
Arun Raghavan
a3a0042144 format: Const-ify some parameters 2011-05-02 11:55:38 +05:30
Arun Raghavan
49b10ba694 alsa: Reconfigure sink sample rate for passthrough inputs
When a passthrough sink-input is added, we need to reconfigure the
sink's sample rate since no resampling occurs. We revert to the original
rate when the passthrough sink-input is removed.
2011-05-02 11:55:38 +05:30
Arun Raghavan
f94bcae6bd core: Suspend monitor when a sink enters passthrough mode
In most cases it is expected that clients cannot consume compressed
data from monitor sources, so we suspend the monitor source when the
sink goes into passthrough mode.

Eventually, when the extended API includes client notifications for
changed formats, we should emit a notification on the monitor so that
clients can decide what they want to do when this happens (disconnect or
consume the data anyway).
2011-05-02 11:55:38 +05:30
Arun Raghavan
4c9d53f3f5 sink: Trivial typo fix in comment 2011-05-02 11:55:38 +05:30
Arun Raghavan
20f1fa17be alsa-mixer: Remove passthrough profiles
These aren't used any more - we handle passthrough mode in the iec958*
profiles now.
2011-05-02 11:55:38 +05:30
Arun Raghavan
e11770b64f core: Fix some FIXMEs for the extended API
This adds some checks that I'd postponed and adds a
"should-be-good-enough" guess for tlength when using a compressed
format.
2011-05-02 11:55:35 +05:30
Arun Raghavan
658a9153f0 sink-input: Kill passthrough streams if moving to an unsupported sink
This will eventually be replaced by a hook to let clients know that the
stream has moved so that they can gracefully reconnect and renegotiate a
supported format.
2011-05-02 11:54:48 +05:30
Arun Raghavan
8b3e68a202 sink: Fix leak in pa_sink_check_formats()
We weren't freeing the sink formats idxset.
2011-05-02 11:54:48 +05:30