Commit graph

3893 commits

Author SHA1 Message Date
Wim Taymans
88ba3014d6 pulse-tunnel: increase default latency to 100ms
20ms is too small and might be a typo from the pulseaudio 200ms default
latency.
2021-09-23 13:00:15 +02:00
Peter Hutterer
f06741d6fc media-session: define NAME before including reserve.c
This ensures the log messages show up with the right module name prefix
2021-09-23 15:29:52 +10:00
Peter Hutterer
207c5796b6 pulse: print the strerror on metadata errors 2021-09-23 15:29:48 +10:00
Wim Taymans
884ecab425 add SPA_EXPORT for public functions
Fixes #1638
2021-09-22 15:14:21 +02:00
Wim Taymans
3f032ae464 build: fix session manager path 2021-09-22 09:04:15 +02:00
Peter Hutterer
e46a30562f Promote media-session to its own subdirectory
media-session is past the point of being a mere example, let's promote
it out of the subdirectory.

pw-reserve is moved to tools/
2021-09-22 08:53:08 +02:00
Wim Taymans
6f519d4052 pulse-server: put the channel map in the loopback args
Fixes #1486
2021-09-21 18:33:29 +02:00
Wim Taymans
c8f629a0a3 pulse-server: improve module args compatibility
Boolean switches can also be true with 'y', 'yes', 't' and 'on'
2021-09-21 17:39:11 +02:00
Wim Taymans
d8aec1c7b4 pw-play: move dsdplay into pw-cat 2021-09-21 12:29:41 +02:00
Wim Taymans
0ec77ab09c dsd: show rate in bytes per seconds. 2021-09-21 12:25:42 +02:00
Wim Taymans
23edb9ab2a pipewire: release lock when clearing handle
The handle might want to unload plugins and we thus need to release the
lock.
2021-09-21 10:58:07 +02:00
Wim Taymans
275b8a0f9e dsdplay: make separate dsffile 2021-09-21 10:50:45 +02:00
Wim Taymans
fb0c5f503f media-session: DSD is also a valid passthrough format 2021-09-21 10:50:45 +02:00
Wim Taymans
ae9f90eccc dsdplay: implement data processing
Simplify channel layout management a little.
Use the bitorder and interleaving to read and format the DSD in the
buffer.
2021-09-21 10:50:45 +02:00
Wim Taymans
43b27002eb tools: add beginnings of DSD player 2021-09-21 10:50:44 +02:00
Wim Taymans
68f4dee2d9 pipewire: use lock for registry and init
Use a global lock to serialize concurrent pw_init calls.
Use a global lock to protect the global registry. With the alsa api,
multiple threads could open the device and create streams and
load/unload plugins.

See !942
2021-09-21 10:31:10 +02:00
Peter Hutterer
e8e7e72b76 meson: require alsa for pipewire-alsa or media-session
The previous code had alsa optional if pipewire-alsa was on
auto/disabled bug failed later with missing alsa if media-session was in
the session manager array. Which it is by default.

Fixes #1632
2021-09-21 08:59:30 +10:00
Ivan
1129e90c4f conf: Fix format inconsistencies and beautify configs 2021-09-20 16:40:40 +00:00
Wim Taymans
8efe54a176 media-session: fall back to EnumRoute for availability check
If the device doesn't have an active Route, also check the EnumRoute to
see if there is something available. If nothing is available, also avoid
selecting this node.

Fixes #1624
2021-09-20 18:34:52 +02:00
Wim Taymans
2ae6ac2bcb media-session: skip route availability check for default nodes
For default nodes, that are explicitly configured, skip the route check.
This makes it possible for the user to select a non-available node
as the default still.

Fixes #1624
2021-09-20 18:33:08 +02:00
Wim Taymans
49a0250ecd impl-metadata: avoid infinite loop in cleat_items
When we need to remove all items, copy the storage to a temporary
array and clear the storage.

When one of the callbacks would add a new item to the storage it would
operate on the new empty storage and the loop to iteratively clear
subjects would be able to complete.

Fixes #1622
2021-09-20 15:06:05 +02:00
Wim Taymans
afb37dd7fc pipewire: remove useless assignment 2021-09-20 15:05:37 +02:00
Peter Hutterer
335ad734de doc: fix example config for echo cancel
Fixes #1625
2021-09-20 15:56:13 +10:00
Pauli Virtanen
90b4efd98d bluez5: cleanup hfp/hsp backend handling + config file option
It seems not uncommon that people have not properly configured ofono
running, which results to loss of HFP/HSP functionality. It's less
surprising if the backend selection is fixed in the configuration file,
and (by default) does not depend on running services.

Add a configuration file option for selecting HFP/HSP backend, and set
the default value to the native backend. Emit warnings if conflicting
backend services are detected to be running.

Also cleanup hfp/hsp backend handling a bit, now that it's mostly
abstracted behind an interface.
2021-09-19 17:33:32 +00:00
Pauli Virtanen
cae1554449 bluez5: move bluez-hardware.conf loading to the plugin
It's not really the responsibility of the session manager to load the
bluez5 device quirks, and it's easier for eg. Wireplumber if it doesn't
need to do it.

Move loading bluez-hardware.conf to be the responsibility of the bluez5
spa plugin, similarly as the alsa plugin deals with the ACP database.

