Commit graph

1737 commits

Author SHA1 Message Date
David Henningsson
0ef3456f68 device-port: Add a property list to ports.
They're not used for anything yet, but hopefully soon they'll be.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-12-02 18:41:57 +02:00
Maarten Bosmans
75c2f4d09e resampler: Some minor tweaks
that were forgotten in the previous peaks resampler commits.
2011-11-28 11:08:05 +00:00
Maarten Bosmans
40e35efbce resamplers: Improve performance of peaks resampler
This is mainly achieved by special-casing the common 1ch float case,
which is used by applications such as pavucontrol.
2011-11-27 16:25:04 +00:00
Maarten Bosmans
115d903ab7 resamplers: Rework the peaks resampler
The algorithm had been implemented the same way as the trivial resampler.  But
an important difference between the two is that the trivial resampler can write
an output as soon as the first corresponding input sample is seen, whereas the
peaks resampler must have read all input samples before writing an output
sample.

With this rework, the peaks resampler now outputs samples correctly when the
input data is spanning multiple memblocks.
2011-11-27 16:25:04 +00:00
Maarten Bosmans
ae179d7321 shm: Use a goto rather than early return for consistency.
This is functionally the same but is easier to understand.
2011-11-27 16:25:04 +00:00
Maarten Bosmans
e8028304b3 win32: Avoid some compiler warnings when cross-compiling for mingw32
Autoconf documentation says that AC_FUNC_SELECT_ARGTYPES shouldn't be used anyway.
2011-11-27 16:24:48 +00:00
Colin Guthrie
5958208c26 device-port: Remove redundant include after the better circular dep fix. 2011-11-27 15:44:23 +00:00
Maarten Bosmans
cbb3a8a61c Use simple free function in pa_queue_free 2011-11-27 15:42:52 +00:00
Maarten Bosmans
e45b02de55 Use simple free function in pa_dynarray_free 2011-11-27 15:42:52 +00:00
Tanu Kaskinen
46920bab16 device-port: Fix the circular dependency problem more cleanly.
Declaring structs before including anything ensures that the
structs are available for everybody in case of circular includes.
2011-11-27 17:22:42 +02:00
Maarten Bosmans
8539fe9765 resamplers: Optimize trivial resampler
This improves the performance of a typical s16 2ch resampling by 88%.
2011-11-27 14:54:01 +00:00
Maarten Bosmans
61890ae20d resamplers: Use better variable name in trivial resampler 2011-11-27 14:54:01 +00:00
Maarten Bosmans
761fbee663 resamplers: Use fastpath assert in trivial resampler
When the assert is disabled, the trivial resampler gets a 35% performance boost.
2011-11-27 14:54:01 +00:00
Maarten Bosmans
5aedb9b7d3 pulsecore: Hardcode FRAME_SIZE_MAX_ALLOW
Instead of using PA_SCACHE_ENTRY_SIZE_MAX, the size for FRAME_SIZE_MAX_ALLOW is
set directly to the same value.  This removes the need for the core-scache.h
include, which caused an unwanted dependency of libpulsecommon on libpulsecore.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=41539
2011-11-27 14:54:01 +00:00
Colin Guthrie
c95650b929 pulsecore: Fix issue with circuilar definitions.
Without this fix, errors about previous definitions are generated in
numerous locations.

Example of error:

  CC     libpulsecore_1.98_la-auth-cookie.lo
In file included from ../../src/pulsecore/source.h:46:0,
                 from ../../src/pulsecore/sink.h:40,
                 from ../../src/pulsecore/core.h:50,
                 from ../../src/pulsecore/shared.h:25,
                 from ../../src/pulsecore/auth-cookie.c:33:
../../src/pulsecore/device-port.h:40:24: error: redefinition of typedef
'pa_core'
../../src/pulsecore/core.h:29:24: note: previous declaration of
'pa_core' was here
make[3]: *** [libpulsecore_1.98_la-auth-cookie.lo] Error 1

