Commit graph

7464 commits

Author SHA1 Message Date
Wim Taymans b45d906dc4 support: increment methods version
Using the version of the .h files is always the latest.
2021-09-29 16:59:49 +02:00
Wim Taymans d6469e5437 filter-chain: make it possible to suggest a samplerate
Make it possible to let a plugin suggest a samplerate for the filter.
Make the convolver suggest the samplerate of the IR file anf use that
if nothing else is specified in the config.

Fixes #1659
2021-09-29 16:53:18 +02:00
Wim Taymans 275dfed92a filter-chain: handle unaligned sum_simd
Fall back to slow path if the input is not aligned, which can happen
after resampling.

Fixes #1659
2021-09-29 16:30:59 +02:00
Barnabás Pőcze d2f0573369 pipewire: module-zeroconf-discover: handle module destroy events
module-zeroconf-discover loads module-pulse-tunnel for each entity
exposed on the network. Previously, however, the destroy event
of the loaded pulse-tunnel modules were not handled.

This resulted in a use-after-free because both `pw_context_destroy()`
and `module-zeroconf-discover.c:impl_free()` tried to destroy
the pulse-tunnel modules. The reason for that is that since
1de16afc40 the modules
are prepended to the module list of the context, not appended,
therefore modules are destroyed in LIFO order, thus the pulse-tunnel
modules were destroyed before the zeroconf-discover module that
loaded them.

Fix that by handling the destroy event of the loaded pulse-tunnel
modules.

Fixes #1653
2021-09-29 10:35:16 +02:00
Wim Taymans 88d7ea3d88 spa-resample: add some verbose info messages 2021-09-29 10:16:25 +02:00
Peter Hutterer 4ea8fa8180 systemd: make pipewire-pulse require one of the session managers
Where pipewire and friends are started via socket activation,
a PA client connection to the pulse socket triggers
pipewire-pulse.service. That in turn triggers pipewire.service through
Wants/After and once that is started up, pipewire-pulse actually
starts up.

At the same time, pipewire-media-session or wireplumber are started
through WantedBy/after in the respective service files.

Depending on which leg the race condition got out of bed with today,
pipewire-pulse may be finished before the session manager has set up the
graph and the PA client doesn't see any devices.

Fix this by adding a dependency on the session manager in
pipewire-pulse, installed via an Alias so media-session and wireplumber
can install the same alias. Wants is a light dependency, so for the case
where it doesn't exist we fall back to the current behavior anyway.

This doesn't remove the race condition since systemd may deem the
session manager to have started before the graph is set up, but it
should reduce the occurances.

The disadvantage here: only one Alias will be installed by systemd, so
first-come, first-serve in the case of both media-session and
wireplumber being installed.

See #1553
2021-09-29 07:18:13 +00:00
Peter Hutterer 90cbcb6c05 systemd: add PipeWire to the systemd service file descriptions
Without this, a journal entry merely looks like this:
 Stopping Multimedia Service ...

Which is obviously terrible from a branding perspective but also makes
it harder for users to figure out what process was responsible for this
entry.
2021-09-29 07:17:35 +00:00
Peter Hutterer 7c28b0d7af meson: add a summary for the readline dependency 2021-09-29 13:21:08 +10:00
Wim Taymans 4d85e6aead resample: fix off-by-one
Don't use the previously skipped sample to calculate the remaining
amount of samples or else we remove one sample too much in some cases
and cause distortion, mostly when downsampling.

Fixes #1646
2021-09-28 15:31:07 +02:00
Peter Hutterer b3646743c1 spa: sprinkle more log topics into spa 2021-09-28 09:35:39 +02:00
Peter Hutterer e3b216c026 media-session: add log topics to all modules
Media-session itself uses ms.core, there are only two files that could
have a sub-topic but right now they don't use it (match-rules and
metadata).

The modules use the ms.mod.* namespace, so it's trivial to filter on
those.
2021-09-28 09:35:39 +02:00
Peter Hutterer 52a96bb602 modules: add log topics to module-protocol-pulse
This ends up using a nested namespace: mod.protocol-pulse for the module
itself, mod.protocol-pulse.foo for the various submodules and
extensions.
2021-09-28 09:35:39 +02:00
Peter Hutterer 96f8a7597e modules: switch protocol-native to the new logging system
This is more complicated than a normal module because we have two
logging topics: mod.protocol-native and conn.protocol-native for wire
messages. Because the latter use spa_debug (through spa_debug_pod) we
need to #define our way around so those too use the right topics.

