Commit graph

7165 commits

Author SHA1 Message Date
Tanu Kaskinen
29c60537d2 .gitignore: add atomic-test 2019-06-15 11:14:33 +03:00
Thomas Hutschenreuther
d4ff4adce2 atomic: fix load and store for armv7 and higher
The original atomic implementation in pulseaudio based on
libatomic stated that the intent was to use full memory barriers.

According to [1], the load and store implementation based on
gcc builtins matches sequential consistent (i.e. full memory barrier)
load and store ordering only for x86.

I observed random crashes in client applications using memfd srbchannel
transport on an armv8-aarch64 platform (cortex-a57).
In all those crashes the first read on the pstream descriptor
(the size field) was wrong and looked like it contained old data.
I boiled the relevant parts of the srbchannel implementation down to
a simple test case and could observe random test failures.
So I figured that the atomic implementation was broken for armv8
with respect to cross-cpu memory access ordering consistency.

In order to come up with a minimal fix, I used the newer
__atomic_load_n/__atomic_store_n builtins from gcc.

With
aarch64-linux-gnu-gcc (Linaro GCC 7.3-2018.05) 7.3.1 20180425
they compile to
ldar and stlxr on arm64, which is correct according to [1] and [2].

The other atomic operations based on __sync builtins don't need
to be touched since they already are of the full memory barrier
variety.

[1] https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
[2] <https://community.arm.com/developer/ip-products/processors
    /b/processors-ip-blog/posts/armv8-a-architecture-2016-additions>
2019-06-11 19:04:46 +03:00
Tanu Kaskinen
7fb85e0a5b sink, source: Don't change suspend cause when unlinking
See the added comments for why this is necessary.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/667
2019-06-10 14:21:59 +03:00
shdown
6b1719d0ed mainloop: fix timeout assignment in pa_mainloop_prepare
The function calculates the correct timeout (in microseconds) to assign 
in the `u` variable, but then assigns `m->prepared_timeout` the value   
of the `timeout` argument (in milliseconds).
2019-06-09 13:40:14 +00:00
Hui Wang
cbaeea4af7 stream-restore: Don't restore if the active_port is PA_AVAILABLE_NO
We met two problems recently, one happened on a Lenovo machine with
dual analogue codecs, the other happened on a Dell machine with
a digital mic directly connected to PCH. The two problems are
basically same, there is an internal mic and an external mic, the
internal mic always shows up in the gnome-control-center, the external
mic only shows up when it is plugged. After the external mic is
plugged and users select it from gnome-control-center, the
gnome-control-center will read all saved streams through extension_cb,
and bind the source of external mic to all streams, after that the
apps only record sound via the source of external mic, after the
external mic is unplugged, the internal mic will automatically be
selected since it is the only left input device in the
gnome-control-center, since users don't select it, all streams are
still bond the source of external mic. When users record sound via
apps, they can't record any sound even the default_source is the
source of internal mic and the internal mic is selected in the UI.

It is very common that a machine has internal mic and external mic,
but this problem didn't expose before, that is because both internal
mic and external mic belong to one source, but for those two
machines, the internal mic belongs to one source, while the external
mic belongs to another source (they are in differnt codecs or one is
in the codec and the other is from PCH),

To fix it with a mininal change, we just check if the active_port is
PA_AVAILABLE_NO or not when building a new stream, if it is, don't
restore the device to the new built stream, let pa_source_output_new()
decide the source device for this stream.

And we also do the same change to sink_input.

