platform/upstream/pulseaudio.git
6 years agobuild-sys: remove module-defs.h.m4 from EXTRA_DIST v11.99.1
Tanu Kaskinen [Fri, 11 May 2018 11:13:53 +0000 (14:13 +0300)]
build-sys: remove module-defs.h.m4 from EXTRA_DIST

The file doesn't exist any more.

6 years agobuild-sys: fix distribution of GSettings files
Tanu Kaskinen [Fri, 11 May 2018 11:06:21 +0000 (14:06 +0300)]
build-sys: fix distribution of GSettings files

dist_gsettingsdataconvert_DATA was set only if GSettings was enabled. If
the developer that generates the tarball doesn't have GSettings enabled,
pulseaudio.convert wouldn't get included in the tarball.

The schema file was not being added to the tarball even if GSettings was
enabled.

6 years agobuild-sys: bump sonames
Tanu Kaskinen [Fri, 11 May 2018 10:53:31 +0000 (13:53 +0300)]
build-sys: bump sonames

A few small internal changes in libpulse. No changes in libpulse-simple
and libpulse-mainloop-glib.

6 years agoalsa-util: Set ALSA report_delay flag in pa_alsa_safe_delay()
Georg Chini [Fri, 4 May 2018 19:10:46 +0000 (21:10 +0200)]
alsa-util: Set ALSA report_delay flag in pa_alsa_safe_delay()

The current code does not call snd_pcm_status_set_audio_htstamp_config()
to configure the way timestamps are updated in ALSA. In kernel 4.14 and
above a bug in ALSA has been fixed which changes timmestamp behavior.
This leads to inconsistencies in the delay reporting because the time
stamp no longer reflects the time when the delay was updated if the
ALSA report_delay flag is not set. Therefore latencies are not calculated
correctly.

This patch uses snd_pcm_status_set_audio_htstamp_config() to set the
ALSA report_delay flag to 1 before the call to snd_pcm_status(). With
this, time stamps are updated as expected.

6 years agobluez5-device: Fix memory leak in sco_process_render()
Georg Chini [Wed, 9 May 2018 05:29:12 +0000 (07:29 +0200)]
bluez5-device: Fix memory leak in sco_process_render()

sco_process_render does not unref the memblock when it encounters an error.

This patch fixes the issue. It also changes the return value to 1 in the case
of EAGAIN. Because the data was already rendered and cannot be re-sent, we
have to discard the block.

Because the modified EAGAIN handling prevents the log message about EAGAIN
after POLLOUT from being printed, the log message was moved to
a2dp/sco_process_render().

6 years agobluez5-device: Rewrite of thread function, reduce send buffer size for a2dp sink
Georg Chini [Wed, 9 May 2018 05:27:58 +0000 (07:27 +0200)]
bluez5-device: Rewrite of thread function, reduce send buffer size for a2dp sink

The rewrite of the thread function does not change functionality much,
most of it is only cleanup, minor bug fixing  and documentation work.

This patch also changes the send buffer size for a2dp sink to avoid lags
after temporary connection drops, following the proof-of-concept patch
posted by Dmitry Kalyanov.

Link: https://bugs.freedesktop.org/show_bug.cgi?id=58746
Additionally the patch changes the fixed latency for HSP playback from 125
to 25 ms. Tests showed that this produces better audio sync, which is
expected as HSP should have smaller latency than A2DP.

6 years agovala: Fix lengths for source/sink port arrays
David Hewitt [Sat, 5 May 2018 20:37:03 +0000 (21:37 +0100)]
vala: Fix lengths for source/sink port arrays

6 years agoallow-passthrough: fix hook return value
Tanu Kaskinen [Sat, 5 May 2018 14:22:46 +0000 (17:22 +0300)]
allow-passthrough: fix hook return value

-PA_ERR_NOENTITY is not a valid pa_hook_result_t value.

6 years agomodule-allow-passthrough: Don't crash if we can't find a sink
Arun Raghavan [Fri, 4 May 2018 16:29:23 +0000 (21:59 +0530)]
module-allow-passthrough: Don't crash if we can't find a sink

module-allow-passthrough has a (necessary) hack to replicate the default
sink selection and format negotiation from sink-input.c. One thing that
got missed in this replication is the possibility that the sink input is
not compatible with the default sink. When this happen, we now exit
gracefully.

6 years agoladspa-sink: fix incorrect error conditions
Sangchul Lee [Thu, 3 May 2018 17:00:26 +0000 (02:00 +0900)]
ladspa-sink: fix incorrect error conditions

fix codes to prevent null pointer dereference of cdata variable.

Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
6 years agoi18n: update Polish translation
Piotr Drąg [Fri, 27 Apr 2018 15:05:52 +0000 (17:05 +0200)]
i18n: update Polish translation

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

6 years agoalsa-sink/source: always set reconfiguration callback
Sangchul Lee [Fri, 27 Apr 2018 16:07:26 +0000 (01:07 +0900)]
alsa-sink/source: always set reconfiguration callback

Reconfiguration callback should also be set in case of avoiding resampling
option. This patch set the callback for every case because the callback
has already conditions to leave if it is not needed.
Also unnecessary codes of setting alternate sample rate to 0 are removed.

Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
6 years agogsettings: run gsettings-data-convert from gsettings-helper
Tanu Kaskinen [Mon, 23 Apr 2018 13:16:11 +0000 (16:16 +0300)]
gsettings: run gsettings-data-convert from gsettings-helper

This was originally planned to be done by paprefs when it starts, but
since the schema is now fully controlled by pulseaudio, it makes sense
to run the conversion from pulseaudio instead.

6 years agovala: fix a struct field name and add missing source output volume/mute functions
wellington wallace [Thu, 26 Apr 2018 11:31:50 +0000 (14:31 +0300)]
vala: fix a struct field name and add missing source output volume/mute functions

