platform/upstream/pulseaudio.git
8 years agoallow-passthrough: Add module to allow passthrough streams always go through
Guillaume Desmottes [Fri, 18 Mar 2016 14:28:12 +0000 (15:28 +0100)]
allow-passthrough: Add module to allow passthrough streams always go through

For various use-cases a passthrough stream should have priority over all
other streams and get exclusive access to the sink regardless of whether
any other streams are playing.

An example use-case is ensuring Kodi can successfully start video
playback (with passthrough) even if an external notification sound
happened to be playing at the same time.

Signed-off-by: Arun Raghavan <git@arunraghavan.net>
8 years agoclient, protocol-native: Use macros for protocol version/flag access
Arun Raghavan [Mon, 25 Apr 2016 12:42:39 +0000 (18:12 +0530)]
client, protocol-native: Use macros for protocol version/flag access

This makes it easier to read and cleaner in general.

8 years agoUpdate NEWS for 9.0 v9.0
Arun Raghavan [Wed, 22 Jun 2016 06:52:04 +0000 (12:22 +0530)]
Update NEWS for 9.0

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agosink-input,source-output: Fix crasher while setting property
Arun Raghavan [Tue, 21 Jun 2016 11:49:39 +0000 (17:19 +0530)]
sink-input,source-output: Fix crasher while setting property

We were missing a case where a property is first set, and then cleared
by setting a NULL value.

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agopstream: Fix use of uninitialized value: ancillary fd cleanup flag
Ahmed S. Darwish [Fri, 17 Jun 2016 19:56:41 +0000 (21:56 +0200)]
pstream: Fix use of uninitialized value: ancillary fd cleanup flag

As reported by valrgrind

  ==30002== Conditional jump or move depends on uninitialised value(s)
  ==30002==    at 0x5CB883C: pa_cmsg_ancil_data_close_fds (pstream.c:193)
  ==30002==    by 0x5CBB161: do_write (pstream.c:759)
  ==30002==    by 0x5CB8B51: do_pstream_read_write (pstream.c:233)
  ==30002==    by 0x5CB8EE8: io_callback (pstream.c:279)
  ...

The pa_cmsg_ancil_data structure has two main guards:
'creds_valid', which implies that it holds credentials
information, and 'nfd', which implies it holds file descriptors.

When code paths create a credentials ancillary data structure,
they just set the 'nfd' guard to zero. Typically, the rest of
pa_cmsg_ancil_data fields related to fds are _all_ left
_uninitialized_.

pa_cmsg_ancil_data_close_fds() has broken the above contract:
it accesses the new 'close_fds_on_cleanup' flag, which is related
to file descriptors, without checking the 'nfd == 0' guard first.
Fix this inconsistency.

Reported-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agoshm: Fix use of uninitialized value: segment's shared-memory type
Ahmed S. Darwish [Fri, 17 Jun 2016 19:54:54 +0000 (21:54 +0200)]
shm: Fix use of uninitialized value: segment's shared-memory type

As shown by valgrind

  ==10615== Conditional jump or move depends on uninitialised value(s)
  ==10615==    at 0x5CC0483: shm_marker_size (shm.c:97)
  ==10615==    by 0x5CC1685: shm_attach (shm.c:381)
  ==10615==    by 0x5CC1990: pa_shm_cleanup (shm.c:453)
  ==10615==    by 0x5CC068E: sharedmem_create (shm.c:150)
  ...

Solution is to fix the shm_marker_size() signature itself: At
certain code paths like shm_attach(), we don't want to initialize
_any_ field in the passed SHM segment descriptor except after
making sure all error exit conditions have been passed.

Reported-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agodbus: Deal with double-counting module-dbus-protocol v8.99.2
Arun Raghavan [Sun, 29 May 2016 05:04:36 +0000 (10:34 +0530)]
dbus: Deal with double-counting module-dbus-protocol

We ended up dealing with it once in module init, and once more in the
new module callback. Avoiding it in the second case by name seems to be
the cleanest solution (else, we need to store the module index somewhere
in pa_dbusiface_core, which seems about as bad).

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agodbus: fix crash on LoadModule()
Tanu Kaskinen [Sat, 28 May 2016 15:54:04 +0000 (18:54 +0300)]
dbus: fix crash on LoadModule()