Overall it would be nicer if we could avoid this kind of fix, but it
would require further reorganisation that I'm not prepared to undertake
right now.
2011-11-27 14:54:01 +00:00
David Henningsson
7e5a741dd1 cli: Show card ports and jack detection status
Expose the new stuff through pacmd.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-11-26 16:58:37 +02:00
David Henningsson
47f28a5843 Notify port available status changes, and update protocol version
The recommended way of setting available status is to call
pa_device_port_set_available, which will send a subscription event
to the relevant card. It will also fire a hook.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-11-26 16:58:37 +02:00
David Henningsson
0dced7f275 Cards now has ports directly, and device port has list of profiles
This forms the base for being able to expose all ports of all
profiles (even inactive ones) to clients.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-11-26 16:46:42 +02:00
David Henningsson
d9685ec85d Turn device ports into reference counted objects
Since both cards and sinks can hold references to a port, it makes
sense to reference count them. Although no current implementation
actually has sinks with ports but without a card, it felt wrong
to make it harder to make such an implementation in the future.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-11-26 16:46:42 +02:00
David Henningsson
961ec210a6 Introduce "available" concept for ports, and communicate that to clients. Bump protocol version to 24.
Note: There is still no notification when status availability changes.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-11-26 13:47:33 +02:00
Arun Raghavan
1798c653db proplist: Add internal API to get stream group
This moves out code from module-stream-restore and makes an internal API
out of it to get a "stream group" for a given sink input or source output.
This is factored out for reuse in module-filter-*.

The stream group basically provides some means of attaching a logical
identification to the stream (by role, application id, etc.).
2011-11-24 13:03:26 +05:30
Arun Raghavan
42881d2770 core: Look up /etc/machine-id if D-Bus machine-id is not found
It appears that this is currently the fallback for early boot and other
such cases where /var might not be available. Relevant upstream commit:

http://cgit.freedesktop.org/dbus/dbus/commit/?id=66e52541d5bdd4927a5c702963749760643313f4

Thanks to Samuli Suominen <ssuominen@gentoo.org> for pointing this out
in https://bugs.gentoo.org/show_bug.cgi?id=390287
2011-11-15 12:51:31 +05:30
Maarten Bosmans
df5483f614 Remove vector.h and vector-test
This code was never used and vectorization is handled by Orc anyway.
2011-11-14 11:08:04 +05:30
Maarten Bosmans
bcee830007 rtpoll: Update comment
to reflect changes made in
32e2cd6d32
core: get rid of rt sig/timer handling since modern Linux' ppoll() is finally fixed for granularity
2011-11-14 10:54:18 +05:30
Arun Raghavan
efbfe5fecb core: Make debugging a bit simpler
This takes out a bunch of commented debug prints and puts them in
defines. Makes it easier to turn them all on/off at a single point.
2011-11-10 12:43:09 +05:30
Arun Raghavan
a813e85503 sink,source: Update sample rate if possible on stream uncork
If a stream is being uncorked and no other stream is running, we try to
update the sink/source sample rate to match it and avoid resampling.
2011-11-07 15:38:31 +05:30
Arun Raghavan
993d73d330 sink,source: Allow sample rate switching with corked streams
This updates corked streams' resamplers when switching sample rates on a
sink/source, which means the restriction of allowing sample rate updates
only when no streams are attached to a sink/source is now relaxed to
preventing updates only when there is a running stream attached.
2011-11-07 15:38:30 +05:30
Arun Raghavan
8616f82a67 sink-input,source-output: Add an update_rate() function
This factors out the resampler updating code from finish_move() and
makes a separate function for use from other points.
2011-11-07 15:38:30 +05:30
Arun Raghavan
75573435a0 sink,source: Fix corked stream handling in update_rate()
This fixes the conditional that checks for corked streams and prevents
rate updates.
2011-11-07 11:31:42 +05:30
Arun Raghavan
0a238f69ad cli: Add a dump-volumes command
The purpose of this command is to print all the internal volume
variables for sinks/sources and all corresponding
sink-inputs/source-outputs  to make debugging and reasoning about
volume-related issues easier.
2011-11-04 15:32:13 +05:30
Lars R. Damerow
7a387fed36 alsa: support fixed latency range in alsa modules
This adds a boolean module parameter to disable automatic dynamic
latency readjustments on underruns, but leaves automatic dynamic
watermark readjustments untouched.
2011-11-03 21:17:54 +01:00
Tanu Kaskinen
6f148787e0 sink, source: Join two ifs with the same condition.
Changes in v2:
 * Moved the comment in source.c to the right place.
