Commit graph

4826 commits

Author SHA1 Message Date
Wim Taymans 8759ceb551 pulse-server: handle monitor sources 2020-10-26 18:10:05 +01:00
Wim Taymans c49771150c pulse-server: fill in source-output/sink-input peers 2020-10-26 16:59:46 +01:00
Wim Taymans 11ee5ca54c pulse-server: fill in monitor names 2020-10-26 16:59:30 +01:00
Wim Taymans fd16eb450a pulse-server: fill linked sink/source in create_stream reply 2020-10-26 16:39:49 +01:00
Wim Taymans 1df7db5301 link: also add node id to link props 2020-10-26 16:39:28 +01:00
Wim Taymans a372e4e90e pulse-server: add more introspection
Add default nodes support and subscription events when it changes.
Fix stream id.
Fix node lookup.
Fix node volume.
2020-10-26 13:28:45 +01:00
Wim Taymans f75acc31d3 pulse: remove unused array 2020-10-26 13:28:01 +01:00
Wim Taymans fdf3485902 pulse-server: add sink/source sink_input/source_output introspect 2020-10-25 19:51:42 +01:00
Wim Taymans 02d04c63ea pulse-server: introspect cards 2020-10-25 16:24:11 +01:00
Wim Taymans 0ac839fce4 pulse-server: improve error reporting 2020-10-25 15:51:46 +01:00
Wim Taymans 1cbad89862 pulse-server: add introspection of clients and modules
Add manager object to collect object info
Wait for object info until completing client connect
Implement clients and modules list and info.
2020-10-25 15:28:42 +01:00
Wim Taymans 8ac9ce7947 pulse: avoid node lookup when connecting
We can use the node name directly if we strip the .monitor suffix
or remove the MONITOR flag form the name/id.
2020-10-24 16:58:01 +02:00
Wim Taymans ec860d64cf Revert "pulse: we can pass the device name directly in NODE_TARGET now"
This reverts commit fc6a729c57.

Pulse passes either the monitor id or the sink.monitor name, which
are not known to the session manager.
2020-10-24 16:27:31 +02:00
Wim Taymans fc6a729c57 pulse: we can pass the device name directly in NODE_TARGET now 2020-10-24 16:09:28 +02:00
Wim Taymans 3567efb7f8 alsa: allow setting playback/capture_node as node name
See !314
2020-10-24 15:53:48 +02:00
Wim Taymans 952326323e policy-node: also allow node name as NODE_TARGET 2020-10-24 15:50:09 +02:00
Wim Taymans 3255bc8eae context: use clock time as rttime when using our loop 2020-10-23 20:37:04 +02:00
Wim Taymans 520c2a0e16 context: only go to READY after registry is loaded
This way we can lookup the node name when connecting a stream.

See !314
2020-10-23 18:23:02 +02:00
Wim Taymans cced538901 context: don't leak formats 2020-10-23 18:20:50 +02:00
Wim Taymans 617afee62b pulse: return NULL format in error 2020-10-23 18:08:09 +02:00
Wim Taymans 732bf4b58c context: protect against bad context state
Avoid crash in firefox when daemon is stopped.
2020-10-23 17:10:19 +02:00
Wim Taymans 42e60b66f3 pulse: uncork stream when draining 2020-10-23 16:34:52 +02:00
Wim Taymans 67fb792d91 pulse: only call started in READY and when not corked 2020-10-23 16:34:33 +02:00
Wim Taymans aba02806cf mainloop: do better wallclock to rttime conversion
The mainloop time_new is supposed to be called with wallclock time
but some apps use rttime instead. Handle the case better so that we
never end up disabling the timer.
2020-10-23 16:33:05 +02:00
Wim Taymans a5656777e0 stream: Use the control parent type as container
Some controls (channelVolumes) list themselves as Float but are stored
in an array, as can be found from the type info. Use this info to
set channelVolumes with 1 channel.

fixes some assertions like pa_pod_is_array(pod)' failed at
../pipewire/spa/include/spa/pod/iter.h:334 spa_pod_get_array()
2020-10-23 15:29:51 +02:00
Wim Taymans c62b27ec75 pulse-server: handle under/overrun
Make sure we don't report underrun for the first time we pull data.
Send STARTED message when we leave the underrun state
Send UNDERFLOW when we enter the underrun state
Count underrun when corked.
Pass process stats back to the mainloop after process.
Decrease the pending length when we get underrun so that we can request
more data.
2020-10-23 12:59:53 +02:00
Wim Taymans 2a0828e7a2 pulse: emit sink/source changes when pending
After we get the Route update, schedule subscription events when
there are changes pending. When we scheduled a volume change ourselves,
it is likely that nothing got changed by the route update but
we still have to emit the subscription event to notify the new volume.