Note that this removes the previous "connection" category, it is now
"conn.protocol-native" instead.
2021-09-28 09:35:39 +02:00
Peter Hutterer 14112fd168 modules: use the new topic-based logging from various pipewire modules 2021-09-28 09:35:39 +02:00
Peter Hutterer e9d869b46f spa: implement a log topic for alsa 2021-09-28 09:35:39 +02:00
Peter Hutterer a6e66d9180 pipewire: use the internal log topics 2021-09-28 09:35:38 +02:00
Peter Hutterer 52bd80aaa4 log: add topic loggers and a default topic
pw_log_log/logv now go through the topic-based logger using the
"default" topic. Log topics themselves can be allocated by the call
sites. The simplest way to use a topic from e.g. a module:

    PW_LOG_TOPIC_STATIC(mod_topic, "mod.foo");
    #define PW_LOG_TOPIC_DEFAULT mod_topic
    ...
    void pipewire__module_init() {
  	  PW_LOG_TOPIC_INIT(mod_topic);
  	  ...
    }

With the #define all pw_log_foo() are now routed through the custom
topic. For the cases where the log topic must be specified, a
pw_logt_foo() set of macros is available.

Log topics are enabled through the PIPEWIRE_DEBUG environment variable
which now supports globs, e.g. PIPEWIRE_DEBUG="*:I;mod.access:D"
to enable global INFO but DEBUG for the access module.

Namespaces documented are "pw", "mod" and "conn", for pipewire-internal
stuff, modules and connection dumping. The latter is special-cased to
avoid spamming the log files, it requires an expcit "conn.<glob>"
pattern to enable.

The "default" topic always exists and is the fallback for any
pw_log_foo() invocation that does not use a topic.
2021-09-28 09:35:38 +02:00
Peter Hutterer b58282353b pipewire: pass the PIPEWIRE_DEBUG config down to the logger
Convert the PIPEWIRE_DEBUG environment variable to the json format
specified by the log interface and pass it on.
2021-09-28 09:35:38 +02:00
Peter Hutterer 59a5791d41 spa: implement the new topic logging for the provided loggers
Both simple log implementation now support the new topic-based
functions, and so does the journal logger too.
2021-09-28 09:35:38 +02:00
Peter Hutterer 0e60e9c063 spa: add topic-based logging
Add a struct spa_log_topic that allows for logical grouping of messages.
The new macros spa_log_logt() and spa_log_logtv() take a topic as
argument, the topic's level acts as filter.
A new macro spa_log_topic_init() initializes a topic. By default a topic
inherits its logger's debug level but a logger implementation may set
that topic to a specific fixed log level.

The various spa_log_*() macros transparently wrap new and old
implementations:
- if the implementation is version 0, the new logt() calls drop the
  topic and get routed into the old log() calls
- if the implementation is version 1, the old log() calls use a NULL
  topic and get routed into the new logt() calls

All spa_log_* macros use the SPA_LOG_DEFAULT_TOPIC topic (NULL), it is
up to the caller to redefine that. Alternatively, use spa_logt_* to pass
an explicit topic.

There is one crucial flaw in this implementation: log topics are
initialized to their target level by the current logger. Where a topic
is initialized but the logger is switched later, the topic is not
automatically re-initialized. Ultimately this shouldn't matter for
real-world use-cases.
2021-09-28 09:35:38 +02:00
Peter Hutterer 26cfdc95cc pipewire: use the spa_log_logv macro instead of a direct interface call
This checks the log level of global_log.level again which is always the
same as the global pw_log_level.
2021-09-28 09:35:38 +02:00
Peter Hutterer 9eda834417 spa: use the spa_log_logv macro to chain the log calls
No need to use the interface call directly here, let's just use the
macro.
2021-09-28 09:35:38 +02:00
Peter Hutterer cbcf62f341 spa: add a macro to check for a callback version
spa_interface_call() and friends will quietly do nothing if the version
doesn't match so we need an extra macro to know whether we can
spa_interface_call() for any given version.