2011-11-02 19:17:17 +05:30
Arun Raghavan
06fc121eef core: Add a string list membership check function
This adds a pa_str_in_list() to check for a given string in a
space-separated list of strings. For now, this is merely present to
avoid duplication of role matching code (intended roles can be a
space-separate list) across modules.
2011-10-28 15:21:09 +02:00
Arun Raghavan
4ce0eb18c2 native: Fix Solaris build
tcpwrappers has some Solaris-specific quirks that need to be dealt with.
Patch submitted by Brian Cameron <brian.cameron@oracle.com>.
2011-10-20 15:04:34 +05:30
Arun Raghavan
034006ec90 sink,source: Account for corked streams in update_rate()
pa_sink/source_used_by() ignores corked/monitor streams, but we need to
make sure there aren't any of these while updating rate (at least for
now -- this is a restriction that would be nice to get rid of).
2011-10-18 09:53:20 +05:30
Arun Raghavan
59d058dea4 sink,source: Handle equal default and alternate sample rates 2011-10-17 20:20:14 +05:30
Arun Raghavan
b9ff90fef8 source: Bring rate update code in sync with sink code
Basically adds code to handle passthrough sources. This isn't a tested
path at the moment, but in the future, when we do wish to support these,
it'll save us the trouble of having to sync all the code again.
2011-10-17 20:09:50 +05:30
Pierre-Louis Bossart
f0ec495938 sink,source: support for rate update
Avoid resampling or use integer resampling when supported by the
sinks/sources

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
2011-10-17 20:09:46 +05:30
Pierre-Louis Bossart
5bcfd2b630 core: infrastructure for alternate sampling rate
New parameter to avoid resampling. BIG power savings here...

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
2011-10-17 19:23:26 +05:30
Arun Raghavan
dbe8f2e595 macro: typedef pa_bool_t to bool instead of _Bool
They're functionally equivalent, and the former lets the header be
included in C++ as well.
2011-10-17 16:42:59 +05:30
Arun Raghavan
5c28acb1db namereg: Don't set default sink/source on get()
This removes the nasty side-effect that a call to
pa_namereg_get_default_{source,sink}() will also *set* the default
source/sink.

This is a more complete fix for commit 766dbc68 ("conf: Make sure
module-dbus-protocol is loaded after module-default-device-restore")

https://bugs.freedesktop.org/show_bug.cgi?id=40897
2011-10-10 16:08:43 +05:30
David Henningsson
60811ec15d source-output: Do not use unset channel map in pa_source_output_new
This problem was found when tracing down a crash coming from the
esound protocol, which does not set a channel map.

BugLink: http://bugs.launchpad.net/bugs/864071
Signed-off-by: David Henningsson <david.henningsson@canonical.com>

N.B.: As Colin notes, this is because commit 117c7145 was incomplete
("format: Fix channel map handling")
2011-10-05 20:58:14 +05:30
Maarten Bosmans
b0d9c78f3e Make pulse build with clang again
The casts are not supported there.
2011-10-01 13:25:16 +01:00
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
Tanu Kaskinen
4d930f19f9 sink: Add some comments about the rewind handling during stream moves. 2011-10-01 13:25:15 +01:00
Tanu Kaskinen
307911c72e sink: Move updating the requested latency after the rewind request when finishing a stream move. 2011-10-01 13:25:15 +01:00
Arun Raghavan
6a9272f950 sink,source: Avoid unnecessary call to pa_rtclock_now()
pa_{sink,source}_volume_change_apply were being called by the ALSA I/O
thread on every iteration, causing a pa_rtclock_now() call, which can
sometimes be heavy. We avoid this call by making sure there actually are
changes to apply before proceeding into the function.

While we're at it, also dropping a redundant check on s->write_volume.
2011-09-27 22:30:30 +05:30
David Henningsson
0cebb630da Fix crash in threaded message queues
Once in a million or so, this typo causes a crash when two threads
simultaneously try to call "pa_asynqmsgq_write_poll".

BugLink: http://bugs.launchpad.net/bugs/853560
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-09-25 13:44:34 +01:00
Arun Raghavan
cae3235369 sink,source: Handle missing in the shared volume case
This makes sure that when we're traversing the device chain for sources
and sinks with shared volume, we handle the case that a sink-input or
source-output of one of these might be unlinked (while unloading a
module, for example).
2011-09-21 23:00:02 +05:30
David Henningsson
f8624a7876 sink,source: Avoid crash by not updating volume on shutdown
Sometimes the ALSA mixer can be modified during a point at shutdown
which causes a race condition trying to update the volume of an
unlinked sink.

Includes typo fix by our Chief Typo Spotter, Colin, and a clarifying
comment by me.

BugLink: http://bugs.launchpad.net/bugs/841968
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-09-14 15:47:17 +05:30