This change only affects the new built streams, it will not change
the database, so the users' preference is still saved in the database,
after the active_port is not PA_AVAILABLE_NO, the new streams will
still restore to the preferred device.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
2019-06-09 12:10:14 +03:00
Arun Raghavan
aeb0ef1fea meson: Duplicate split of long daemon tests from autotools build
This avoids the running the longer daemon tests by default to make CI
faster.
2019-06-08 12:55:50 +02:00
Arun Raghavan
6a60f91054 meson: Skip norun tests
These weren't meant to be run, so we skip then while generating meson
tests.
2019-06-08 12:47:53 +02:00
Arun Raghavan
2ee919e980 daemon: Drop empty fields in desktop file
The fields weren't used, and were incorrectly munged during generation.
This makes validation succeed.
2019-06-08 12:43:12 +02:00
Arnaud Rebillout
b56a381b1b meson: Disable alsa-mixer-path-test
This test relies on parsing the generated Makefile. A meson equivalent
requires to re-write all the parser.

Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 12:03:03 +02:00
Arnaud Rebillout
0e1cfdc523 meson: Increase timeout for tests
This solves numerous timeout failures

Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 12:03:03 +02:00
Arnaud Rebillout
aa5502926f meson: Add ORC support
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 12:03:03 +02:00
Arnaud Rebillout
06e37b3057 meson: Disable esound modules
For now esound is not supported with the meson build, although it
wouldn't be that hard to support it.

Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 12:03:03 +02:00
Arnaud Rebillout
71c24862e7 meson: Install headers
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 12:03:03 +02:00
Arnaud Rebillout
a054e088a3 meson: Install systemd user service
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
d717089218 meson: Build libwebrtc-util as a shared library
As it'sdone in the autotools

Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
f5c9ef59f3 meson: Install utils symlinks, install qpaeq
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
8a15af4ffc meson: Move oss-util in a library
Like it was with the aututools

Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
aa7da46717 meson: Install dbus policy file
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
e0f23a41e1 meson: Fix install paths
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
52bf9e9b84 meson: Build daemon custom targets by default
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
f5bc45a941 meson: Translate and install desktop file
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
5084dbd96a meson: Install ALSA udevrules
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
8146f87808 meson: Fix various install scripts
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
fdf3384f24 meson: Add systemduserunitdir option
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
cd1418222b meson: Install pkg-config files
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
a37046cc38 test-daemon: No need to define dl-search-path
There's already a hook that modifies the search path when run from the
build tree.

      if (pa_run_from_build_tree()) {
          pa_log_notice("Detected that we are run from the build tree, fixing search path.");
  #ifdef MESON_BUILD
          c->dl_search_path = pa_xstrdup(PA_BUILDDIR PA_PATH_SEP "src" PA_PATH_SEP "modules");
  #else
          c->dl_search_path = pa_xstrdup(PA_BUILDDIR);
  #endif
      } else