6 years agobuild-sys: enable GSettings by default
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:42 +0000 (09:07 +0300)]
build-sys: enable GSettings by default

A new paprefs release is expected soon, and it will only support
GSettings. In order to have the default configuration work with the new
paprefs version, we need to enable GSettings by default.

If both module-gconf and module-gsettings are enabled when building
PulseAudio, both modules will be part of the default configuration. That
can cause trouble, because when the GConf database is migrated to
GSettings, the old configuration in GConf is not removed, so both
module-gconf and module-gsettings will try to load modules.

Generally it's not necessary to have both modules enabled even at build
time, so let's default to having only one of them enabled.

6 years agogsettings: free group_names after use
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:41 +0000 (09:07 +0300)]
gsettings: free group_names after use

6 years agogsettings: free the module-group GSettings objects after use
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:40 +0000 (09:07 +0300)]
gsettings: free the module-group GSettings objects after use

g_settings_get_child() returns a new GSettings object that needs to be
freed when it's not used any more. This patch collects all the childern
to a GPtrArray and frees them at the end of main(). They can't be freed
earlier, because that would prevent the "changed" signals from being
delivered.

6 years agogsettings: remove bad signal connection
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:39 +0000 (09:07 +0300)]
gsettings: remove bad signal connection

The removed g_signal_connect() call didn't make sense. The callback
expects to be called when individual module groups are changed, not when
the top level object is changed. Also, module_group_callback() expects
user_data to be non-NULL, but here it was set to NULL.

6 years agogsettings: check that children haven't been deleted before using them
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:38 +0000 (09:07 +0300)]
gsettings: check that children haven't been deleted before using them

According to the documentation of g_settings_list_children(), the listed
children may be removed at any time, so g_settings_get_child() may
return NULL. This is probably very unlikely to happen in practice, but
it's good to check anyway.

6 years agobuild-sys: remove a redundant enable_gsettings check
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:37 +0000 (09:07 +0300)]
build-sys: remove a redundant enable_gsettings check

If HAVE_GSETTINGS is 1, then enable_gsettings must be yes, so checking
enable_gsettings isn't necessary.

6 years agogsettings: rename "module" to "module-group"
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:36 +0000 (09:07 +0300)]
gsettings: rename "module" to "module-group"

It is confusing if there's a thing named "module" which defines up to 10
modules to load. Calling the thing a "module group" instead should make
it easier to understand.

6 years agogconf, gsettings: fix config.h includes
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:35 +0000 (09:07 +0300)]
gconf, gsettings: fix config.h includes

config.h should be included by all .c files and none of the .h files.

6 years agogsettings: add the modules schema to the schema description file
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:34 +0000 (09:07 +0300)]
gsettings: add the modules schema to the schema description file

Originally the idea was to provide the "modules" schema with paprefs,
but since module-gsettings refers to the "modules" schema in its code,
that would make module-gsettings depend on paprefs, which is not good.
Now all schemas are provided by module-gsettings, so the paprefs
dependency is avoided. Unfortunately this means that if paprefs is
modified to load some new modules, the schema in pulseaudio needs to be
updated as well.

6 years agodefault.pa: add module-gsettings
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:33 +0000 (09:07 +0300)]
default.pa: add module-gsettings

This also makes the module-gconf section conditional on HAVE_GCONF,
because if only gsettings support is built, the gconf section in the
configuration file would be redundant and confusing.

6 years ago.gitignore: add module-gsettings related things
Tanu Kaskinen [Tue, 17 Apr 2018 06:07:32 +0000 (09:07 +0300)]
.gitignore: add module-gsettings related things

6 years agomodule-gsettings: new module to store configuration using gsettings
Sylvain Baubeau [Mon, 25 Jul 2016 19:58:48 +0000 (21:58 +0200)]
module-gsettings: new module to store configuration using gsettings

GConf is deprecated, and distributions are removing it. paprefs depends
on GConf, so in order to avoid paprefs getting removed as well, paprefs
has to be changed to use something else than GConf. GSettings is the
easiest alternative to migrate to, although it has the same problems
that GConf had: no support for system mode or networking.

This patch takes the non-GConf specific code from module-gconf and puts
it in stdin-util.[ch], which is then reused by module-gsettings.
module-gsettings is designed to be very similar to module-gconf.

Migration is expected to happen as follows: Distributions update
PulseAudio and paprefs at the same time, or first PulseAudio and then
paprefs. paprefs depends on module-gsettings, and module-gsettings
conflicts with module-gconf. Therefore module-gconf gets automatically
removed during the paprefs update. After the update an old PulseAudio is
likely to be running with module-gconf loaded. If the user tries to use
paprefs during this period, whatever the user does in paprefs won't have
any effect until PulseAudio is restarted (probably by a reboot or
relogin). This is not ideal, but will have to do.

When module-gsettings is loaded, it runs gsettings-data-convert
(implemented in a later patch). That will copy the settings from GConf
to GSettings. If gsettings-data-convert is not available (it's part of
GConf, so it may have already been uninstalled), then any previous
paprefs settings are lost.

6 years agoqpaeq: fix Qt5 mainloop use
Felipe Sateler [Wed, 11 Apr 2018 12:26:19 +0000 (15:26 +0300)]
qpaeq: fix Qt5 mainloop use

This change was missed in the Qt4 -> Qt5 conversion.

6 years agoman: unify pactl and pacmd suspend command documentation
Tanu Kaskinen [Sun, 8 Apr 2018 10:23:11 +0000 (13:23 +0300)]
man: unify pactl and pacmd suspend command documentation

The suspend-sink and suspend-source documentation for pacmd was quite
terse, so I copied the more complete documentation from pactl. I
couldn't resist doing some other minor edits along the way too.

