Commit graph

5091 commits

Author SHA1 Message Date
Wim Taymans
776b52749f Use configured quantum_limit instead of hardcoded value
Parse the quantum_limit parameters and use this to scale the buffers so
that they can contain the maximum allowed samples instead of the
hardcoded 8192 value.

See #1931
2022-01-12 17:50:12 +01:00
Wim Taymans
4e5ab4bcbe context: pass quantum_limit when loading plugins 2022-01-12 17:47:58 +01:00
Wim Taymans
676bed734c context: scale max_quantum and add quantum_limit
Also scale the max_quantum with the selected rate. Add a new
quantum_limit property that is the upper limit of the quantum regardless
of the sample rate, this is usually the allocated buffer size.

See #1931
2022-01-12 17:44:45 +01:00
Wim Taymans
8e3eaf7952 raop: fix errno check 2022-01-12 10:11:00 +01:00
Wim Taymans
0ad318f61c channelmix: enable normalization by default
It is probably a better default to avoid clipping when downmixing.
2022-01-11 10:40:42 +01:00
Wim Taymans
982758ffed pulse-server: calculate missing bytes differently
Based on patch from Barnabás Pőcze <pobrn@protonmail.com>

Instead of trying to keep track of the missing bytes ourselves, use the
simple tlength - avail - requested formula to request more bytes from
the client.

Fixes #1981
2022-01-10 15:08:52 +01:00
Wim Taymans
163c365340 pulse-server: implement control arg for module-ladspa
See #1987
2022-01-07 16:40:36 +01:00
Wim Taymans
6d081d5214 filter-chain: also allow control params with index
Allow specifying the control parameter by index instead of name.
2022-01-07 16:37:45 +01:00
Wim Taymans
ce8af10cfe impl-node: set signal and awake time
When a non-driver emits the ready event, set the awake and signal time
so that pw-top reports times correctly.

See #1987
2022-01-07 16:36:29 +01:00
Wim Taymans
222ef88704 pulse-server: request more data when seeking backwards
Immediately ask for more data when we seek backwards so that we don't
underrun in the next process cycle.

See #1981
2022-01-07 10:59:41 +01:00
Wim Taymans
ab425d44b8 pulse-server: after uncork, ask for missing data
When we uncork, ask for any missing data immediately so that we don't
underrun in the next process cycle.

See #1981
2022-01-07 10:41:10 +01:00
Pauli Virtanen
9eddd0474f pulse-server: show monitor sources with device.class=monitor
Pulseaudio shows monitors with device.class=monitor, so we follow.
2022-01-06 20:32:53 +00:00
Wim Taymans
25e565c34c conf: fix compiler warning about different signedness 2022-01-06 13:19:34 +01:00
Timo Gurr
814d409501 systemd: Add systemd-system-unit-dir override 2022-01-06 12:17:10 +00:00
Doğukan Korkmaztürk
adb02119b7 conf: eliminate an unnecessary narrowing conversion 2022-01-05 06:26:43 -05:00
Wim Taymans
22625fb658 pulse-server: support server config
Extend the server.address property so that you can also specify
an object per server. Add support for configuring some aspects of the
server such as max-clients and backlog.

Most importantly, the pipewire client.access can be configured per
server.

See #1960
2022-01-04 14:30:33 +01:00
Wim Taymans
611591d0fc json: add spa_json_parse_stringn()
It also checks the destination size.
2022-01-04 12:37:00 +01:00
Wim Taymans
c46113faa3 json: spa_json_get_string() writes up to len chars or fail 2022-01-04 10:42:32 +01:00
Wim Taymans
68b31d37d9 json: check spa_json_get_string() return value correctly
It is only successful when > 0.
2022-01-04 10:15:35 +01:00
Wim Taymans
13c0cbb899 pulse-server: remove unused defines 2022-01-04 10:08:54 +01:00
Wim Taymans
2f4c589d5b pw-cat: also list additional targets in record mode
Also list the sink and output stream nodes because we can also record
from them.