I'm not sure how it works behind the hood, but by setting
--dl-search-path, we get errors in the logs when running `make
check-daemon`:

 E: [pulseaudio][daemon/ltdl-bind-now.c:75 bind_now_open()] Failed to open module /home/arno/proj/pulse/src/pa.up/src/.libs/.libs/module-native-protocol-unix.so:
   /home/arno/proj/pulse/src/pa.up/src/.libs/.libs/module-native-protocol-unix.so: cannot open shared object file: No such file or directory
 I: [pulseaudio][pulsecore/module.c:197 pa_module_load()] Loaded "module-native-protocol-unix" (index: #3; argument: "").

So basically, PA tries two paths, fails the first time (obviously we can
see the path is not correct), then tries again with another path (where
does it gets it?) and succeeds. So there's no obvious error if you don't
look at the log.

This commit removes the useless `--dl-search-path`, which has the effect
to remove the errors in the logs.

Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
c71457ac5f meson: Enable echo-cancel test
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
c3e7262219 meson: Define HAVE_SYS_UN_H, this was forgotten
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:57:00 +02:00
Arnaud Rebillout
6dbb0774b2 meson: Enable (almost) all tests
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:56:56 +02:00
Arnaud Rebillout
35ed95df0d meson: Add libpulse simple
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 11:44:00 +02:00
Arnaud Rebillout
9a10eccea3 meson: Add a dependency object for libpulse_mainloop_glib
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
2019-06-08 10:32:14 +02:00
Sangchul Lee
8a4e0c167b sink: Set monitor source's avoid-resampling value to its sink's
It was omitted. This patch fixes unexpected behavior that avoid-
resampling does not work in some cases.

Signed-off-by: Sangchul Lee <sangchul1011@gmail.com>
2019-06-07 22:35:19 +09:00
Arun Raghavan
37dbeae031 build-sys: Fix up meson install paths
Brings things in line with the autotools build, and adds ALSA mixer
paths and profile-sets into the meson build system as well.

The module installation path is also now customisable.
2019-06-06 18:49:59 +02:00
Tanu Kaskinen
91bb9b77e4 loopback: fix callback name in comment 2019-05-29 11:07:01 +03:00
Tanu Kaskinen
9de4b10093 loopback: remove an unnecessary level of pointer dereferencing
The userdata struct has a pointer to the core itself, no need to go via
u->module to get to it.
2019-05-29 10:44:29 +03:00
Georg Chini
755884d131 core: add simple message interface
This patch adds a new feature to the core which allows to send messages
to objects. An object can register/unregister a message handler with
pa_message_handler_{register, unregister}() while a message can be sent
to the handler using the pa_message_handler_send_message() function.
A message has 4 arguments (apart from passing the core):

object_path: The path identifying the object that will receive the message
message: message command
message_parameters: A string containing additional parameters
response: Pointer to a response string that will be filled by the
          message handler. The caller is responsible to free the string.

The patch is a precondition for the following patches that allow clients
to send messages to pulseaudio objects.

There is no restriction on object names, except that an object path
always starts with a "/". The intention is to use a path-like syntax,
for example /core/sink_1 for a sink or /name/instances/index for modules.
The exact naming convention still needs to be agreed.
2019-05-25 15:28:41 +03:00
Georg Chini
ab9fed9523 core-util: Avoid usage of pa_strbuf in pa_escape()
The current code uses a pa_strbuf to construct the escaped string. This
will generate a linked list member for each character which may be very
inefficient.
This patch avoids the use of pa_strbuf by allocating a sufficiently large
string which can be filled with the output data.
2019-05-25 15:28:41 +03:00
Nate Brown
f34ea0f0c3 Expose control param to alsa-card module 2019-05-23 14:15:55 +00:00
Tanu Kaskinen
59005d16f1 core: send subscription events when the configured default sink or source changes
These events were missing, because the
pa_core_update_default_sink/source() calls were assumed to send the
subscription events when necessary. Often that indeed is the case, but
if the current configured default sink doesn't exist, and then the
current default sink is set as the configured default sink, the
configured default sink changes but the default sink doesn't, and in
this case pa_core_update_default_sink() doesn't send the change event.

module-default-device-restore relies on getting a notification whenever
the configured default sink changes, and the missing event meant that
the files containing the configured sink and source weren't updated in
some cases.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/648
2019-05-23 07:37:15 +00:00
Wellington Wallace
eadd987a66 null-sink: setting maximum latency to 50 ms when rewinds are disabled 2019-05-08 12:05:49 -03:00
Wellington Wallace
e74a154f29 null-sink: add an option that allows rewinds to be disabled 2019-05-07 11:58:45 -03:00
Wellington Wallace
16a7f1e02c null-sink: add an option that allows rewinds to be disabled 2019-05-04 16:39:16 +00:00
Takashi Iwai
b89d33bb18 alsa: Fix inclusion of use-case.h
The recent change in ALSA upstream stripped -I$include/alsa path from
pkgconfig.  We already fixed for this change in some places but still
the code for UCM was overlooked, and this resulted in the unresolved
symbols in alsa card module. Fix them as well.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-04-22 11:06:43 +03:00
Tanu Kaskinen
2f6a46ca1a build-sys: Fix the Meson build
The recent bluetooth patches didn't update the Meson build system.
2019-04-12 16:05:51 +03:00
Pali Rohár
1b6e5b8554 bluetooth: Set correct endianity of audio samples for SBC codec
Pulseaudio SBC codec defines that audio samples are in PA_SAMPLE_S16LE
format which is little endian. But libsbc library expects audio samples by
default in host endianity which is big endian on big endian system. So SBC
support on big endian system is broken. To fix this problem tell libsbc
library that audio samples are in little endian to match PA_SIMPLE_S16LE
sample format.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=91359
2019-04-12 15:09:49 +03:00
Pali Rohár
63add82c82 bluetooth: Clean up SBC bitpool calculation
Remove dead code and replace numeric bitpool values by macro definitions.

Maximal bitpool value in fill_capabilities() was reduced from 64 to 53
(SBC_BITPOOL_HQ_JOINT_STEREO_44100) because default_bitpool() already set
maximal value to 53.

This patch does not change SBC behavior as maximal bitpool was already
limited to 53. So it is just clean up.
2019-04-12 15:09:33 +03:00
Pali Rohár
745c161cc0 bluetooth: Add missing validations for SBC codec parameters 2019-04-12 15:09:16 +03:00
Pali Rohár
106aa91477 bluetooth: Modular API for A2DP codecs
This patch introduce new modular API for bluetooth A2DP codecs. Its
benefits are:

* bluez5-util and module-bluez5-device does not contain any codec specific
  code, they are codec independent.

* For adding new A2DP codec it is needed just to adjust one table in
  a2dp-codec-util.c file. All codec specific functions are in separate
  codec file.

* Support for backchannel (microphone voice). Some A2DP codecs (like
  FastStream or aptX Low Latency) are bi-directional and can be used for
  both music playback and audio call.

* Support for more configurations per codec. This allows to implement low
  quality mode of some codec together with high quality.

Current SBC codec implementation was moved from bluez5-util and
module-bluez5-device to its own file and converted to this new A2DP API.
2019-04-12 15:09:08 +03:00
Pali Rohár
e8c4638f79 bluetooth: Update a2dp-codecs.h from upstream bluez project 2019-04-12 13:56:28 +03:00
Pali Rohár
e81e7a2ca5 bluetooth: policy: Remove BlueZ 4 related code 2019-04-12 13:56:25 +03:00