link: https://bugs.freedesktop.org/show_bug.cgi?id=105907
6 years agoi18n: update the Czech translation
Daniel Rusek [Mon, 2 Apr 2018 11:34:59 +0000 (14:34 +0300)]
i18n: update the Czech translation

6 years agoFix memory leaks
Jungsup Lee [Fri, 23 Mar 2018 08:26:36 +0000 (17:26 +0900)]
Fix memory leaks

The returned string of the dbus_message_iter_get_signature() must be
freed with dbus_free().

6 years agoi18n: update the Ukrainian translation
Yuri Chornoivan [Sun, 18 Mar 2018 10:37:42 +0000 (12:37 +0200)]
i18n: update the Ukrainian translation

6 years agofix a call to pa_sink_suspend() from an incorrect thread
Tanu Kaskinen [Mon, 19 Mar 2018 21:11:05 +0000 (23:11 +0200)]
fix a call to pa_sink_suspend() from an incorrect thread

The alsa sink calls pa_sink_suspend() from the set_port() callback.
pa_sink_suspend() can only be called from the main thread, but the
set_port() callback was often called from the IO thread. That caused an
assertion to be hit in pa_sink_suspend() when switching ports.

Another issue was that pa_sink_suspend() called the set_port() callback,
and if the callback calls pa_sink_suspend() again recursively, nothing
good can be expected from that, so the thread mismatch was not the only
problem.

This patch moves the mixer syncing logic out of pa_sink/source_suspend()
to be handled internally by the alsa sink/source. This removes the
recursive pa_sink_suspend() call. This also removes the need to have the
mixer_dirty flag in pa_sink/source, so the flag and the
pa_sink/source_set_mixer_dirty() functions can be removed.

This patch also changes the threading rules of set_port(). Previously it
was called sometimes from the main thread and sometimes from the IO
thread. Now it's always called from the main thread. When deferred
volumes are used, the alsa sink and source still have to update the
mixer from the IO thread when switching ports, but the thread
synchronization is now handled internally by the alsa sink and source.
The SET_PORT messages are not needed any more and can be removed.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104761
6 years agopass pa_suspend_cause_t to set_state_in_io_thread() callbacks
Tanu Kaskinen [Mon, 19 Mar 2018 21:11:04 +0000 (23:11 +0200)]
pass pa_suspend_cause_t to set_state_in_io_thread() callbacks

The suspend cause isn't yet used by any of the callbacks. The alsa sink
and source will use it to sync the mixer when the SESSION suspend cause
is removed. Currently the syncing is done in pa_sink/source_suspend(),
and I want to change that, because pa_sink/source_suspend() shouldn't
have any alsa specific code.

6 years agoreplace sink/source SET_STATE handlers with callbacks
Tanu Kaskinen [Tue, 13 Mar 2018 17:40:38 +0000 (19:40 +0200)]
replace sink/source SET_STATE handlers with callbacks

There are no behaviour changes, the code from almost all the SET_STATE
handlers is moved with minimal changes to the newly introduced
set_state_in_io_thread() callback. The only exception is module-tunnel,
which has to call pa_sink_render() after pa_sink.thread_info.state has
been updated. The set_state_in_io_thread() callback is called before
updating that variable, so moving the SET_STATE handler code to the
callback isn't possible.

The purpose of this change is to make it easier to get state change
handling right in modules. Hooking to the SET_STATE messages in modules
required care in calling pa_sink/source_process_msg() at the right time
(or not calling it at all, as was the case on resume failures), and
there were a few bugs (fixed before this patch). Now the core takes care
of ordering things correctly.

Another motivation for this change is that there was some talk about
adding a suspend_cause variable to pa_sink/source.thread_info. The
variable would be updated in the core SET_STATE handler, but that would
not work with the old design, because in case of resume failures modules
didn't call the core message handler.

6 years agooss: don't fail resume if trigger() fails
Tanu Kaskinen [Tue, 13 Mar 2018 17:40:37 +0000 (19:40 +0200)]
oss: don't fail resume if trigger() fails

The previous code made the SET_STATE message fail if trigger() failed.
However, trigger() was called after pa_sink/source_process_msg(), which
meant that the main thread that sent the SET_STATE thought that resuming
failed, but nothing was undone in the IO thread, so in the IO thread
things seemed as if the sink/source was successfully resumed. (I don't
use OSS myself, so I don't know what kind of practical problems this
could cause).

Unless some complex undo logic is implemented, I believe it's best to
ignore all failures in trigger(). Most error cases were already ignored,
and the only one that wasn't ignored doesn't seem too serious.

I also moved trigger() to happen before pa_sink/source_process_msg(),
which made it necessary to add new state parameters to trigger(). The
reason for this move is that I want to move the SET_STATE handler code
into a separate callback, and if things are done both before and after
pa_sink/source_process_msg(), that makes things more complicated.

The previous code checked the return value of
pa_sink/source_process_msg() before calling trigger(), but that was
unnecessary, since pa_sink/source_process_msg() never fails when
processing the SET_STATE messages.

6 years agosink, source: rename set_state() to set_state_in_main_thread()
Tanu Kaskinen [Tue, 13 Mar 2018 17:40:36 +0000 (19:40 +0200)]
sink, source: rename set_state() to set_state_in_main_thread()

There will be a new callback named set_state_in_io_thread(). It seems
like a good idea to have a similar name for the main thread variant.

6 years agobluetooth: fix resume error handling
Tanu Kaskinen [Mon, 19 Feb 2018 14:48:25 +0000 (16:48 +0200)]
bluetooth: fix resume error handling

When resuming a sink or source, pa_sink/source_process_msg() should be
called only if resuming is successful. pa_sink/source_process_msg()
updates thread_info.state and notifies streams about the new state, but
if resuming fails, there's no state change.

6 years agoi18n: update the Indonesian translation
Andika Triwidada [Sun, 4 Mar 2018 16:05:14 +0000 (18:05 +0200)]
i18n: update the Indonesian translation