Fixes #1952
2022-01-03 16:59:21 +01:00
Wim Taymans
67dc97fa43 alsa: add audio.allowed-rates param
Add a construct and runtime param to limit the amount of allowed
samplerates used by the node.

Fixes #1932
2022-01-03 16:03:23 +01:00
Wim Taymans
c3725d5dde module-loopback: align stream media names to filter-chain 2022-01-03 13:14:29 +01:00
Wim Taymans
9e207a2deb filter-chain: use node.name in media.name instead of id
The node name is likely more stable when specified, which is better
because media.name is used to restore volumes.
2022-01-03 13:12:29 +01:00
Wim Taymans
81f1a6c511 module-loopback: make unique media name per stream
If not otherwise set, the media.name will be the name used when
pw_stream_new(), which is the same for all loopback streams.
This makes the session manager restore the same volume for all
loopback streams.

Do something more clever and use the node.name + suffix to make
the name unique per stream if no media.name was given.

Fixes #1942
2022-01-03 13:00:15 +01:00
Wim Taymans
35cbe4e939 buffers: make alignment optional
Make the alignment parameter optional when negotiating buffers.
Default to a 16 bytes alignment and adjust for the max cpu
alignment.
Remove the useless align buffer parameter in plugins, we always
set it to 16 anyway.
2022-01-03 12:32:26 +01:00
Doğukan Korkmaztürk
3f87741b27 context: calculate target rate only when needed
Instead of calculating the target rate and overriding it in some
conditions, calculate it only if it is necessary. This change also
eliminates a set of conditional branches that have the same outcome,
which causes clang-tidy to produce a bugprone-branch-clone warning.
2022-01-01 10:00:03 -05:00
Petros Angelatos
5054b48c9d systemd: correctly prefix systemd system units
The definition of the `systemdsystemunitdir` variable uses `rootprefix`
instead of `prefix`:

https://github.com/systemd/systemd/blob/v250/src/core/systemd.pc.in#L23

Signed-off-by: Petros Angelatos <petrosagg@gmail.com>
2021-12-31 20:47:56 +01:00
Barnabás Pőcze
e35b9828d3 pulse-server: make GET_SERVER_INFO accessible without manager
For example, pulseaudio.js[1] immediately sends a
GET_SERVER_INFO request after AUTH, and only later
issues a SET_CLIENT_NAME.

See #1966.

[1]: https://github.com/janakj/pulseaudio.js
2021-12-31 02:12:03 +01:00
Barnabás Pőcze
1c3e45a584 pulse-server: add command access control
By default require that a client is authenticated and
has a manager to be allowed to run a command.

Specially:
 * AUTH requires nothing
 * SET_CLIENT_NAME and STAT only require authentication
2021-12-31 02:11:59 +01:00
Barnabás Pőcze
92abc7b7ad pulse-server: store whether the client has been authenticated
Add a new flag to the client struct which saves whether or not
the client has successfully authenticated itself.
2021-12-30 21:24:06 +01:00
Barnabás Pőcze
705ac662e3 pulse-server: use macro to generate command entries 2021-12-30 21:22:19 +01:00
Wim Taymans
2f742bb56c Revert "pulse-server: use partial data as missing/played for"
This reverts commit 08b18b9da4.

This was likely caused by a bug in mpv

Fixes #1956
2021-12-29 19:49:15 +01:00
Wim Taymans
8416d66ab3 filter-chain: improve lv2 support
Add support for Worker.
Add Options feature.
Pass support in plugin load.
2021-12-29 17:17:17 +01:00
Barnabás Pőcze
c04580a256 pulse-server: module-roc-{sink,source}: fix potential memory leaks
Two `pw_properties` objects are not freed in the error path.
Resolves Coverity issues: 1468665, 1468666, 1468667, 1468668.

