Commit graph

3747 commits

Author SHA1 Message Date
Wim Taymans
d8de4f3b9f Update docs a bit 2020-05-01 20:29:40 +02:00
Wim Taymans
5b9e82c4e8 pw-cat: add pw-midiplay and pw-midirecord aliases 2020-05-01 11:35:51 +02:00
Wim Taymans
f11cd32258 node: improve warnings
Make separate warnings for read failure and xrun
2020-05-01 11:24:14 +02:00
Wim Taymans
940ff7f53b client-node: improve error reporting
Separate read failure and missed wakeup in 2 messages.
2020-05-01 11:23:54 +02:00
Wim Taymans
e83bf8a33f log: use printf attribute for log fallback
Fixes #233
2020-05-01 11:18:28 +02:00
Wim Taymans
979a81a70d meson: add -Wformat
cc1: warning: ‘-Wformat-security’ ignored without ‘-Wformat’ [-Wformat-security]

Fixes #234
2020-05-01 11:05:38 +02:00
Wim Taymans
08543384f1 uninstalled: symlinks are not needed anymore 2020-05-01 11:05:08 +02:00
Wim Taymans
33398d7de8 0.3.4 2020-04-30 17:55:54 +02:00
Wim Taymans
3324a15fe3 protocol: use bool for Bool pod 2020-04-30 17:12:20 +02:00
Wim Taymans
c117ca0899 jack: fix unlock 2020-04-30 16:18:40 +02:00
Wim Taymans
420c186124 jack: also sync position area with data thread 2020-04-30 16:15:22 +02:00
Wim Taymans
0fd46d057e remote: free io area after we set the new area
First set the new area, then destroy the old one. Otherwise the
data thread might still be using the old area and crash.
2020-04-30 16:13:50 +02:00
Wim Taymans
dc331aa562 add more warnings and fix one 2020-04-30 16:07:23 +02:00
Wim Taymans
002bcae856 0.3.3 2020-04-30 13:46:39 +02:00
Wim Taymans
ac9f2a020f filter: make sure to sync the position with data thread 2020-04-30 13:46:39 +02:00
Wim Taymans
8141c92dde jack: free some objects 2020-04-30 13:11:01 +02:00
Wim Taymans
30d5a247e1 jack: improve locking
Protect the global metadata with a lock because we update this from
multiple clients. Avoid updating the metadata if it didn't change.

Add a simple lock to protect the session objects, they could be
accessed from the main thread or data thread. Use the simple lock
in methods that just read.

Use the new data loop invoke to make sure we sync the data update
with the data thread.

Stop the data loop when our position io is removed.
2020-04-30 12:57:56 +02:00
Wim Taymans
acd9991bfc remote-node: remove unused position area 2020-04-30 11:55:46 +02:00
Wim Taymans
cec26494f8 data-loop: add function to invoke
Add function that invokes the given function in the context of the
thread or the caller thread depending on if the thread is running.
2020-04-30 11:54:15 +02:00
Wim Taymans
5e99e7da49 alsa-monitor: remove timeout in destroy 2020-04-29 17:12:22 +02:00
Wim Taymans
0380c6d91e suspend-node: remove idle handler in destroy
Or else the idle handler might go off when we are already destroyed.
2020-04-29 16:41:41 +02:00
Wim Taymans
d8d4e2f335 jack: make dummy server and net libraries 2020-04-29 16:32:15 +02:00
Wim Taymans
9f810d1bbc add pw-jack and pw-pulse to set the library path
pw-pulse and pw-jack set the replacement library path correctly
so that pulse and jack apps run on top of PipeWire.
2020-04-29 13:28:08 +02:00
Wim Taymans
293386c21a install replacement libraries in modules directory
Don't use a special name for the replacement libraries but install
them into the modules directory by default. Add an option to install
them into another location.

This way, we don't need to set up symlinks in development, distros can
choose to install them where they want and/or we can use symlinks or
LD_LIBRARY path to select the replacement versions.
2020-04-29 11:24:24 +02:00
Wim Taymans
83b30dcd3d jack: always initialize the port buffer
Init the port buffer after we create it, not only after we get a buffer
on the port.
Cleanup a little.
2020-04-28 14:15:49 +02:00
Wim Taymans
856e1fe812 client-node: don't error in cleanup
It's possible the cleanup code might try to clean up ports we
already removed, don't show an error on that.
2020-04-28 13:56:23 +02:00
Wim Taymans
9c1ac4e850 pulse: implement cork now 2020-04-28 12:18:57 +02:00
Wim Taymans
69bc57864a link: improve state management
Only activate a link when both nodes are active
Don't try to prepare the link when already prepared.
Only unprepare the link when it was prepared
2020-04-28 12:17:33 +02:00
Wim Taymans
f5e4a6b225 link: track active state of nodes
Keep track of the node active state, when both are active, we can
prepare (negotiate) the link.