6 years agonull-sink, pipe-sink: some state variable cleanups
Tanu Kaskinen [Wed, 21 Feb 2018 09:54:41 +0000 (11:54 +0200)]
null-sink, pipe-sink: some state variable cleanups

pa_sink_get_state() is supposed to be used from the main thread. In this
case it doesn't really matter, because the SET_STATE handler is executed
while the main thread is waiting, but since the state is available also
in thread_info, let's use that. All other modules use thread_info.state
too, so at least this change improves consistency.

Also, we can use the PA_SINK_IS_OPENED macro to simplify the code a bit.

6 years agoalsa: add a couple of FIXME comments
Tanu Kaskinen [Mon, 19 Feb 2018 14:48:21 +0000 (16:48 +0200)]
alsa: add a couple of FIXME comments

build_pollfd() isn't likely to fail, but if it does, pa_sink/source_put()
will crash on an assertion failure. I haven't seen such crash happening,
this is just something that I noticed while studying the state change
code.

6 years agoalsa, solaris, oss: remove unnecessary error handling when suspending
Tanu Kaskinen [Mon, 19 Feb 2018 14:48:19 +0000 (16:48 +0200)]
alsa, solaris, oss: remove unnecessary error handling when suspending

Suspending never fails.

6 years agosink: don't sync monitor suspend state when unlinking
Tanu Kaskinen [Thu, 22 Feb 2018 08:06:59 +0000 (10:06 +0200)]
sink: don't sync monitor suspend state when unlinking

When the sink is unlinked, there's no need to update the monitor suspend
state. In fact, trying to do that causes an assertion failure, because
pa_source_sync_suspend() wasn't written to handle the case where the
sink is unlinked.

6 years agopass pa_suspend_cause_t to set_state() callbacks
Tanu Kaskinen [Mon, 19 Feb 2018 14:48:23 +0000 (16:48 +0200)]
pass pa_suspend_cause_t to set_state() callbacks

The suspend cause isn't yet used by any of the callbacks. The alsa sink
and source will use it to sync the mixer when the SESSION suspend cause
is removed. Currently the syncing is done in pa_sink/source_suspend(),
and I want to change that, because pa_sink/source_suspend() shouldn't
have any alsa specific code.

6 years agosink, source: redo state changing code
Tanu Kaskinen [Mon, 19 Feb 2018 14:48:22 +0000 (16:48 +0200)]
sink, source: redo state changing code

This adds a pa_suspend_cause_t parameter to the sink/source_set_state()
functions, and moves part of the work that pa_sink/source_suspend() does
to sink/source_set_state(). The reason for this code shuffling is that I
plan to make all suspend cause changes available to modules through the
state change callbacks. This is the first step towards that.

Additionally, pa_source_sync_suspend() is changed to also update the
suspend cause of the monitor source when the suspend cause of the
monitored sink changes. That probably doesn't have much effect on
anything, but I think it makes sense to mirror the sink suspend cause in
the monitor source.

pa_source_sync_suspend() has also a bug fix: previously it was probably
possible that a sink might get suspended while in the passthrough mode.
When the sink then resumed (while still in the passthrough mode),
pa_source_sync_suspend() would resume also the monitor source, even
though the monitor source should be kept suspended when the sink is in
the passthrough mode. Now the monitor source won't be resumed in this
situation.

6 years agoi18n: update the Lithuanian translation
Mr. M [Thu, 15 Feb 2018 08:29:48 +0000 (10:29 +0200)]
i18n: update the Lithuanian translation

6 years agoalsa-mixer: autodetect the ELD device
Tanu Kaskinen [Sun, 8 Oct 2017 16:48:26 +0000 (19:48 +0300)]
alsa-mixer: autodetect the ELD device

This removes the need to hardcode the ELD device index in the path
configuration. The hardcoded values don't work with the Intel HDMI LPE
driver.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
6 years agoalsa-mixer: autodetect the HDMI jack PCM device
Tanu Kaskinen [Sun, 8 Oct 2017 16:48:25 +0000 (19:48 +0300)]
alsa-mixer: autodetect the HDMI jack PCM device

This removes the need to hardcode the PCM device index in the HDMI jack
names. The hardcoded values don't work with the Intel HDMI LPE driver.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
6 years agoalsa-mixer: add hw_device_index to pa_alsa_mapping
Tanu Kaskinen [Sun, 8 Oct 2017 16:48:24 +0000 (19:48 +0300)]
alsa-mixer: add hw_device_index to pa_alsa_mapping

We have so far assumed that HDMI always uses device indexes 3, 7, 8, 9,
10, 11, 12 and 13. These values are hardcoded in the path configuration.
The Intel HDMI LPE driver, however, uses different device numbering
scheme. Since the indexes aren't always the same, we need to query the
hw device index from ALSA.

Later patches will use the queried index for HDMI jack detection and ELD
information reading.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
6 years agofilter-apply: Ignore monitor source of filter in find_paired_master()
Georg Chini [Sat, 10 Feb 2018 19:39:27 +0000 (20:39 +0100)]
filter-apply: Ignore monitor source of filter in find_paired_master()

When module-filter-apply tries to find a matching source-output for
a given sink-input and a stream within the same group exists on the
monitor source of the filter, module-filter apply falsely assumes
that the source belongs to another instance of the filter and tries
to access source->output_from_master->source, which leads to a
segmentation fault.

This patch fixes the issue by ignoring the stream if the source is
the monitor source of the filter.

6 years agomemfd-wrappers: only define memfd_create() if not already defined
Tanu Kaskinen [Wed, 24 Jan 2018 01:51:49 +0000 (03:51 +0200)]
memfd-wrappers: only define memfd_create() if not already defined