Furthermore, the module argument string is also not freed.
2021-12-29 15:16:58 +01:00
Barnabás Pőcze
6d64454300 pulse-server: module-zeroconf-publish: harmonize log messages
Use lowercase letters consistently and report errors.
2021-12-28 23:56:03 +01:00
Barnabás Pőcze
7fb27098b9 pulse-server: module-zeroconf-publish: handle allocation failure 2021-12-28 23:37:53 +01:00
Barnabás Pőcze
417b2e2bf7 pulse-server: module-zeroconf-publish: remove empty line 2021-12-28 23:37:53 +01:00
Barnabás Pőcze
5421f2689e pulse-server: module-zeroconf-publish: cache service TXT records
Keep the TXT records for each service,
and reuse them when publishing, if possible.
2021-12-28 23:37:53 +01:00
Barnabás Pőcze
422d69b471 pulse-server: module-zeroconf-publish: handle disconnection
Keep track of the created services in two lists: published, pending.
Move services between the lists as the avahi client's state changes:
keep services in the pending list until the avahi daemon appears on dbus,
move them to the pending list if connection is lost,
and re-publish them after reconnection.
2021-12-28 23:35:22 +01:00
Barnabás Pőcze
987c7fc1e4 pulse-server: manager: add mechanism to query object data
Add `pw_manager_object_get_data()` which can fetch linked
data by its id. And use it in the zeroconf-publish module.
2021-12-28 21:23:21 +01:00
Barnabás Pőcze
fd111da507 pulse-server: module-zeroconf-publish: do not allocate service name dynamically
The service name cannot exceed AVAHI_LABEL_MAX-1 characters in length,
so store it in the service struct instead of dynamically allocating it.
2021-12-28 21:23:21 +01:00
Barnabás Pőcze
d240d7a5ef pulse-server: module-zeroconf-publish: use fixed object data id
Use a fixed object data id for storing the service of each
pw_manager_object instead of always generating the
service name and using that.
2021-12-28 21:23:21 +01:00
Barnabás Pőcze
9769dee5e7 pulse-server: module-zeroconf-publish: avoid double-free
When a module's `load()` fails, its `unload()` will unconditionally
be called. Freeing resource in `load()` while not marking those
resources freed (e.g. setting the pointers to NULL) will result
in double-free when the module's `unload()` method is called.
2021-12-28 21:23:20 +01:00
Barnabás Pőcze
9a9fce66e0 pulse-server: module-zeroconf-publish: remove unnecessary member
The `key` member in `struct service` is not used. Remove it.
2021-12-28 21:23:20 +01:00
Barnabás Pőcze
748fe111f9 pulse-server: module-zeroconf-publish: remove unnecessary NULL check 2021-12-28 21:23:20 +01:00
Barnabás Pőcze
1c74079994 pulse-server: module-zeroconf-publish: rename functions
Rename `get_service()` to `create_service()`,
and `get_service_data()` to `fill_service_data()`.
2021-12-28 21:23:20 +01:00
Barnabás Pőcze
ce687d6518 pulse-server: module-zeroconf-publish: do not query twice
Whether the object is a sink or source is already queried at the
beginning of the function, and is kept in local variables.
Use those instead of calling `pw_manager_object_is_{sink,source}()` again.
2021-12-28 21:23:20 +01:00
Barnabás Pőcze
7b0af5940e pulse-server: module-null-sink: do not use client's core
Do not use the client's connection to create the adapter object,
instead, create a new connection. This avoids the need for setting
object.linger=true, which guarantees that when the pulse server goes
down, the null sink is cleaned up.
2021-12-28 19:53:27 +00:00
Barnabás Pőcze
b08da23715 pulse-server: module: do not schedule unloading multiple times
While it is not a problem since `module_free()` calls
`pw_work_queue_cancel()`, it is completely unnecessary
to do it more than once.

Introduce a new flag on the module which stores whether or
not an unloading has been scheduled.
2021-12-28 19:53:27 +00:00