Fixes #298
2020-10-23 10:09:40 +02:00
Wim Taymans ec40702427 pulse: handle NULL timespec 2020-10-23 09:52:30 +02:00
Wim Taymans 1ceb902b76 pulse-server: convert between client cubic volume and linear 2020-10-23 09:36:01 +02:00
Jan Tojnar 2e3556fa12
pulse: Add libpulse path to rpath
We are linking against PulseAudio’s libpulse,
which adds its soname to DT_NEEDED but we are expecting
to actually use our shim with the same soname from LIBPULSE_PATH
(forced by adding the path to LD_LIBRARY_PATH).

Package managers like Nix will detect that we are linking against
PulseAudio’s libpulse and mark it as a runtime dependency by adding
its path to DT_RUNPATH entry so that it can be easily found
by the loader. LD_LIBRARY_PATH will take precedence but it will still
pull PulseAudio into the system’s closure.
2020-10-23 05:36:47 +02:00
Wim Taymans f3dda8e57b pulse: Use the right conversion functions for volumes
PulseAudio uses cubic volumes and PipeWire uses linear volumes
so use the right conversion functions from one to the other.
2020-10-22 19:34:47 +02:00
Wim Taymans 9c0ff170f9 pulse: add volume change example 2020-10-22 16:47:24 +02:00
Wim Taymans 413c233b9a mainloop: convert from wallclock to rtclock
This is needed for the mainloop timeouts
2020-10-22 16:46:29 +02:00
Wim Taymans 70e9e622eb jack: declare constants like jack does again 2020-10-22 15:23:56 +02:00
Jan Grulich 743cf58fb7 Define SPA_FALLTHROUGH to make fall-through annotations work for all compilers
This is needed for example for Clang compiler which uses different
annotations than GCC. It will make WebRTC to happily use PipeWire
since the spa library is header-only and WebRTC defaults to use
Clang with -Wimplicit-fallthrough.
2020-10-22 13:31:19 +02:00
Max Jöhnk 406b99c4c5 context: fix @DEFAULT_SOURCE@ wildcard 2020-10-22 11:23:17 +00:00
Wim Taymans 4450ddadcf pulse: mark the global changed when volume/mute changed
When we change the volume/mute of a sink/source, mark the source
as changed so that when we get the update from the server we
emit a CHANGE event. We don't do this otherwise because the server
volume update and our local volume is the same.

Fixes #298
2020-10-22 13:18:09 +02:00
Wim Taymans 55b4042512 context: support foreign mainloop_api
Detect if the mainloop_api is one of ours and use the loop directly in
that case. Otherwise, make a new loop and add the fd to the foreign
mainloop_api. Make sure we clean up as well.

Fixes #345
2020-10-22 12:26:27 +02:00
Wim Taymans 7782352e8d context: track changes more closely
Mark the global changes and only emit a change event when
something changed.
2020-10-22 11:03:27 +02:00
Wim Taymans 2dee35c216 context: improve debug 2020-10-22 11:02:57 +02:00
Wim Taymans 5e325f636c impl: use _ALL change_mask for everything
Instead of ~0
2020-10-22 10:59:04 +02:00
Wim Taymans 723ebcf438 protocol-native: only send properties when in change_mask
Only send the properties when the change mask includes them.
This reduces the message size.
2020-10-22 10:57:43 +02:00
Wim Taymans c1ea63fa7a alsa-pcm: try to recover in all cases
Even if we can't get the current status, still try to recover the
device.

See #347
2020-10-22 09:16:45 +02:00
Wim Taymans 398dc3055b context: improve profile parsing
First parse the profile into a strv so that we have a copy of the
profiles and it can't change when the original string (in properties
or environment) gets changed.

See #345
2020-10-21 18:09:34 +02:00
Wim Taymans 2193d03eab pulse-server: handle the case with record from monitor
Also handle the case where the client asks to record from the monitor
source directly.
2020-10-21 17:09:15 +02:00
Wim Taymans d55bc1eb86 keys: add PW_KEY_STREAM_CAPTURE_SINK
Add a property for capture stream to signal that they would like
to capture the output (monitor) of the default sink instead of the
default source.
Check the desired device we would like to capture from and handle
the capture from the sink by monitoring the monitor source.
2020-10-21 17:00:49 +02:00
Wim Taymans 37b39135e9 pulse-server: improve find device by name
Also find the device by name if the name contains a string of the
index.
2020-10-21 16:38:30 +02:00
Wim Taymans a2c70781a3 media-session: use rtkit for session manager data thread 2020-10-21 16:36:37 +02:00
Wim Taymans 25e4f2088c policy-node: also handle the single stream move 2020-10-21 15:39:37 +02:00
Wim Taymans bfac6f04db policy-node: avoid rescan when moving a node
When we are moving a node, the node becomes unlinked temporarily.
Make sure the rescan code doesn't try to link it to a node
meanwhile.

Fixes #344
2020-10-21 15:27:50 +02:00