This allows us to implement things like:
   if (spa_interface_callback_version_min(1)
        spa_interface_call(..., 1, func_v1)
   else
        spa_interface_call(..., 0, func_v0)
2021-09-28 09:35:38 +02:00
Peter Hutterer 6bf1f9a694 spa: split the callback version check into a separate macro 2021-09-28 09:35:38 +02:00
Peter Hutterer 264141b31b media-session: add a doc blurb for the restore-stream module 2021-09-28 07:24:41 +00:00
Peter Hutterer 92c7c8354d pipewire: don't log the location if PIPEWIRE_LOG_LINE=false
Default remains enabled, but sometimes it's easier to not have this.
2021-09-28 07:24:23 +00:00
Peter Hutterer 9a6b929eb1 doc: document the two other log enviroment variables 2021-09-28 07:24:23 +00:00
Peter Hutterer bbe9059ed3 pipewire: re-use info dict for the journal logger
All the config options we pass in are standardised in spa/support/log.h, so the
journal logger should be (and it is) able to handle or ignore them.
2021-09-28 07:24:23 +00:00
Peter Hutterer ae59185f6f pw-cli: use readline() in interactive mode
With history and a simple command completion hook this makes the
interactive mode a lot easier to deal with.
2021-09-28 07:19:13 +00:00
Peter Hutterer 7d58ce9e24 pw-cli: add a 'quit' command to exit
Slightly less confusing for new users if we have at least one
help-listed command to exit.
2021-09-28 07:19:13 +00:00
George Kiagiadakis becd76de58 bluez5: sco-sink: Add follower mode 2021-09-27 17:31:16 +00:00
Jonas Holmberg 61a2577941 pipewire-alsa: fix a memory leak
Free node_name.
2021-09-27 11:05:34 +02:00
Pauli Virtanen dc7b88e1da bluez5: fix CVSD recording on Intel AX200
Intel 8087:0029 at Firmware revision 0.0 build 191 week 21 2021 on
kernel 5.13.19 produces CVSD data stream that consists of 96-byte data
packets interleaved with 96-byte zero packets.

This seems to not occur on other adapters, which usually produce only
48-byte data packets.
2021-09-26 17:58:06 +03:00
Pauli Virtanen 9e94aafaec bluez5: fix FastStream microphone support on some devices
Some devices require the source direction bit to be selected, in order
to send data.
2021-09-25 16:27:57 +00:00
Pauli Virtanen 65f881c222 bluez5: fix kernel version regexps
5.14.x kernels do support msbc-alt1, and should not be rejected.
2021-09-25 16:27:34 +00:00
Pauli Virtanen 0af3c85806 bluez5: don't probe native backend presence
Don't do a blocking probe of native backend presence, because it may
trigger DBus activation for Bluez.  If the DBus activation fails, it
ends up blocking until timeout.

ofono/hsphfpd usually don't have DBus activation configured, so they
fail instantly (which is why this problem was not encountered, even
though they do blocking calls on startup in previous pipewire versions
too).

Instead, select the backend once we have Bluez objects listed.
2021-09-25 16:24:10 +00:00
Peter Hutterer 40487e485d daemon: only call pw_log_set_level() if -v is actually given
Previous commit 69e935e unconditionally called pw_log_set_level() after
the option parsing. If pw_init() changed the logging level based on
PIPEWIRE_DEBUG, we'd now overwrite that change.

Call pw_log_set_level() only if -v is actually given on the commandline.
This means a commandline option will override PIPEWIRE_DEBUG if set but
that is intended.

Fixes 69e935e8a4
2021-09-25 07:21:01 +10:00
Peter Hutterer 69e935e8a4 daemon: allow for a -v, -vv, -vvv argument to increase verbosity
Sometimes that's faster than having to play with PIPEWIRE_DEBUG.
Same for pipewire-media-session.
2021-09-24 10:49:42 +00:00
Peter Hutterer 39fa2e503f man: fix an indentation issue in pipewire.1 2021-09-24 10:49:42 +00:00
Peter Hutterer 6668d5bbc4 test: fix the environment variable name to disable systemd logging
Fixes 165bc7e289
2021-09-24 12:33:15 +10:00
Peter Hutterer 49ebcfb093 spa: drop the pre-C99 checks from the log.h header
spa_log_logv was missing, so with this ifdef'd out we already fail to
compile:
spa/plugins/alsa/alsa-acp-device.c:1003: undefined reference to `spa_log_logv'

And it appears that the only requirement is __VA_ARGS__ support in the
compiler which we require in other places anyway.
2021-09-24 12:33:02 +10:00
Peter Hutterer 2b65fb36f2 test: simplify the logger test a bit
The tests using this function use the pw_log* macros which invoke
whichever logger pipewire has set. Since the default logging
implementation supports logging to a file anyway, let's just use that
instead of having to load the plugin ourselves.
2021-09-24 12:33:02 +10:00
Wim Taymans f1f5cbc0a6 support: return completion from process
HAVE_DATA|NEED_DATA signals that the graph can continue processing.
OK means that the node will continue asynchronously later. This
is needed to make the dummy driver work as a follower.
2021-09-23 16:36:32 +02:00
Wim Taymans 21616a25ad alsa: sync with pulseaudio
Fixes #1642
2021-09-23 15:02:08 +02:00
Yuri Chornoivan a118d2e625 po: Update Ukrainian translation 2021-09-23 11:21:48 +00:00
Wim Taymans cb474043fa pulse-tunnel: add pulse.latency option
Add a pulse.latency option to override the default 100ms latency.
2021-09-23 13:11:52 +02:00
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
Wim Taymans c41e3553bf 0.3.37 2021-09-23 10:17:19 +02:00
Wim Taymans d1484a6556 spa: fix layout defines
Fixes #1637
2021-09-23 09:58:36 +02:00
Peter Hutterer 165bc7e289 test: disable the journal logger for tests
No point spamming the journal here.
2021-09-23 15:40:47 +10:00