glibc 2.27 is to be released soon, and it will provide memfd_create().
If glibc provides the function, we must not define it ourselves,
otherwise building fails due to conflict between the two implementations
of the same function.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104733
6 years agodaemon: don't re-exec if the linker supports the -z,now option upstream/master
Vivek Dasmohapatra [Fri, 26 Jan 2018 01:58:19 +0000 (03:58 +0200)]
daemon: don't re-exec if the linker supports the -z,now option

Usually PulseAudio is built with a linker that supports the -z,now
option, and that option should have the same effect (i.e. the dynamic
linker resolves all symbols when the program is started) as re-execing
with the LD_BIND_NOW environment variable set, so usually the re-execing
is redundant.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104789
6 years agobuild-sys: don't install esdcompat tool if building without esound support
Felipe Sateler [Tue, 16 Jan 2018 00:14:45 +0000 (21:14 -0300)]
build-sys: don't install esdcompat tool if building without esound support

6 years agobluetooth: don't send unsolicted replies to the endpoint Release() call
Tanu Kaskinen [Thu, 18 Jan 2018 20:27:54 +0000 (22:27 +0200)]
bluetooth: don't send unsolicted replies to the endpoint Release() call

It was reported that PulseAudio causes error messages in syslog from
dbus-daemon:

Jan 14 04:51:32 gentoo dbus-daemon[2492]: [system] Rejected send message, 2 matched rules; type="error", sender=":1.15" (uid=1000 pid=2864 comm="/usr/bin/pulseaudio --start --log-target=syslog ") interface="(unset)" member="(unset)" error name="org.bluez.MediaEndpoint1.Error.NotImplemented" requested_reply="0" destination=":1.1" (uid=0 pid=2670 comm="/usr/libexec/bluetooth/bluetoothd ")

The default policy on the system bus is to not let any method call
replies through if they have not been requested, and apparently
bluetoothd doesn't want replies to the Release() call.

This also changes the reply type from error to normal reply. The "not
implemented" error didn't make sense to me. We don't do any cleanup in
the Release() handler, probably because there's nothing to do. If there
is some cleanup that we should do, then it's a serious bug not to do it.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104646
6 years agopipe-sink: use existing fifo
Samo Pogačnik [Thu, 18 Jan 2018 15:15:18 +0000 (16:15 +0100)]
pipe-sink: use existing fifo

Allow usage of an already existing fifo (named pipe) within the
pipe-sink module. Also, the used fifo is going to be removed upon
module unload only if the fifo is created by the same module.

6 years agoalsa-mixer: add another hardware ID for Traktor Audio 6
Tanu Kaskinen [Thu, 11 Jan 2018 17:32:29 +0000 (19:32 +0200)]
alsa-mixer: add another hardware ID for Traktor Audio 6