After a link has been prepared we can activate it. When we deactivate
the link, we don't need to prepare again.

When a port loses buffers or format, set the link back to the
unprepared state.

This fixes the case where:
 1) a node becomes inactive and goes to suspend, the link becomes
    unprepared
 2) the node becomes active again and need to be prepared again
2020-04-28 11:45:52 +02:00
Wim Taymans
68268a0116 context: improve states
Don't try to IDLE a suspended node.
Don't try to start an inactive node.
2020-04-28 11:42:45 +02:00
Wim Taymans
ea9a016797 context: reorganize graph recalc
Move quantum calculation after adding unassigned to fallback drivers
so that they also receive the required quantum.
2020-04-28 09:58:43 +02:00
Wim Taymans
2220d5b9b6 support: add dummy driver
Add a dummy driver node with high priority. All nodes not linked
to a device node will be linked to this when they require a driver.
2020-04-27 20:21:31 +02:00
Wim Taymans
730c85e5b0 metadata: fix order of type/value 2020-04-27 12:54:14 +02:00
Wim Taymans
90e1eb1b22 jack: add more metadata keys 2020-04-27 12:22:32 +02:00
Wim Taymans
93211549a4 log: add option to disable line numbers 2020-04-27 11:18:49 +02:00
Wim Taymans
b69bdc1eff context: improve graph states
Keep the first active node as the fallback node. We use this node
as the target when no oher active nodes exist.

Only assign the target node to active nodes.

When we assign an unassigned node, simply update the active followers
of the target, the state of the nodes and target itself will then
be taken care of later.

When registering nodes, only active nodes can influence the state of the
graph.

Update some comments
2020-04-27 11:16:14 +02:00
Wim Taymans
7f271ef982 system: don't use _GNU_SOURCE in public header
Use a forward declaration instead for itimerspec.

Fixes #230
2020-04-24 13:11:32 +02:00
Wim Taymans
03027153e2 system: define _GNU_SOURCE for itimerspec
Fixes #230
2020-04-24 12:54:08 +02:00
Wim Taymans
d024229166 node: improve debug 2020-04-24 11:51:42 +02:00
Wim Taymans
667c08ecc4 context: improve graph recalc
Add reason to why we recalculate the graph for debugging purposes
Only recalculate graph when something relevant changed.
Block recalc from being called recursively.
2020-04-24 11:27:00 +02:00
Wim Taymans
39c2d5b963 gst: remove internal queue
Remove the extra queue and use the queue from pw_stream.
Fix some locks and the bufferpool handling to make audio playback
work.
2020-04-23 15:56:12 +02:00
Wim Taymans
7b13ba202b node: also IDLE when not active
Inactive nodes can be set to IDLE
2020-04-23 13:22:38 +02:00
Wim Taymans
972b843851 node: don't suspend when already suspended 2020-04-23 13:10:02 +02:00
Wim Taymans
5d12929153 gst: use the pw_stream queue
There is no need to keep a separate queue in the source, simply use
the one from pw_stream.
2020-04-23 13:01:03 +02:00
Wim Taymans
26fa35a0e7 gst: always use the clock time
Also use the clock time when the stream is not yet started.
2020-04-23 12:38:05 +02:00
Wim Taymans
4cb2d58e89 factory: do more version checks
So that we don't accidentally load an old plugin.
2020-04-22 18:10:26 +02:00
Wim Taymans
539be881ba plugin: increment version and avoid inspecting old versions
There are incompatible version 0 plugins around (the compat ones)
that crash spa-inspect. Increment the version number to avoid this.
2020-04-22 17:52:54 +02:00
Wim Taymans
2c76ec5193 context: simplify state changes
Keep track of when a link is prepared, this is when the link has
successfully negotiated a format and buffers.

Only follow prepared links when collecting nodes in the graph.

Set the state of the driver and its nodes based on how many active
nodes the driver has. We don't have to do state changes on the nodes
from the link anymore then and we can get rid of the counters.

Only set the io on the mixer ports when prepared because we might
need a special mixer element based on the format.

Remove passive links for now.

This fixes many cases where the graph would stall when linking/unlinking
ports in various combinations.

Fixes #221
2020-04-22 17:09:42 +02:00
Wim Taymans
aafd1e7298 improve debug
Improve log so that debug level 3 gives a reasonably readable overview
of what is going on.
2020-04-22 12:47:18 +02:00
Wim Taymans
8ab67c5fa0 mem: implement remove_id
Rename (the non-exported symbol) _unref_id -> _remove_id and make it
remove the id from the map of known ids. This way, the server can send
the remove_mem and reuse the id for new memory before all references
are gone. Fixes "invalid mem id X, expected Y" errors.
2020-04-22 11:30:53 +02:00