Commit graph

1881 commits

Author SHA1 Message Date
Wim Taymans
7c6649b5e5 pulse-server: use quantum_limit
Don't use max_quantum as the upper quantum limit, this is now scaled
with the rate. Use quantum_limit instead. We don't really care about the
max_quantum anymore so get rid of the field.
2022-01-14 16:45:41 +01:00
Wim Taymans
6394537dbd pulse-server: remove unused field
And it's not quite useful to debug the value either.
2022-01-14 10:41:11 +01:00
Wim Taymans
661ff95748 pulser-server: use max_client settings instead of constant 2022-01-13 19:53:06 +01:00
Barnabás Pőcze
3d081215f2 pulse-server: improve message queue pruning
Firstly, separate the message dropping logic into
its own `drop_from_out_queue()` function.

Secondly, do not check earlier messages if the NEW
event for a particular object has been reached while
processing a REMOVE event for that object.

Thirdly, if - while processing a REMOVE event -
the corresponding NEW event is found and dropped,
drop the REMOVE event as well.

See #1840
2022-01-13 18:14:42 +00:00
Pauli Virtanen
11e57de7b0 pulse-server: index mask is now 24 bits
Update INDEX_MASK to match the new id allocation scheme.
2022-01-13 19:08:45 +02:00
Wim Taymans
3a49168f26 pulse-server: use the upper 8 bits of the id to mark things
The upper 8 bits of the object id is always 0 so we can use it to mark
our internal objects.
2022-01-13 14:54:16 +01:00
Wim Taymans
bae0d16e09 global: don't reuse ids 2022-01-13 14:53:18 +01:00
Barnabás Pőcze
60818886ed pipewire: module-protocol-simple: fix inet_ntop() call
Previously, the buffer argument was a pointer which did not
point to the address portion of an AF_INET address.

See #2017
2022-01-13 13:36:04 +01:00
Barnabás Pőcze
11db00abdf pipewire: module-protocol-simple: reduce name length
A client's name is its IP address or "client <fd>", neither
of which are longer than 127 characters.
2022-01-13 13:15:44 +01:00
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
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
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
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
13c0cbb899 pulse-server: remove unused defines 2022-01-04 10:08:54 +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
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
Barnabás Pőcze
4fbe3cbfc6 pulse-server: module: use SPA_FOR_EACH_ELEMENT()
Since `module_list` is a fixed-sized array, `SPA_FOR_EACH_ELEMENT()`
can be used. So use that. This way there is no need for explicit
indexing nor a sentinel at the end.
2021-12-28 19:53:27 +00:00