Put the configuration to share/spa-0.2/bluez5, mirroring the plugin
directory structure in lib/spa-0.2/bluez5.
2021-09-19 17:28:17 +00:00
Leonardo Neumann
6168067cb2
fix missing limits.h include 2021-09-18 04:36:20 -03:00
Pauli Virtanen
39c8ed4f62 media-session: don't use-after-free if linking node removed
Should fix an ASAN crash.
2021-09-16 19:20:53 +03:00
Wim Taymans
803763ed01 gst: add 30 seconds timeout
Add a timeout to all blocking wait operations so that we don't wait
forever but error out after 30 seconds.
2021-09-16 10:05:58 +02:00
Wim Taymans
a2202de679 gst: also stop waiting when we are flushing 2021-09-15 20:57:10 +02:00
Wim Taymans
077808b09a pipewiresrc: also notify waiters when start fails 2021-09-15 20:57:10 +02:00
Wim Taymans
97be5687ec remote-node: clear the node io areas when removing the memory
When the memory is removed, clear the node io areas so that it doesn't
accidentally get reused.

Fixes a crash in cheese when the node is stopped and then resumed.
2021-09-15 20:57:10 +02:00
Wim Taymans
21657ea2af remote-node: improve node io tag
Set the second tag field to INVALID to separate the node io areas from
the port io areas.
2021-09-15 20:57:10 +02:00
Peter Hutterer
14f0c6f9a6 modules: print the optional modules as part of the meson summary
This makes it easier to figure out if a particular module was missing
from the build. Example output:

  Optional Modules
    rt                        : YES
    rtkit                     : YES
    portal                    : YES
    pulse-tunnel              : YES
    zeroconf-discover         : YES
    roc-sink                  : NO
    roc-source                : NO
2021-09-15 11:24:09 +10:00
Wim Taymans
bf29130f84 midifile: debug some more message types 2021-09-14 15:39:35 +02:00
Wim Taymans
36fe2e9b9e context: scale quantum values to default rate
The quantum values are relative to the default clock rate. When an
alternative rate is selected, scale the quantum values accordingly.
2021-09-14 13:34:06 +02:00
Wim Taymans
7543ad0766 impl-node: add node.transport.sync property
When the node support transport sync. That is, when it will clear the
pending_sync flag from its activation area when it completed a new
seek.

Before this patch, the pending sync was always automatically cleared,
which broke some applications that are time masters such as bitwig.

Fixes #1589
2021-09-14 11:06:19 +02:00
Wim Taymans
47a46e198f improve debug 2021-09-14 11:06:19 +02:00
Wim Taymans
fda6e7b4af pulse-server: parse default.clock.rate from core info
Use the core.info clock rate as the default sample rate as soon as the
manager exposes the core object. Otherwise the default sample rate is 0
until someone calls GET_SERVER_INFO, which as a side effect sets the
default sample rate.

Fixes issues with sinks not appearing right away.

Fixes #1588
2021-09-13 10:50:01 +02:00
liberodark
d2017ff540 Fix multiple module dir 2021-09-11 14:29:48 +00:00
Davide Beatrici
fc9f7c1005 stream: declare pw_stream_get_control() in header
The function is defined and exported, but is not declared in the header.
2021-09-11 14:28:35 +00:00
Pauli Virtanen
966fbd5a21 bluez5: blocklist devices for sbc-xq 2021-09-10 17:57:21 +00:00
Wim Taymans
9faa006c1d media-session: try to not select nodes with unavailable route
Nodes that have the current route as unavailable should preferably not
be selected as defaults or targets.
2021-09-10 13:38:29 +02:00
Peter Hutterer
e1672f9762 pipewire: allow for log level names in PIPEWIRE_DEBUG
Allow one of "XEWIDT" to refer to none, errors, warnings, info, debug
and trace, respectively because they're immediately recognizable. Well,
except maybe the X.

PIPEWIRE_DEBUG="I" is equivalent to PIPEWIRE_DEBUG="3" for example.
2021-09-10 07:38:20 +00:00
Pauli Virtanen
3f8fb6e4dc media-session: don't bluez-autoswitch for suspended/idle/errored streams
E.g. skypeforlinux makes its input streams idle but does not destroy
them, when no call is active.
2021-09-10 07:35:12 +00:00
Pauli Virtanen
4f8ff41a45 media-session: don't crash if obj->info is missing 2021-09-10 07:35:12 +00:00
Wim Taymans
e6d7b1aa70 media-session: copy some device keys to the nodes
Chrome seems to want to use the device.bus
2021-09-09 18:05:20 +02:00
Wim Taymans
67be26aac7 media-session: only check passthrough when available
When none of the nodes have a valid passthrough format, don't check if
passthrough is possible.

Without the check, it is possible that a node has a common format with
the peer that is not a passthrough format, like a raw audio format.

Fixes #1587
2021-09-09 16:24:04 +02:00
Wim Taymans
e4b030fafa jack: add option to disable process lock
Some applications might expect the process function to run concurrently
with the callbacks. PipeWire tries to avoid this by using a lock for the
duration of the process callback. Make an option to disable this.

See #1576
2021-09-08 13:02:04 +02:00
Wim Taymans
2071a14c82 context: only apply lock-quantum for unsuspended nodes
When the node is suspended, don't take into account the lock-quantum
settings or else the graph would not want to change to the requested
quantum of the node.

Say we have a jack node with node.lock-quantum = true and
node.latency=256/48000. When it joins the graph and is suspended, the
lock-quantum is ignored and the node.latency is set on the graph.
After that, the lock-quantum ensures the graph quantum doesn't change
anymore until the node is suspended.
2021-09-08 11:53:08 +02:00
Wim Taymans
9423e8d648 impl-node: move quantum and rate
When we move a node from one driver to another, move the quantum and
rate if the target driver was idle so that we can mostly continue
uninterupted until a quantum/rate change is calculated.
2021-09-08 11:51:09 +02:00