This is based on a patch by Rolo <rolo@wildfish.com> that replaced the
old ID with the new one. I deemed it better to leave the old ID in use
(I can't verify if the old ID was correct or not).

The original commit message:

    Every time I reinstall or update Ubuntu I have to make this change
    to get it to recognise my Native Instruments Traktor Audio 6
    external soundcard.

    Each time I remember the change by hunting down this forum post in
    German,
    https://forum.ubuntuusers.de/topic/traktor-audio-6-erkannt-aber-nicht-anwaehlbar/3/#post-8759808
    (I don't speak German).

    I'm not sure if the ID is just incorrect or if perhaps the hardware
    identifies itself differently on slightly different models, so
    perhaps we need to duplicate the line - I'm well outside of my
    comfort zone here and I know barely anything about how hardware
    works on Linux but figured if it helps me it would help others so I
    should put it forward.

    Thanks!

6 years agopipe-sink: new option "use_system_clock_for_timing"
Samo Pogačnik [Wed, 3 Jan 2018 19:34:58 +0000 (20:34 +0100)]
pipe-sink: new option "use_system_clock_for_timing"

Using this option, even the simplest tools like "cat" can properly
dump raw audio from the pipe.

6 years agoswitch-on-port-available: remove unused return values
Tanu Kaskinen [Thu, 28 Dec 2017 15:14:13 +0000 (17:14 +0200)]
switch-on-port-available: remove unused return values

6 years agoi18n: fix French translation of "Line Out"
Laurent Bigonville [Wed, 13 Dec 2017 11:12:35 +0000 (12:12 +0100)]
i18n: fix French translation of "Line Out"

6 years agoi18n: update the Swedish translation
Josef Andersson [Wed, 3 Jan 2018 15:06:40 +0000 (17:06 +0200)]
i18n: update the Swedish translation

6 years agobuild-sys: fix PA_MODULE_NAME for module-default-device-restore
Tanu Kaskinen [Thu, 28 Dec 2017 14:53:51 +0000 (16:53 +0200)]
build-sys: fix PA_MODULE_NAME for module-default-device-restore

6 years agosink, source: improve suspend cause logging
Tanu Kaskinen [Thu, 28 Dec 2017 10:09:19 +0000 (12:09 +0200)]
sink, source: improve suspend cause logging

Previously the suspend cause was logged as a hexadecimal number, now
it's logged as a human-friendly string.

Also, the command line interface handled only a subset of causes when
printing them, now all suspend causes are printed.

6 years agosink, source: improve state change logging
Tanu Kaskinen [Thu, 28 Dec 2017 10:09:18 +0000 (12:09 +0200)]
sink, source: improve state change logging

Now the old and new state is logged every time when the sink or source
state changes.

6 years agoalsa: fix infinite loop with Intel HDMI LPE
Tanu Kaskinen [Thu, 28 Dec 2017 10:09:17 +0000 (12:09 +0200)]
alsa: fix infinite loop with Intel HDMI LPE

The Intel HDMI LPE driver works in a peculiar way when the HDMI cable is
not plugged in: any written audio is immediately discarded and underrun
is reported. That resulted in an infinite loop, because PulseAudio tried
to keep the buffer filled, which was futile since the written audio was
immediately consumed/discarded.

This patch adds special handling for the LPE driver: if the active port
of the sink is unavailable, the sink suspends itself. A new suspend
cause is added: PA_SUSPEND_UNAVAILABLE.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488
6 years agobuild-sys: Stop using symdef headers for modules
Arun Raghavan [Tue, 5 Dec 2017 05:24:41 +0000 (10:54 +0530)]
build-sys: Stop using symdef headers for modules

This removes the symdef header generation m4 magic in favour of a
simpler macro method, allowing us to skip one unnecessary build step
while moving to meson, and removing an 11 year old todo!

6 years agomap-file: add pa_encoding_from_string
Tanu Kaskinen [Tue, 12 Dec 2017 04:16:04 +0000 (06:16 +0200)]
map-file: add pa_encoding_from_string

The function is declared in pulse/format.h and it has Doxygen
documentation, which tells me that the intention was to make the
function available to clients.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=103806
6 years agoqpaeq: port to PyQt5
Andrius Štikonas [Mon, 20 Nov 2017 19:56:53 +0000 (19:56 +0000)]
qpaeq: port to PyQt5

6 years agofilter-apply: Eliminate nested and redundant hook events
KimJeongYeon [Sat, 9 Dec 2017 20:00:20 +0000 (21:00 +0100)]
filter-apply: Eliminate nested and redundant hook events

In proces(), the do_move() function calls pa_{sink_input,source_output}_set_property().
This triggers a call to {sink_input,source_output}_proplist_cb() which called process()
a second time.

This patch avoids the duplicate and nested call to process() by checking if
PA_PROP_FILTER_APPLY_MOVING is set in {sink_input,source_output}_proplist_cb().

6 years agoladspa-sink: add module argument to set sink input properties
Roliga [Sun, 3 Dec 2017 06:15:11 +0000 (07:15 +0100)]
ladspa-sink: add module argument to set sink input properties

This patch adds a sink_input_properties argument to module-ladspa-sink,
which can be helpful for customizing the appearance of the sink input in
various volume control applications, or to differentiate between
multiple instances of the module.

6 years agoaugment-properties: fix a memory leak
Tanu Kaskinen [Wed, 6 Dec 2017 23:26:29 +0000 (01:26 +0200)]
augment-properties: fix a memory leak

If the desktop file is not found, fn was not being freed after the last
loop iteration.

CID: 1462477

6 years agocore-util, cpu-x86: use __get_cpuid() instead of homegrown assembly
Tanu Kaskinen [Wed, 22 Nov 2017 15:14:10 +0000 (17:14 +0200)]
core-util, cpu-x86: use __get_cpuid() instead of homegrown assembly

The get_cpuid() function in cpu-x86.c was buggy on x86-64. When building
without optimizations, the homegrown assembly code overwrote the
beginning of the function argument list on the stack. That happened to
work fine on regular x86-64, but caused crashing with the x32 ABI.

At least GCC and clang provide cpuid.h, which has the __get_cpuid()
function that can be used instead of the homegrown assembly.

The PA_REG_* constants can be removed as well, because they're not used
any more.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=103656
6 years agoclient-conf: Add a default value for disable-memfd
Arun Raghavan [Fri, 27 Oct 2017 03:59:19 +0000 (09:29 +0530)]
client-conf: Add a default value for disable-memfd

This got missed while adding the client option.

6 years agosink, source: Don't finish move if unlink happens after pa_*_move_all_start()
Georg Chini [Sun, 3 Dec 2017 21:29:09 +0000 (22:29 +0100)]
sink, source: Don't finish move if unlink happens after pa_*_move_all_start()

When a sink input was unlinked between the calls to pa_sink_move_all_start() and
pa_sink_move_all_finish(), pa_sink_move_all_finish() tried to finish the move
of the already unlinked sink input, which lead to an assertion in
pa_sink_input_finish_move(). The same applies for the source side.

This patch fixes the problem by checking the state of the sink input or
source output in pa_*_move_all_finish().

Bug report: https://bugs.freedesktop.org/show_bug.cgi?id=103752

6 years agoswitch-on-connect: add option to ignore virtual sinks/sources
Georg Chini [Sun, 3 Dec 2017 21:27:53 +0000 (22:27 +0100)]
switch-on-connect: add option to ignore virtual sinks/sources

module-switch-on-connect would switch to any new sink, even if the sink
was a filter or a null-sink.

This patch adds a command line option ignore_virtual to the module, which
lets module-switch-on-connect ignore virtual sinks and sources. The flag
is true by default because the purpose of the module is to switch to new
hardware when it becomes available.

6 years agodevice-manager: don't override application routing requests
Tanu Kaskinen [Tue, 28 Nov 2017 17:50:02 +0000 (19:50 +0200)]
device-manager: don't override application routing requests

module-device-manager doesn't change the routing of those streams that
have been explicitly routed by the user, which is good. Similarly, it
should leave those streams alone whose routing was decided by the
application that created the stream. This patch implements that.

BugLink: https://github.com/wwmm/pulseeffects/issues/99
6 years agosink-input, source-output: add sink/source_requested_by_application flag
Tanu Kaskinen [Tue, 28 Nov 2017 17:50:01 +0000 (19:50 +0200)]
sink-input, source-output: add sink/source_requested_by_application flag

When a stream is created, and the stream creator specifies which device
should be used, that can affect automatic routing policies.
Specifically, module-device-manager shouldn't apply its priority list
routing when a stream has been routed by the application that created
the stream.

A stream that was initially routed by the application may be moved for
some valid reason (e.g. user requesting a move, or the original device
disappearing). When the stream is moved away from its initial device,
the "device requested by application" flag isn't relevant any more, so
it's set to false and never reset to true again.

The change in module-device-manager's routing logic will be done in the
following patch.

6 years agoaugment-properties: support XDG_DATA_DIRS when find desktop files
Iceyer [Sat, 18 Nov 2017 07:33:51 +0000 (15:33 +0800)]
augment-properties: support XDG_DATA_DIRS when find desktop files

6 years agosconv-s16be: declaration/implementation mismatches
Constantine Kharlamov [Wed, 8 Nov 2017 17:01:07 +0000 (20:01 +0300)]
sconv-s16be: declaration/implementation mismatches

Fixes the following compiler errors:

./pulsecore/sconv-s16be.h:41:6: warning: type of 'pa_sconv_s24_32be_from_float32ne' does not match original declaration [-Wlto-type-mismatch]
 void pa_sconv_s24_32be_from_float32ne(unsigned n, const float *a, uint8_t *b);
      ^
pulsecore/sconv-s16le.c:413:6: note: 'pa_sconv_s24_32be_from_float32ne' was previously declared here
 void pa_sconv_s24_32le_from_float32ne(unsigned n, const float *a, uint32_t *b) {
      ^
pulsecore/sconv-s16le.c:413:6: note: code may be misoptimized unless -fno-strict-aliasing is used
./pulsecore/sconv-s16be.h:40:6: warning: type of 'pa_sconv_s24_32be_to_float32ne' does not match original declaration [-Wlto-type-mismatch]
 void pa_sconv_s24_32be_to_float32ne(unsigned n, const uint8_t *a, float *b);
      ^
pulsecore/sconv-s16le.c:388:6: note: 'pa_sconv_s24_32be_to_float32ne' was previously declared here
 void pa_sconv_s24_32le_to_float32ne(unsigned n, const uint32_t *a, float *b) {
      ^
pulsecore/sconv-s16le.c:388:6: note: code may be misoptimized unless -fno-strict-aliasing is used
./pulsecore/sconv-s16be.h:56:6: warning: type of 'pa_sconv_s24_32be_from_s16ne' does not match original declaration [-Wlto-type-mismatch]
 void pa_sconv_s24_32be_from_s16ne(unsigned n, const int16_t *a, uint8_t *b);
      ^
pulsecore/sconv-s16le.c:365:6: note: 'pa_sconv_s24_32be_from_s16ne' was previously declared here
 void pa_sconv_s24_32le_from_s16ne(unsigned n, const int16_t *a, uint32_t *b) {
      ^
pulsecore/sconv-s16le.c:365:6: note: code may be misoptimized unless -fno-strict-aliasing is used
./pulsecore/sconv-s16be.h:55:6: warning: type of 'pa_sconv_s24_32be_to_s16ne' does not match original declaration [-Wlto-type-mismatch]
 void pa_sconv_s24_32be_to_s16ne(unsigned n, const uint8_t *a, int16_t *b);
      ^
pulsecore/sconv-s16le.c:342:6: note: 'pa_sconv_s24_32be_to_s16ne' was previously declared here
 void pa_sconv_s24_32le_to_s16ne(unsigned n, const uint32_t *a, int16_t *b) {
      ^
pulsecore/sconv-s16le.c:342:6: note: code may be misoptimized unless -fno-strict-aliasing is used

Signed-off-by: Constantine Kharlamov <Hi-Angel@yandex.ru>
6 years agomerge and deduplicate some pa_buffer_attr documentation
jnqnfe [Fri, 8 Sep 2017 03:31:42 +0000 (04:31 +0100)]
merge and deduplicate some pa_buffer_attr documentation

6 years agoapi documentation improvements
jnqnfe [Mon, 4 Sep 2017 19:19:48 +0000 (20:19 +0100)]
api documentation improvements

includes typo fixes, neatening, addition of more return info, and such.

6 years agovolume: slight simplification of code
jnqnfe [Mon, 4 Sep 2017 01:32:37 +0000 (02:32 +0100)]
volume: slight simplification of code

6 years agovolume: pa_cvolume_scale_mask: constify param
jnqnfe [Thu, 31 Aug 2017 17:32:47 +0000 (18:32 +0100)]
volume: pa_cvolume_scale_mask: constify param

6 years agobuild-sys: add the Dell dock TB16 configuration
Hui Wang [Mon, 13 Nov 2017 02:17:19 +0000 (10:17 +0800)]
build-sys: add the Dell dock TB16 configuration

Signed-off-by: Hui Wang <hui.wang@canonical.com>
6 years agoecho-cancel: fix a memory leak
Tanu Kaskinen [Thu, 9 Nov 2017 12:12:34 +0000 (14:12 +0200)]
echo-cancel: fix a memory leak

The pa_echo_canceller_msg object was never unreffed.

6 years agoecho-cancel: ignore remaining canceller messages after the module has been unloaded
Tanu Kaskinen [Thu, 9 Nov 2017 12:12:33 +0000 (14:12 +0200)]
echo-cancel: ignore remaining canceller messages after the module has been unloaded

Not ignoring the messages caused crashing due to accessing the userdata
after it had been freed.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=103528
6 years agocard-restore: don't restore unavailable profiles
Tanu Kaskinen [Wed, 8 Nov 2017 12:20:23 +0000 (14:20 +0200)]
card-restore: don't restore unavailable profiles

6 years agocard-restore: log the correct profile name
Tanu Kaskinen [Wed, 8 Nov 2017 12:20:22 +0000 (14:20 +0200)]
card-restore: log the correct profile name

6 years agoremap-source, virtual-source: fix max_rewind handling
Tanu Kaskinen [Tue, 31 Oct 2017 13:29:26 +0000 (15:29 +0200)]
remap-source, virtual-source: fix max_rewind handling

The filter sources should have the same max_rewind as the master source,
but these modules didn't update max_rewind when the master max_rewind
changed.

6 years agoalsa-sink: update max_rewind when updating the latency
Tanu Kaskinen [Tue, 31 Oct 2017 13:29:25 +0000 (15:29 +0200)]
alsa-sink: update max_rewind when updating the latency

Previously max_rewind was always set to the full hw buffer size, but
the actual maximum rewind amount is limited to the part of the hw buffer
that is in use.

The rewind request that was done when lowering the sink latency had to
be moved to happen before updating max_rewind.

The practical benefit of this change: When using a filter source on a
monitor source, the filter source latency is increased by max_rewind.
Without this change the max_rewind of an alsa sink is often
unnecessarily high, which leads to unnecessarily high latency with
filter sources.

Monitor sources themselves don't suffer from the latency issue, because
they use the current sink latency instead of max_rewind for the extra
buffer that they keep to deal with rewinds.

6 years agosvolume: disable incompatible MMX and SSE code on x86 macOS
Mihai Moldovan [Tue, 7 Mar 2017 22:00:10 +0000 (23:00 +0100)]
svolume: disable incompatible MMX and SSE code on x86 macOS

We need the same workaround FreeBSD uses.

6 years agomodule-coreaudio-{device, detect}: implement record and playback modargs, curtesy...
Mihai Moldovan [Thu, 11 Feb 2016 02:25:33 +0000 (03:25 +0100)]
module-coreaudio-{device, detect}: implement record and playback modargs, curtesy of module-waveout.

Signed-off-by: Mihai Moldovan <ionic@ionic.de>
6 years agosink-input, source-output: add a couple of assertions
Tanu Kaskinen [Sun, 29 Oct 2017 19:15:48 +0000 (21:15 +0200)]
sink-input, source-output: add a couple of assertions

Coverity complained about data->sink being possibly NULL when it's
dereferenced later. It was difficult for me to figure out whether that
was a false positive or not. Hopefully the comments make it a bit
easier to reason about the code in the future.

CID: 1323591

6 years agosystem.pa: load module-card-restore
Tanu Kaskinen [Thu, 27 Oct 2016 14:59:29 +0000 (17:59 +0300)]
system.pa: load module-card-restore

Apparently nobody remembered to update system.pa when
module-card-restore was created.

6 years agosystem.pa: load module-device-restore before module-udev-detect
Tanu Kaskinen [Thu, 27 Oct 2016 14:59:28 +0000 (17:59 +0300)]
system.pa: load module-device-restore before module-udev-detect

module-device-restore doesn't restore the state of devices that already
exist during the module loading, so the module has to be loaded early.

6 years agoecho-cancel: Expose dereverb in the speex canceller
Arun Raghavan [Mon, 15 May 2017 08:47:58 +0000 (14:17 +0530)]
echo-cancel: Expose dereverb in the speex canceller

Enabled by default.

6 years agoecho-cancel: Fix speex echo state setting
Arun Raghavan [Mon, 15 May 2017 08:47:08 +0000 (14:17 +0530)]
echo-cancel: Fix speex echo state setting

The state should be set even if echo suppression is disabled, which is
not currently the case.

6 years agomention the sound card clock and system clock difference in libpulse docs
Tanu Kaskinen [Thu, 19 Oct 2017 18:22:15 +0000 (21:22 +0300)]
mention the sound card clock and system clock difference in libpulse docs

6 years agosink, source: Rework reconfiguration logic to apply to more than rate
Arun Raghavan [Sun, 3 Sep 2017 11:23:17 +0000 (16:53 +0530)]
sink, source: Rework reconfiguration logic to apply to more than rate

This rejigs the update_rate() logic to encompass changes to the sample
spec as a whole, as well as passthrough status. As a result,
sinks/sources provide a reconfigure() method which allows
reconfiguration as required.

The behaviour itself is currently unchanged -- alsa-sink/-source do not
actually implement anything other than rate updates for now (nor are
they ever requested to). This can be modified in the future, to allow,
for example 24-bit output when incoming media supports it, as well as
channel count changes for passthrough sinks.

Another related change is that passthrough status is now part of
sink/source reconfiguration, and we can stop doing a suspend/unsuspend
when entering/leaving passthrough state. So that part is now divided
in two -- pa_sink_reconfigure() sets the sink in passthrough mode if
required, and pa_sink_enter_passthrough() sets up everything else
(this currently means only volumes, but could disable other processing)
for passthrough mode.

6 years agoloopback: Track and use average adjust time
Georg Chini [Sat, 21 Oct 2017 10:44:03 +0000 (12:44 +0200)]
loopback: Track and use average adjust time

The configured adjust time does not match exactly the real adjust time. Also
the adjust time varies. To improve latency estimation use an average of the
measured adjust times instead of the configured value in all calculations.

6 years agovolume: improve documentation
Tanu Kaskinen [Sun, 15 Oct 2017 13:56:45 +0000 (16:56 +0300)]
volume: improve documentation

Changes:
 - Mention that source outputs have volume too.
 - Don't claim that most distributions have flat volumes enabled.
 - Volumes use a cubic scale, not logarithmic.
 - Reword the warning about using the conversion functions on hardware
   volumes. The old wording gave the incorrect impression that hardware
   volumes could never be converted to dB or linear scale.

6 years agobluetooth: set better priorities for profiles
Tanu Kaskinen [Sun, 15 Oct 2017 10:29:42 +0000 (13:29 +0300)]
bluetooth: set better priorities for profiles

Since HSP had higher priority than A2DP, the default profile when
connecting a new headset was HSP. To me it makes more sense to default
to high-quality output. We already have some automatic policies to
switch to HSP when it's needed.

I also made the A2DP source and HSP/HFP gateway profiles have lower
priority than the A2DP sink and HSP headset profiles. The A2DP source
and HSP/HFP gateway profiles should only be activated if the remote
device initiates audio streaming, so it makes sense to have lower
priority for those profiles.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=103058