Commit ae415b07a07c9fe70714d01c91980edb25d966de ("dbus: Use hooks for
module new and removed events") changed the new module monitoring from
the asynchronous subscription system. Previously handle_load_module()
created the new pa_dbusiface_module object before we got
a notification of the loading of the module, but now we get the
notification already within the pa_module_load() call. That resulted
in a crash, because the module_new_cb() created the
pa_dbusiface_module object before pa_module_load() returned, and then
handle_load_module() would create another pa_dbusiface_module object
for the same module.

This patch removes the pa_dbusiface_module_new() call from
handle_load_module(). module_new_cb() is now responsible for all
pa_dbusiface_module object creations, except the ones that are created
during the initialization of module-dbus-protocol.

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agoresampler: Fix leaking lfe filter on init failure
Barun Kumar Singh [Fri, 13 May 2016 10:44:31 +0000 (16:14 +0530)]
resampler: Fix leaking lfe filter on init failure

Fix memory leak in pa_resampler_new() in resampler.c, Deallocating
memory of r->lfe_filter in case of fail.

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agoDisable LFE remixing by default
Alexander E. Patrakov [Sat, 21 May 2016 17:37:08 +0000 (22:37 +0500)]
Disable LFE remixing by default

The current LFE crossover filter removes low frequencies from the main
channels and puts them into the LFE channel with the wrong amplitude.
It is not known for sure what is the correct relative amplitude (acoustic
measurements are required with real hardware), and changing that might
introduce a new bug, "it clips the LFE channel".

So just disable the feature by default until a better understanding
emerges how it should work. This, essentially, returns the defaults
to their state as of PulseAudio 6.0.

Some more observations:

- Most of available active analog speakers on the market do the
necessary crossover filtering already, and HDMI receivers can be
configured to do that, too, so a crossover filter in PulseAudio is
harmful in these use cases.

- The "laptop with a builtin subwoofer" use case requires manual
configuration anyway because the default crossover frequency (120 Hz) is
wrong for laptop speakers.

- Finally, Windows 10 with a built-in USB audio driver does not synthesize
the LFE channel given a 5.1 card and a stereo audio stream by default.

Hides: https://bugs.freedesktop.org/show_bug.cgi?id=95021
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
8 years agoi18n: Update Polish translation
Piotr Drąg [Mon, 16 May 2016 11:52:34 +0000 (13:52 +0200)]
i18n: Update Polish translation

8 years agoresampler: Fix a memory leak in pa_resampler_ffmpeg_init()
Sachin Kumar Chauhan [Fri, 13 May 2016 08:46:16 +0000 (14:16 +0530)]
resampler: Fix a memory leak in pa_resampler_ffmpeg_init()

ffmpeg_data was not freed properly before return due to error.
It is now freed properly.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=95347
Signed-off-by: Sachin Kumar Chauhan <sachin.kc@samsung.com>
Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agobuild-sys: Bump sonames for release v8.99.1
Arun Raghavan [Thu, 12 May 2016 10:22:10 +0000 (15:52 +0530)]
build-sys: Bump sonames for release

Bumping libpulse' version since PA_RATE_MAX was changed.

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agomodule-filter-apply: Fix stale m-d-m property name in comment
Arun Raghavan [Wed, 11 May 2016 03:50:07 +0000 (09:20 +0530)]
module-filter-apply: Fix stale m-d-m property name in comment

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agoalsa: Reread and upate jack status when a card is unsuspended
Arun Raghavan [Mon, 9 May 2016 09:39:57 +0000 (15:09 +0530)]
alsa: Reread and upate jack status when a card is unsuspended

This is needed so we don't keep stale jack availability information
while the card is suspended.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=93259
Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agoalsa: ignore jack events when the user is inactive
Tanu Kaskinen [Wed, 20 Apr 2016 12:35:13 +0000 (15:35 +0300)]
alsa: ignore jack events when the user is inactive

See the big comment in the code for more details.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93259
8 years agomodule-filter-apply: Fix a memory leak
Sachin Kumar Chauhan [Tue, 10 May 2016 06:10:03 +0000 (11:40 +0530)]
module-filter-apply: Fix a memory leak

Dynamic memory allocated to 'module_name' and 'fltr' was being leaked.
Its now freed properly before return.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=95293
Signed-off-by: Sachin Kumar Chauhan <sachin.kc@samsung.com>
Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
8 years agomodule-device-manager: Refine logic to ignore filtered streams
Arun Raghavan [Fri, 6 May 2016 06:26:00 +0000 (11:56 +0530)]
module-device-manager: Refine logic to ignore filtered streams

Rather than entirely ignore streams for which we have automatically
loaded a filter, this makes module-device-manager only avoid rerouting
such streams within their existing filter hierarchy.

If, for example, m-d-m decided to move a stream which is currently
routed to speakers/mic which we requested echo cancellation for, to a
USB headset, the previous logic would disallow such a move even though
it was legitimate.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=93443

Signed-off-by: Arun Raghavan <git@arunraghavan.net>
8 years agomodule-filter-apply: Don't implement policy in module-device-manager
Arun Raghavan [Mon, 25 Apr 2016 12:44:04 +0000 (18:14 +0530)]
module-filter-apply: Don't implement policy in module-device-manager

This adds an ignore mechanism to module-device-manager and uses that
from within module-filter-apply, rather than having m-d-m have knowledge
of anything related to m-f-a.

Signed-off-by: Arun Raghavan <git@arunraghavan.net>
8 years agomodule-filter-apply: Remove some dead code
Arun Raghavan [Mon, 25 Apr 2016 11:21:53 +0000 (16:51 +0530)]
module-filter-apply: Remove some dead code

We never actually pass restore=true, so might as well remove any code
that deals with that case.

Signed-off-by: Arun Raghavan <git@arunraghavan.net>
8 years agopulsecore: Fixed possible memory leak
Deepak Srivastava [Fri, 6 May 2016 04:44:46 +0000 (10:14 +0530)]
pulsecore: Fixed possible memory leak

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=95291
Signed-off-by: Deepak Srivastava <srivastava.d@samsung.com>
Signed-off-by: Arun Raghavan <git@arunraghavan.net>
8 years agoswitch-on-port-available: prefer ports that have been selected by the user
Tanu Kaskinen [Fri, 4 Mar 2016 13:23:32 +0000 (15:23 +0200)]
switch-on-port-available: prefer ports that have been selected by the user

Let's assume that there are two output ports, and they are on
different profiles:

    * Integrated speakers (priority: 10000, available)
    * HDMI                (priority:  5900, not available)

Then the user plugs in an HDMI monitor with speakers. Since the HDMI
priority is lower than the speaker priority, we don't route to HDMI by
default. However, the user manually switches the profile to use the
HDMI output.

Then the user plugs out the monitor, so we switch back to speakers.
When the monitor is plugged back in, the user needs to manually switch
the audio output again. That should be improved: if the user preferred
to the HDMI output over the speakers, we should remember that and
automatically switch to HDMI whenever it becomes available.

The lack of automatic switching is even worse when the monitor goes to
a sleep mode after some period of inactivity. The monitor audio may
become unavailable, and PulseAudio can't distinguish that from the
case where the monitor is physically unplugged. Even worse, the
monitor may become unavailable for a short while when adjusting the
display parameters (for example, media center software may adjust the
display parameters to match the media that is being played back). In
these cases we clearly should switch automatically back to HDMI when
it becomes available again.

This patch fixes the problem by setting pa_card.preferred_input_port
and pa_card.preferred_output_port when the user changes the card
profile or a port, and switching to the preferred port when it becomes
available.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93946
8 years agocard-restore: restore preferred ports
Tanu Kaskinen [Fri, 4 Mar 2016 13:23:31 +0000 (15:23 +0200)]
card-restore: restore preferred ports

8 years agocard: add preferred_{input, output}_port
Tanu Kaskinen [Fri, 4 Mar 2016 13:23:30 +0000 (15:23 +0200)]
card: add preferred_{input, output}_port

I will modify module-switch-on-port-available so that it will keep
track of which input and output port the user prefers on the card,
based on the user's profile and port switches. The preference needs
to be saved on disk, for which I will use module-card-restore.

To facilitate communication between the two modules, this patch adds
preferred_input_port and preferred_output_port fields to pa_card, and
a hook for monitoring the variable changes. It would be nice if the
two modules would communicate directly with each other, but
implementing that would be somewhat complicated, so I chose this time
for adding the functionality to the core. In theory some other routing
module might want to manage the new variables instead of
module-switch-on-port-available, but admittedly that's not very likely
to happen...

8 years agoswitch-on-port-available: avoid repetitive pointer deferencing
Tanu Kaskinen [Fri, 4 Mar 2016 13:23:29 +0000 (15:23 +0200)]
switch-on-port-available: avoid repetitive pointer deferencing

Trivial refactoring.

8 years agoswitch-on-port-available: fix inverted if condition
Tanu Kaskinen [Fri, 4 Mar 2016 13:23:28 +0000 (15:23 +0200)]
switch-on-port-available: fix inverted if condition

I'm sure the original intention was to switch the port if the target
port is available on the currently active profile.

8 years agoswitch-on-port-available: unify input/output switching policy
Tanu Kaskinen [Fri, 4 Mar 2016 13:23:27 +0000 (15:23 +0200)]
switch-on-port-available: unify input/output switching policy

I don't think there's any reason why the same logic that has
previously added to output profile switching shouldn't be used with
input too.

8 years agobuild-sys: Fix check for CoreServices.h
Jeremy Huddleston Sequoia [Tue, 16 Jun 2015 09:32:01 +0000 (02:32 -0700)]
build-sys: Fix check for CoreServices.h

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@macports.org>
Signed-off-by: Arun Raghavan <git@arunraghavan.net>
8 years agostream-restore: With dbus-proto fix segfault if e->device is NULL.
Juho Hämäläinen [Tue, 26 Apr 2016 13:11:44 +0000 (16:11 +0300)]
stream-restore: With dbus-proto fix segfault if e->device is NULL.

If first part of test is false and e->device is NULL pa_streq will
segfault. Fix by using pa_safe_streq, which checks strings for NULL
before doing strcmp.

8 years agoRevert "format: Make pa_format_info_valid() stricter for PCM"
Arun Raghavan [Fri, 29 Apr 2016 12:05:28 +0000 (17:35 +0530)]
Revert "format: Make pa_format_info_valid() stricter for PCM"

This reverts commit 12a202c510dcacbd2b85fcc1170484eb16fef491.

This is needed for now to avoid a clash in clients using json-glib. The
commit added a call to json_object_get_type() in client code that didn't
exist before, and this breaks some apps like Rhythmbox and Totem. This
will be fixed in the future by possibly dropping json-c as a dep.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=95135

8 years agocore: Support memfd transport; bump protocol version
Ahmed S. Darwish [Fri, 15 Apr 2016 21:07:36 +0000 (23:07 +0200)]
core: Support memfd transport; bump protocol version

Now that all layers in the stack support memfd blocks, add memfd
support for the daemon's global core mempool. Also introduce
"enable-memfd=" daemon argument and configuration option.

For now, memfd support is an opt-in feature to be activated only
when daemon's enable-memfd= is set to yes.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agoclient audio: Support memfd transport
Ahmed S. Darwish [Fri, 15 Apr 2016 21:06:02 +0000 (23:06 +0200)]
client audio: Support memfd transport

Now that all layers in the stack support memfd blocks, add memfd
pools support for client context and audio playback data.

Use such memfd pools by default only if the server signals memfd
support in its connection negotiations.

Also add ability for clients to force-disable memfd transport
through the `enable-memfd=' client configuration option.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agodetect: Don't deprecate module-detect on non-Linux systems
Ahmed S. Darwish [Fri, 22 Apr 2016 19:51:27 +0000 (21:51 +0200)]
detect: Don't deprecate module-detect on non-Linux systems

The advertised alternative, module-udev-detect, is Linux-specific.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=94339
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agostream: Document pa_stream_write() size and offset requirements
Ahmed S. Darwish [Sun, 13 Mar 2016 22:02:09 +0000 (00:02 +0200)]
stream: Document pa_stream_write() size and offset requirements

Both must be in multiples of the stream's sample spec frame size.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agofilter-apply: simplify proplist updating
Tanu Kaskinen [Fri, 18 Mar 2016 14:22:00 +0000 (16:22 +0200)]
filter-apply: simplify proplist updating

pa_sink_input_set_property() takes care of logging, so the logging
code is redundant.

8 years agoloopback: refactor proplist updating
Tanu Kaskinen [Thu, 10 Mar 2016 17:43:01 +0000 (19:43 +0200)]
loopback: refactor proplist updating

This saves some proplist allocations and a couple of code lines. Also,
logging is better, because the set_property() functions work with
string values, while the update_proplist() functions assume opaque
binary data, and therefore can't log the property values.

8 years agosink-input, source-output: remove set_name()
Tanu Kaskinen [Sun, 13 Mar 2016 11:57:31 +0000 (13:57 +0200)]
sink-input, source-output: remove set_name()

pa_sink_input_set_property() does everything pa_sink_input_set_name()
does.

8 years agosink-input, source-output: rework property setting
Tanu Kaskinen [Fri, 11 Mar 2016 10:02:22 +0000 (12:02 +0200)]
sink-input, source-output: rework property setting

pa_sink_input_update_proplist() is inconvenient in many cases, because
it requires allocating a new proplist, even if the goal is to just set
one property. pa_sink_input_update_properties also can't properly log
property changes, because it has to assume that all values are
arbitrary binary data.

This patch adds pa_sink_input_set_property() for setting a string
value for a single property, and pa_sink_input_set_property_arbitrary()
for setting a binary value for a single property.
pa_sink_input_update_properties() is reimplemented as a wrapper around
pa_sink_input_set_property_arbitrary() to centralize logging and
sending change notifications.

(The above mentions only sink input functions for brevity, but the
same changes are implemented for source outputs too.)

8 years agodevice-manager, filter-apply: don't reroute streams that have a filter
Tanu Kaskinen [Mon, 7 Mar 2016 11:18:29 +0000 (13:18 +0200)]
device-manager, filter-apply: don't reroute streams that have a filter

device-manager reroutes all streams whenever a new device appears.
When filter-apply has loaded a filter for some stream, the filter
device may not be what device-manager considers the best device for
the stream, which means that when an unrelated device appears,
device-manager may break the filtering that filter-apply had set up.

This patch changes filter-apply so that it saves the filter device
name to the stream proplist when it sets up a filter. device-manager
can then check the proplist when it does rerouting, and skip the
rerouting for streams that have a filter applied to them.

The proplist isn't cleaned up when the stream moves away from the
filter device, so before doing any decisions based on the
filter_device property, it should be checked that the stream is
currently routed to the filter device. It seemed simpler to do it this
way compared to setting up stream move monitoring in filter-apply and
removing the property when the stream moves away from the filter
device.

8 years agodon't move streams to devices that are going away
Tanu Kaskinen [Sun, 13 Mar 2016 12:06:02 +0000 (14:06 +0200)]
don't move streams to devices that are going away

Before a device is unlinked, the unlink hook is fired, and it's
possible that a routing module tries to move streams to the unlinked
device in that hook, because it doesn't know that the device is being
unlinked. Of course, the unlinking is obvious when the code is in an
unlink hook callback, but it's possible that some other module does
something in the unlink hook that in turn triggers some other hook,
and it's this second hook where the routing module may get confused.
This patch adds an "unlink_requested" flag that is set before the
unlink hook is fired, and moving streams to a device with that flag
set is prevented.

This patch is motivated by seeing module-device-manager moving a
stream to a sink that was being unlinked. It was a complex case where
an alsa card was changing its profile, while an echo-cancel sink was
connected to the old alsa sink. module-always-sink loaded a null sink
in the middle of the profile change, and after a stream had been
rescued to the null sink, module-device-manager decided to move it
back to the old alsa sink that was being unlinked. That move made no
sense, so I came up with this patch.

8 years agoecho-cancel: rework move handling
Tanu Kaskinen [Thu, 10 Mar 2016 17:18:48 +0000 (19:18 +0200)]
echo-cancel: rework move handling

When autoloaded, module-echo-cancel doesn't support moving the sink
input and source output that it creates, but the move prevention was
implemented by manually requesting module unloading in the middle of
the stream move procedure, rather than by just setting the DONT_MOVE
flags. This patch removes the module unloading code from the moving()
callbacks and adds the DONT_MOVE flags. In addition to saving some
code, this also prevents problems related to trying to move streams
connected to the echo cancel sink or source while the echo cancel sink
or source is in the middle of a move too (a crash will happen in such
situation, as demonstrated in
https://bugs.freedesktop.org/show_bug.cgi?id=93443).

8 years agoprotocol-native: Disable srbchannel for setups without SCM_CREDENTIALS
Ahmed S. Darwish [Fri, 22 Apr 2016 19:48:26 +0000 (21:48 +0200)]
protocol-native: Disable srbchannel for setups without SCM_CREDENTIALS

srbchannel needs fd passing. Otherwise we get the following error
for systems without SCM_CREDENTIALS support:

    Code should not be reached at pulsecore/pstream-util.c:95,
    function pa_pstream_send_tagstruct_with_fds(). Aborting.

[[ The root cause is that we define HAVE_CREDS only if
SCM_CREDENTIALS is defined, but SCM_CREDENTIALS is a Linux-specific
symbol. Thus HAVE_CREDS is always disabled on Solaris.

And since pulse couples the non-portable creds passing support
with the portable fd passing one, through _35_ places where
HAVE_CREDS is used, a real fix needs a PA redesign -- assuming that
latency on Solaris is something people care about. ]]

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=94339
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agobuild-sys: Set C language standard to gnu11
Ahmed S. Darwish [Sun, 13 Mar 2016 22:00:03 +0000 (00:00 +0200)]
build-sys: Set C language standard to gnu11

Per glibc feature_test_macros(7), setting compiler flags to
-std=c11 (or any c* variant like c99) enforces strict ANSI
mode.

Enforcing strict ANSI makes all declarations under _GNU_SOURCE
unavailable. This leads to build warnings in the form of:

    warning: implicit declaration of function ‘syscall’

Thus replace -std=c11 with -std=gnu11

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agostream-interaction: Fix crash in case of invalid argument for volume
Sangchul Lee [Tue, 29 Mar 2016 17:21:40 +0000 (02:21 +0900)]
stream-interaction: Fix crash in case of invalid argument for volume

In case of invalid argument for volume, the crash occurs in pa_stream_interaction_done().
pa_xnew() is replaced with pa_xnew0() to fix it.

Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
8 years agorole-ducking: Add support for ducking group
Sangchul Lee [Wed, 13 Apr 2016 01:48:44 +0000 (10:48 +0900)]
role-ducking: Add support for ducking group

Now, trigger_roles, ducking_roles and volume can be divided into several groups by slash.
That means each group can be affected by its own volume policy.

If we need to apply ducking volume level differently that is triggered from
each trigger role(s), this feature would be useful for this purpose.

For example, let's assume that tts should take music and video's volume down to 40%
whereas voice_recognition should take those and tts's volume down to 20%.
In this case, the configuration can be written as below.
  trigger_roles=tts/voice_recognition ducking_roles=music,video/music,video,tts volume=40%/20%

If one of ducking role is affected by more than two trigger roles simultaneously,
volume of the ducking role will be applied by method of multiplication.
And it works in the same way as before without any slash.

Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
8 years agoalsa-mixer: Support for Creative SoundBlaster Omni Surround 5.1 USB sound card with...
Nazar Mokrynskyi [Thu, 24 Mar 2016 13:59:23 +0000 (15:59 +0200)]
alsa-mixer: Support for Creative SoundBlaster Omni Surround 5.1 USB sound card with latest firmware

`Mic` is now detected as `Mic-In/Mic Array` (there are 2 microphones physically, nice to se this being understood).
`Line` is now detected as `Line In`.
Removed all output modes except officially supported stereo, 5.1 and stereo S/PDIF.
Also microphone/line in now might be used simultaneously with either output mode, yay!

8 years agoi18n: Updated Turkish translation
Muhammet Kara [Sat, 16 Apr 2016 22:08:36 +0000 (01:08 +0300)]
i18n: Updated Turkish translation

8 years agobuild-sys: build gtk-test only when glib is enabled
Tanu Kaskinen [Tue, 12 Apr 2016 15:56:01 +0000 (18:56 +0300)]
build-sys: build gtk-test only when glib is enabled

gtk-test pulls in libpulse-mainloop-glib as a dependency, and compiling
glib-mainloop.c fails if glib support is disabled.

8 years agoi18n: Update Italian translation
Milo Casagrande [Mon, 4 Apr 2016 09:27:20 +0000 (11:27 +0200)]
i18n: Update Italian translation

Signed-off-by: Milo Casagrande <milo@milo.name>
8 years agortp: Do all receive side rate calculations in sink-input domain
Arun Raghavan [Mon, 29 Feb 2016 08:58:58 +0000 (14:28 +0530)]
rtp: Do all receive side rate calculations in sink-input domain

The code was mixing sink and sink input domain rate updates, and that
only works if the rate of the RTP stream is the same as the rate of the
sink. This changes all the calcuations to be on the sink-input rate,
since that's the rate we are trying to guess (and resample for).

8 years agoi18n: update Simplified Chinese translation
YunQiang Su [Sat, 2 Apr 2016 15:01:26 +0000 (18:01 +0300)]
i18n: update Simplified Chinese translation

8 years agomemblock/pstream: Fix two compiler warnings
David Henningsson [Sat, 2 Apr 2016 04:24:18 +0000 (06:24 +0200)]
memblock/pstream: Fix two compiler warnings

Fix two compiler warnings recently introduced by the memfd patch set.

Signed-off-by: David Henningsson <diwic@ubuntu.com>
8 years agopstream: Support memfd blocks transport
Ahmed S. Darwish [Sat, 12 Mar 2016 23:12:18 +0000 (01:12 +0200)]
pstream: Support memfd blocks transport

Now that we have the necessary infrastructure to memexport and
mempimport a memfd memblock, extend that support higher up in the
chain with pstreams.

A PA endpoint can now _transparently_ send a memfd memblock to the
other end by simply calling pa_pstream_send_memblock() – provided
the block's memfd pool was earlier registered with the pstream.

If the pipe does not support memfd transfers, we fall back to
sending the block's full data instead of just its reference.

** Further details:

A single pstream connection usually transfers blocks from multiple
pools including the server's srbchannel mempool, the client's
audio data mempool, and the server's global core mempool.

If these mempools are memfd-backed, we now require registering
them with the pstream before sending any blocks they cover. This
is done to minimize fd passing overhead and avoid fd leaks.

Moreover, to support all these pools without hard-coding their
number or nature in the Pulse communication protocol itself, a new
REGISTER_MEMFD_SHMID command is introduced. That command can be
sent _anytime_ during the pstream's lifetime and is used for
creating on demand SHM ID to memfd mappings.

Suggested-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agopulsecore: Specially mark global mempools
Ahmed S. Darwish [Sat, 12 Mar 2016 23:09:39 +0000 (01:09 +0200)]
pulsecore: Specially mark global mempools

Color global mempools with a special mark. This special marking
is needed for handling memfd-backed pools.

To avoid fd leaks, memfd pools are registered with the connection
pstream to create an ID<->memfd mapping on both PA endpoints.
Such memory regions are then always referenced by their IDs and
never by their fds, and so their fds can be safely closed later.

Unfortunately this scheme cannot work with global pools since the
registration ID<->memfd mechanism needs to happen for each newly
connected client, and thus the need for a more special handling.
That is, for the pool's fd to be always open :-(

Almost all mempools are now created on a per-client basis. The
only exception is the pa_core's mempool which is still shared
between all clients of the system.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agomemimport: Support memfd blocks
Ahmed S. Darwish [Sat, 12 Mar 2016 23:07:27 +0000 (01:07 +0200)]
memimport: Support memfd blocks

To transfer memfd-backed blocks without passing their fd every time,
thus minimizing overhead and avoiding fd leaks, a command is sent
with the memfd fd as ancil data very early on.

This command has an ID that uniquely identifies the memfd region.
Further memfd block references are then exclusively done using this
ID.

This commit implements the details of such 'permanent' mappings on
the receiving end, using memimport segments.

Suggested-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agopulsecore: Introduce memfd support
Ahmed S. Darwish [Sat, 12 Mar 2016 23:04:18 +0000 (01:04 +0200)]
pulsecore: Introduce memfd support

Memfd is a simple memory sharing mechanism, added by the systemd/kdbus
developers, to share pages between processes in an anonymous, no global
registry needed, no mount-point required, relatively secure, manner.

This patch introduces the necessary building blocks for using memfd
shared memory transfers in PulseAudio.

Memfd support shall also help us in laying out the necessary (but not
yet sufficient) groundwork for application sandboxing, protecting PA
from its clients, and protecting clients data from each other.

We plan to exclusively use memfds, instead of POSIX SHM, on the way
forward.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agoSHM: Refactor private allocations
Ahmed S. Darwish [Sat, 12 Mar 2016 23:01:38 +0000 (01:01 +0200)]
SHM: Refactor private allocations

pa_shm_create_rw() is responsible for creating two types of memory:
POSIX shared memory and regular malloc()-ed ones.

A third memory type, memfds, will be added later. Thus to add this
extra shared memory type in a sane manner, refactor private memory
allocations into their own static methods.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agopulsecore: Transform pa_mempool_new() into a factory method
Ahmed S. Darwish [Sat, 12 Mar 2016 22:57:06 +0000 (00:57 +0200)]
pulsecore: Transform pa_mempool_new() into a factory method

Soon we're going to have three types of memory pools: POSIX shm_open()
pools, memfd memfd_create() ones, and privately malloc()-ed pools.

Thus introduce annotations for the memory types supported and change
pa_mempool_new() into a factory method based on required memory.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agosrbchannel: Introduce per-client SHM files
Ahmed S. Darwish [Sat, 12 Mar 2016 22:53:34 +0000 (00:53 +0200)]
srbchannel: Introduce per-client SHM files

The PA daemon currently uses a single SHM file for all clients
sending and receiving commands over the low-latency srbchannel
mechanism.

To avoid leaks between clients in that case, and to provide the
necessary ground work later for sandboxing and memfds, create the
srbchannel SHM files on a per-client basis.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agopulsecore: Reference count mempools
Ahmed S. Darwish [Sat, 12 Mar 2016 22:51:12 +0000 (00:51 +0200)]
pulsecore: Reference count mempools

In future commits, server-wide SHMs will be replaced with per-client
ones that will be dynamically created and freed according to clients
connections open and close.

Meanwhile, current PA design does not guarantee that the per-client
mempool blocks are referenced only by client-specific objects.

Thus reference count the pools and let each memblock inside the pool
itself, or just attached to it, increment the pool's refcount upon
allocation. This way, per-client mempools will only be freed when no
further component in the system holds any references to its blocks.

DiscussionLink: https://goo.gl/qesVMV
Suggested-by: Tanu Kaskinen <tanuk@iki.fi>
Suggested-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agopulsecore: Cache daemon shm size inside pa_core
Ahmed S. Darwish [Sat, 12 Mar 2016 22:48:15 +0000 (00:48 +0200)]
pulsecore: Cache daemon shm size inside pa_core

The daemon `shm-size-bytes' configuration value was read, and then
directly used, for creating the initial server-wide SHM files.

This is fine for now, but soon, such server-wide SHMs will be replaced
with per-client SHM files that will be dynamically created and deleted
according to clients open and close. Thus, appropriately cache this
configuration value.

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agolog: journal: Prevent duplicate values for CODE_* fields
Ahmed S. Darwish [Sun, 13 Mar 2016 21:56:54 +0000 (23:56 +0200)]
log: journal: Prevent duplicate values for CODE_* fields

sd_journal_send() implicitly add fields for the source file,
function name and code line from where it's invoked. As code
location fields CODE_FILE, CODE_LINE and CODE_FUNC are handled
by PA's log module, we do not want the automatic values
supplied by the sd_journal API.

Without suppressing these, both the actual log event source
and the call to sd_journal_send() will be logged:

    $ journalctl -b -f -o json-pretty
    [...]
    CODE_FILE : [ pulsecore/log.c, pulsecore/module.c ],
    CODE_LINE : [ 505, 181 ],
    MESSAGE   : Failed to load module module-gconf
    CODE_FUNC : [ pa_log_levelv_meta, pa_module_load ],
    [...]

(Commit log adapted from abrt libreport commit d1eaae97f0287f)

Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
8 years agostream-interaction: interact if a stream starts corked
Georg Chini [Thu, 17 Mar 2016 21:35:08 +0000 (22:35 +0100)]
stream-interaction: interact if a stream starts corked

This patch deals with the case that applications start new streams corked.
In case of module-role-cork it will only mute the stream because corking is
removed later by the application.

8 years agorole-ducking: use the common code in stream-interaction.c
Georg Chini [Thu, 17 Mar 2016 21:35:07 +0000 (22:35 +0100)]
role-ducking: use the common code in stream-interaction.c

8 years agostream-interaction: add ducking functionality
Georg Chini [Thu, 17 Mar 2016 21:35:06 +0000 (22:35 +0100)]
stream-interaction: add ducking functionality

8 years agostream-interaction: Bugfix for improper uncorking behavior with global=1
Georg Chini [Thu, 17 Mar 2016 21:35:05 +0000 (22:35 +0100)]
stream-interaction: Bugfix for improper uncorking behavior with global=1

This patch is based on a recent patch for module-role-ducking from Sangchul Lee
which fixes incorrect behavior when global is set to 1. Original commit can be found
here:
https://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/?id=d049c2941e6aef5ff33bcd0b4adece12289302b7

8 years agofilter-apply: fix typo "what" -> "want"
Tanu Kaskinen [Thu, 10 Mar 2016 17:35:34 +0000 (19:35 +0200)]
filter-apply: fix typo "what" -> "want"

8 years agorole-cork: more cosmetic changes, changed debug output
Georg Chini [Thu, 26 Mar 2015 20:54:23 +0000 (21:54 +0100)]
role-cork: more cosmetic changes, changed debug output

Change names of shall_interact() and is_trigger_stream() because the names look
like the functions return a boolean. Simpler debugging output.

8 years agorole-cork: prepare merge with role-ducking: replace "cork" with "interact" where...
Georg Chini [Thu, 26 Mar 2015 20:54:22 +0000 (21:54 +0100)]
role-cork: prepare merge with role-ducking: replace "cork" with "interact" where appropriate

Again, interact includes cork and duck.

8 years agorole-cork: prepare merge with role-ducking: move most code to stream-interaction.c
Georg Chini [Thu, 26 Mar 2015 20:54:21 +0000 (21:54 +0100)]
role-cork: prepare merge with role-ducking: move most code to stream-interaction.c

Filename suggested by Tanu, as it includes both, cork and duck.

8 years agorole-cork: remove corking on module exit
Georg Chini [Thu, 26 Mar 2015 20:54:20 +0000 (21:54 +0100)]
role-cork: remove corking on module exit

While module-role-ducking removes the attenuation when the module exits,
module-role-cork does not remove the corking. Added a function for that.

8 years agorole-cork: allow cork of all non-trigger streams using cork_roles=any_role
Georg Chini [Thu, 26 Mar 2015 20:54:19 +0000 (21:54 +0100)]
role-cork: allow cork of all non-trigger streams using cork_roles=any_role

There might be situations where you want to cork all streams that are not
trigger streams. Use cork_roles=any_role to implement this.

8 years agorole-cork: React to mute/cork of trigger streams and to proplist changes
Georg Chini [Thu, 26 Mar 2015 20:54:18 +0000 (21:54 +0100)]
role-cork: React to mute/cork of trigger streams and to proplist changes

When a trigger stream changes mute or cork state, the cork streams should
react to this. The same applies if a stream changes its role to or from the
trigger role.

8 years agorole-cork: Don't ignore streams without media.role
Georg Chini [Thu, 26 Mar 2015 20:54:17 +0000 (21:54 +0100)]
role-cork: Don't ignore streams without media.role

When corking do not ignore streams without media.role. Instead treat
them as if media.role="no_role", so that you can specify "no_role" as
trigger or cork role.

8 years agoresampler-test: remove translations
Tanu Kaskinen [Thu, 10 Mar 2016 14:49:30 +0000 (16:49 +0200)]
resampler-test: remove translations

Translators shouldn't be burdened with translating strings in tests.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=94435
8 years agoUpdated Hungarian translation
Gabor Kelemen [Mon, 7 Mar 2016 21:29:35 +0000 (22:29 +0100)]
Updated Hungarian translation

8 years agocard-restore: save the database when shutting down
Tanu Kaskinen [Fri, 4 Mar 2016 13:16:54 +0000 (15:16 +0200)]
card-restore: save the database when shutting down

If u->save_time_event is non-NULL when the module is being unloaded,
it means that there are some changes to the database that haven't
yet been flushed to the disk.

Acked-by: David Henningsson <david.henningsson@canonical.com>
8 years agoalsa-mixer: refactor element_probe and fix >2 channel bug
David Henningsson [Tue, 1 Mar 2016 10:41:55 +0000 (11:41 +0100)]
alsa-mixer: refactor element_probe and fix >2 channel bug

By refactoring volume probing into its own function, we can reduce
indentation a lot. Also, if an error occurs during the volume probe,
that volume element is now always skipped (instead of taking down
the entire path with it).

Also, a bug for elements with more than two channels is fixed, as
previously, the volume parsing code was continuing, potentially
referencing somewhere outside the array (which has max two channels).

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
8 years agoswitch-on-port-available: Switch from HDMI to analog; but not the other way around
David Henningsson [Fri, 29 Jan 2016 19:33:22 +0000 (20:33 +0100)]
switch-on-port-available: Switch from HDMI to analog; but not the other way around

If you have headphones plugged in and plug in HDMI; you want sound
to stay on headphones.
If you have HDMI plugged in and you plug in headphones; you want sound
to switch to headphones.

Hence we need to take priority into account as well when determining
whether to switch to a new profile or not.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93903
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
8 years agoecho-cancel: Convert AGC API to deal with pa_volume_t
Arun Raghavan [Thu, 25 Feb 2016 12:28:38 +0000 (17:58 +0530)]
echo-cancel: Convert AGC API to deal with pa_volume_t

It is expected that the underlying AGC mechanism will likely provide a
single volume for the source rather than a per-channel volume. Dealing
with per-channel volumes just adds complexity with regards to the
actual volume setting (depending on whether volume sharing is enabled or
not, we would set the volume on the source output of the virtual source,
and their sample specs may be different).

Using a single volume allows us to sidestep this problem entirely.

8 years agoecho-cancel: Add beamforming support in the webrtc canceller
Arun Raghavan [Wed, 17 Feb 2016 14:17:15 +0000 (19:47 +0530)]
echo-cancel: Add beamforming support in the webrtc canceller

8 years agoecho-cancel: Remove pa_ prefix on private functions
Arun Raghavan [Wed, 17 Feb 2016 14:17:14 +0000 (19:47 +0530)]
echo-cancel: Remove pa_ prefix on private functions

8 years agoecho-cancel: Update a copyright notice
Arun Raghavan [Wed, 17 Feb 2016 14:17:13 +0000 (19:47 +0530)]
echo-cancel: Update a copyright notice

8 years agoecho-cancel: Use webrtc's deinterleaved API
Arun Raghavan [Wed, 17 Feb 2016 14:17:12 +0000 (19:47 +0530)]
echo-cancel: Use webrtc's deinterleaved API

This is required to have unequal channel counts on capture in and out
streams, which is needed for beamforming to work. The deinterleaved API
only works with floating point samples.

8 years agoecho-cancel: webrtc canceller supports different in/out channel counts
Arun Raghavan [Wed, 17 Feb 2016 14:17:10 +0000 (19:47 +0530)]
echo-cancel: webrtc canceller supports different in/out channel counts

Needed for upcoming beamforming code.

8 years agoecho-cancel: Improve webrtc canceller error handling a bit
Arun Raghavan [Wed, 17 Feb 2016 14:17:09 +0000 (19:47 +0530)]
echo-cancel: Improve webrtc canceller error handling a bit

8 years agoecho-cancel: Fix webrtc canceller when rec channels != play channels
Arun Raghavan [Wed, 17 Feb 2016 14:17:08 +0000 (19:47 +0530)]
echo-cancel: Fix webrtc canceller when rec channels != play channels

The calculations around how many samples were sent to the canceller
engine was not updated when we started supporting different channel
counts for playback and capture.

8 years agoecho-cancel: Make webrtc AGC start volume a modarg
Arun Raghavan [Wed, 17 Feb 2016 14:17:07 +0000 (19:47 +0530)]
echo-cancel: Make webrtc AGC start volume a modarg

Allows for tuning based on the target hardware.

8 years agoecho-cancel: Use anonymous unions for echo canceller params
Arun Raghavan [Wed, 17 Feb 2016 14:17:06 +0000 (19:47 +0530)]
echo-cancel: Use anonymous unions for echo canceller params

Makes this part of the code just a little less verbose.

8 years agobuild-sys: Move to compiling with C11 support
Arun Raghavan [Wed, 17 Feb 2016 14:17:05 +0000 (19:47 +0530)]
build-sys: Move to compiling with C11 support

This is needed for building with anonymous unions. A bunch of calls to
fail() that used to mysteriously work need fixing -- fail() is a macro
that takes a printf-style message as an argument. Not passing this
somehow worked with the previous compiler flags, but breaks with
-std=c11.

8 years agoecho-cancel: Add a modarg toggle for VAD in the webrtc canceller
Arun Raghavan [Wed, 17 Feb 2016 14:17:04 +0000 (19:47 +0530)]
echo-cancel: Add a modarg toggle for VAD in the webrtc canceller

8 years agoecho-cancel: Allow enabling of the webrtc experimental AGC mechanism
Arun Raghavan [Wed, 17 Feb 2016 14:17:03 +0000 (19:47 +0530)]
echo-cancel: Allow enabling of the webrtc experimental AGC mechanism

8 years agoecho-cancel: Start capture at a sane volume if we're doing webrtc AGC
Arun Raghavan [Wed, 17 Feb 2016 14:17:02 +0000 (19:47 +0530)]
echo-cancel: Start capture at a sane volume if we're doing webrtc AGC

This is required to make sure the capture output has sufficient energy
for the AGC to do its job.

8 years agoecho-cancel: Deal with volume limit breakage in webrtc AGC
Arun Raghavan [Wed, 17 Feb 2016 14:17:01 +0000 (19:47 +0530)]
echo-cancel: Deal with volume limit breakage in webrtc AGC

The AGC code no longer seems to honour the analog volume limits we set,
and internally uses 0-255 as the volume range. So we switch to use that
(keeping the old API usage as is in case this gets fixed upstream).

8 years agoecho-cancel: Allow enabling tracing output from the webrtc canceller
Arun Raghavan [Wed, 17 Feb 2016 14:17:00 +0000 (19:47 +0530)]
echo-cancel: Allow enabling tracing output from the webrtc canceller

8 years agoecho-cancel: Mark private function as static
Arun Raghavan [Wed, 17 Feb 2016 14:16:59 +0000 (19:46 +0530)]
echo-cancel: Mark private function as static

8 years agoecho-cancel: Add a modarg to use sink/source master format and spec
Arun Raghavan [Wed, 17 Feb 2016 14:16:58 +0000 (19:46 +0530)]
echo-cancel: Add a modarg to use sink/source master format and spec

This allows us to inherit the sample spec parameters from the sink and
source master (rather than forcing 32 kHz / mono). It is still possible
to override some of the parameters for the source side with modargs.

My original testing showed that these parameters provided a decent
perf/quality trade-off on lower end hardware (which I no longer have
access to). I figure it makes sense to continue with that for now, and
in the future this can be relaxed (use_master_format=yes could be the
default, and resource-constrained systems can disable it).

8 years agoecho-cancel: Express restrictions correctly on webrtc AEC stream config
Arun Raghavan [Wed, 17 Feb 2016 14:16:57 +0000 (19:46 +0530)]
echo-cancel: Express restrictions correctly on webrtc AEC stream config

In the refactoring, I'm expressing the constraints in what I see to be a
more natural way -- rec_ss expresses what we're feeding the canceller,
so it makes sense to apply the constraints on what the canceller accepts
there. This then propagates to the output spec.

This also exposes the range of sample rates that the library actually
supports (8, 16, 32 and 48 kHz).

8 years agoecho-cancel: Canceller may use different spec for playback and capture
Arun Raghavan [Wed, 17 Feb 2016 14:16:56 +0000 (19:46 +0530)]
echo-cancel: Canceller may use different spec for playback and capture

The original intention was to configure low enough parameters to keep
CPU consumption down. Prior to this change, we assumed that the EC
backend would override the sink parameters based on the source
parameters to achieve this goal, and with this change we remove that
assumption by forcing the default parameters for the sink to be low
enough.

8 years agoecho-cancel: Add some bits for webrtc intelligibility enhancer
Tanu Kaskinen [Sat, 20 Feb 2016 12:32:59 +0000 (14:32 +0200)]
echo-cancel: Add some bits for webrtc intelligibility enhancer

It's not possible to enable the intelligibility enhancer at the
moment, because the feature would require modifying the audio that we
play to speakers, which we don't do currently. All audio processing is
done at the source side, and it's not easy to change that.

This patch is based on Arun Raghavan's code, I just reordered things
a bit and reworded the FIXME comment.