diff --git a/INSTALL.md b/INSTALL.md index 1295213ee..673009de2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,6 +1,6 @@ ## Building -PipeWire uses a build tool called *Meson* as a basis for its build +PipeWire Media Session uses a build tool called *Meson* as a basis for its build process. It's a tool with some resemblance to Autotools and CMake. Meson again generates build files for a lower level build tool called *Ninja*, working in about the same level of abstraction as more familiar GNU Make @@ -17,7 +17,7 @@ $ meson setup builddir ``` For distribution-specific build dependencies, please check our -[CI pipeline](https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/.gitlab-ci.yml) +[CI pipeline](https://gitlab.freedesktop.org/pipewire/pipewire-media-session/-/blob/master/.gitlab-ci.yml) (search for `FDO_DISTRIBUTION_PACKAGES`). Note that some dependencies are optional and depend on options passed to meson. @@ -33,7 +33,7 @@ Define the installation prefix: $ meson configure builddir -Dprefix=/usr # Default: /usr/local ``` -PipeWire specific build options are listed in the "Project options" +PipeWire Media Session specific build options are listed in the "Project options" section. They are defined in `meson_options.txt`. Finally, invoke the build: @@ -47,29 +47,17 @@ which orchestrates multi-component builds. ## Running -If you want to run PipeWire without installing it on your system, there is a -script that you can run. This puts you in an environment in which PipeWire can -be run from the build directory, and ALSA, PulseAudio and JACK applications -will use the PipeWire emulation libraries automatically -in this environment. You can get into this environment with: +If you want to run PipeWire Media Session without installing it on your system, there is a +script that you can run. This puts you in an environment in which PipeWire Media Session can +be run from the build directory. You can get into this environment with: ``` -$ ./pw-uninstalled.sh -b builddir +$ ./media-session-uninstalled.sh +$ pipewire-media-session ``` -In most cases you would want to run the default pipewire daemon. Look -below for how to make this daemon start automatically using systemd. -If you want to run pipewire from the build directory, you can do this -by doing: - -``` -cd builddir/ -make run -``` - -This will use the default config file to configure and start the daemon. -The default config will also start pipewire-media-session, a default -example media session and pipewire-pulse, a PulseAudio compatible server. +This will use the default config file to configure and start PipeWire Media +Session. You can also enable more debugging with the PIPEWIRE_DEBUG environment variable like so: @@ -79,21 +67,16 @@ cd builddir/ PIPEWIRE_DEBUG="D" make run ``` -You might have to stop the pipewire service/socket that might have been +You might have to stop the pipewire-media-session service that might have been started already, with: ``` -systemctl --user stop pipewire.service \ - pipewire.socket \ - pipewire-media-session.service \ - pipewire-pulse.service \ - pipewire-pulse.socket +systemctl --user stop pipewire-media-session.service ``` ## Installing -PipeWire comes with quite a bit of libraries and tools, run -inside `builddir`: +Inside `builddir`, run: ``` sudo meson install @@ -102,118 +85,3 @@ sudo meson install to install everything onto the system into the specified prefix. Some additional steps will have to be performed to integrate with the distribution as shown below. - -### PipeWire daemon - -A correctly installed PipeWire system should have a pipewire -process, a pipewire-media-session (or alternative) and an (optional) -pipewire-pulse process running. PipeWire is usually started as a -systemd unit using socket activation or as a service. - -Configuration of the PipeWire daemon can be found in -/usr/share/pipewire/pipewire.conf. Please refer to the comments in the -config file for more information about the configuration options. - -The daemon is started with: -``` -systemctl --user start pipewire.service pipewire.socket -``` - -If you did not start the media-session in pipewire.conf, you will -also need to start it like this: -``` -systemctl --user start pipewire-media-session.service -``` -To make it start on system startup: -``` -systemctl --user enable pipewire-media-session.service -``` -you can write ```enable --now``` to start service immediately. - -### ALSA plugin - -The ALSA plugin is usually installed in: - -On Fedora: -``` -/usr/lib64/alsa-lib/libasound_module_pcm_pipewire.so -``` -On Ubuntu: -``` -/usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_pipewire.so -``` - -There is also a config file installed in: - -``` -/usr/share/alsa/alsa.conf.d/50-pipewire.conf -``` - -The plugin will be picked up by alsa when the following files -are in /etc/alsa/conf.d/ - -``` -/etc/alsa/conf.d/50-pipewire.conf -> /usr/share/alsa/alsa.conf.d/50-pipewire.conf -/etc/alsa/conf.d/99-pipewire-default.conf -``` - -With this setup, aplay -l should list a pipewire: device that can be used as -a regular alsa device for playback and record. - -### JACK emulation - -PipeWire reimplements the 3 libraries that JACK applications use to make -them run on top of PipeWire. - -These libraries are found here: - -``` -/usr/lib64/pipewire-0.3/jack/libjacknet.so -> libjacknet.so.0 -/usr/lib64/pipewire-0.3/jack/libjacknet.so.0 -> libjacknet.so.0.304.0 -/usr/lib64/pipewire-0.3/jack/libjacknet.so.0.304.0 -/usr/lib64/pipewire-0.3/jack/libjackserver.so -> libjackserver.so.0 -/usr/lib64/pipewire-0.3/jack/libjackserver.so.0 -> libjackserver.so.0.304.0 -/usr/lib64/pipewire-0.3/jack/libjackserver.so.0.304.0 -/usr/lib64/pipewire-0.3/jack/libjack.so -> libjack.so.0 -/usr/lib64/pipewire-0.3/jack/libjack.so.0 -> libjack.so.0.304.0 -/usr/lib64/pipewire-0.3/jack/libjack.so.0.304.0 - -``` - -The provided pw-jack script uses LD_LIBRARY_PATH to set the library -search path to these replacement libraries. This allows you to run -jack apps on both the real JACK server or on PipeWire with the script. - -It is also possible to completely replace the JACK libraries by adding -a file `pipewire-jack-x86_64.conf` to `/etc/ld.so.conf.d/` with -contents like: - -``` -/usr/lib64/pipewire-0.3/jack/ -``` - -Note that when JACK is replaced by PipeWire, the SPA JACK plugin (installed -in /usr/lib64/spa-0.2/jack/libspa-jack.so) is not useful anymore and -distributions should make them conflict. - - -### PulseAudio replacement - -PipeWire reimplements the PulseAudio server protocol as a small service -that runs on top of PipeWire. - -The binary is normally placed here: - -``` -/usr/bin/pipewire-pulse -``` - -The server can be started with provided systemd activation files or -from PipeWire itself. (See `/usr/share/pipewire/pipewire.conf`) - -``` -systemctl --user start pipewire-pulse.service pipewire-pulse.socket -``` - -You can also start additional PulseAudio servers listening on other -sockets with the -a option. See `pipewire-pulse -h` for more info. diff --git a/LICENSE b/LICENSE index f4c692d0c..f5179c5e9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,11 +1,2 @@ -All PipeWire source files are licensed under the MIT License. +All PipeWire Media Session source files are licensed under the MIT License. (see file COPYING for details) - -With the exception of: - - libspa-alsa.so in spa/plugins/alsa, which contains LGPL code from - Pulseaudio and is thus licensed as LGPL. - - libjackserver.so which links against the GPL2 jack/control.h, which - makes it GPL2 - diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 73e832433..000000000 --- a/Makefile.in +++ /dev/null @@ -1,74 +0,0 @@ -VERSION = @VERSION@ -TAG = @TAG@ -SOURCE_ROOT = @SOURCE_ROOT@ -BUILD_ROOT = @BUILD_ROOT@ - -all: - ninja -C $(BUILD_ROOT) - -install: - ninja -C $(BUILD_ROOT) install - -uninstall: - ninja -C $(BUILD_ROOT) uninstall - -clean: - ninja -C $(BUILD_ROOT) clean - -run: all - SPA_PLUGIN_DIR=$(BUILD_ROOT)/spa/plugins \ - PIPEWIRE_MODULE_DIR=$(BUILD_ROOT)/src/modules \ - PATH=$(BUILD_ROOT)/src/examples:$(PATH) \ - PIPEWIRE_CONFIG_DIR=$(BUILD_ROOT)/src/daemon \ - ACP_PATHS_DIR=$(SOURCE_ROOT)/spa/plugins/alsa/mixer/paths \ - ACP_PROFILES_DIR=$(SOURCE_ROOT)/spa/plugins/alsa/mixer/profile-sets \ - $(DBG) $(BUILD_ROOT)/src/daemon/pipewire-uninstalled - -run-pulse: all - SPA_PLUGIN_DIR=$(BUILD_ROOT)/spa/plugins \ - PIPEWIRE_MODULE_DIR=$(BUILD_ROOT)/src/modules \ - PIPEWIRE_CONFIG_DIR=$(BUILD_ROOT)/src/daemon \ - ACP_PATHS_DIR=$(SOURCE_ROOT)/spa/plugins/alsa/mixer/paths \ - ACP_PROFILES_DIR=$(SOURCE_ROOT)/spa/plugins/alsa/mixer/profile-sets \ - $(DBG) $(BUILD_ROOT)/src/daemon/pipewire-pulse - -gdb: - $(MAKE) run DBG=gdb - -valgrind: - $(MAKE) run DBG="DISABLE_RTKIT=1 valgrind --trace-children=yes" - -test: all - ninja -C $(BUILD_ROOT) test - -benchmark: all - ninja -C $(BUILD_ROOT) benchmark - -monitor: all - SPA_PLUGIN_DIR=$(BUILD_ROOT)/spa/plugins \ - PIPEWIRE_MODULE_DIR=$(BUILD_ROOT)/src/modules/ \ - $(BUILD_ROOT)/src/tools/pw-mon - -cli: all - SPA_PLUGIN_DIR=$(BUILD_ROOT)/spa/plugins \ - PIPEWIRE_MODULE_DIR=$(BUILD_ROOT)/src/modules/ \ - $(BUILD_ROOT)/src/tools/pw-cli - -shell: all - ninja -C $(BUILD_ROOT) pw-uninstalled - -dist: all - git archive --prefix=pipewire-$(VERSION)/ -o pipewire-$(VERSION).tar.gz $(TAG) - -rpm: dist - rpmbuild -ta pipewire-$(VERSION).tar.gz - -publish: all - git branch -D gh-pages 2>/dev/null || true && \ - git branch -D draft 2>/dev/null || true && \ - git checkout -b draft && \ - git add -f $(BUILD_ROOT)/doc/html && \ - git commit -anm "Deploy on gh-pages" && \ - git subtree split --prefix $(BUILD_ROOT)/doc/html -b gh-pages && \ - git push --force origin gh-pages:gh-pages && \ - git checkout work 2>/dev/null diff --git a/NEWS b/NEWS index 7c126bb0e..e69de29bb 100644 --- a/NEWS +++ b/NEWS @@ -1,2682 +0,0 @@ -# PipeWire 0.3.38 (2021-09-30) - -This is a quick bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - Topic based logging was added to improve debugging. - - An off-by-one error was fixed in the audio resampler that could - cause distortion when downsampling. - - Various bluetooth compatibility improvements. - - More fixes and improvements. - -## PipeWire - - module-pulse-tunnel now has better default latency to make it work - better in more cases. There is also an option to configure the - desired latency. - - pw-cli now has readline support. - - Topic based logging was added. Log lines can now be filtered by - topic using wildcards. This should improve debugging. - - The systemd service files should now have better descriptions. - - Fix a crash in module-zeroconf-discover when unloading. - - Fix a crash in filter-chain when using unaligned memory. - -## ALSA - - Sync the udev rules and profiles with pulseaudio. - - Fix a memory leak. - -## SPA plugins - - An off-by-one error was fixed in the resampler that could cause - distortion when downsampling. (#1646) - -## Bluetooth - - Avoid probing the native backend because it might block for DBus - activation. This fixes some long startup times. - - Fix the kernel version check, 5.14.x kernels should also support - mSBC. - - Fix FastStream microphone support in more cases. - - Add workaround for Intel AX200. - - SCO sink should now also work in follower mode. - -## PulseAudio server - - Make the service file require a session manager. - - -Older versions: - - -# PipeWire 0.3.37 (2021-09-23) - -This is a quick bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - Capture and playback is now avoided even more on unavailable - devices. This should fix some issues where an unusable microphone - was selected by default. It should now also again be possible - to select an unavailable device as the default. - - Native DSD audio playback is now supported. pw-cat can now also - play DSF files with the -d option. - - JACK stability improvements with buffer-size and samplerate - changes in some apps. - - Many cleanups and bugfixes all over the place. - -## PipeWire - - pw-metadata -d does not cause an infinite loop anymore. (#1622) - - Increase some plugin buffer sizes to fix some issues with many - channels. (#1620) - - Protect the global plugin list with a lock. Make sure pw_init() - is locked. Fixes some issues with concurrent ALSA plugin usage. - -## media-session - - Unavailable devices can be set as the default again. (#1624) - - Do a better check if a device has available routes and avoid - selecting devices with unavailable routes as default. - - Media-session was moved to its own directory. It used to live - in examples but it is past the example stage and it interferes - with the build options for the real examples. - -## Bluetooth - - The hardware quirk database is now loaded by the plugin instead of - the session manager. This makes it also work with wireplumber. - -## ALSA - - The ALSA mixer now handles device removal much better. (#1627) - -## libcamera - - Many fixes and improvement to the libcamera plugin. (#1513) - -## pulse-server - - Improve compatibility with pulseaudio module arguments. - - Parse channel_map arguments in module-loopback. (#1486) - -## JACK - - Delay emitting the samplerate and buffersize callbacks until the - client is active. This fixes some crashes with Carla and other - JACK apps. - -# PipeWire 0.3.36 (2021-09-16) - -This is a quick bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - A quick update with mostly only bugfixes and small improvements. - - Capture and playback is now avoided on unavailable devices. This - should fix some issues where an unusable microphone was selected - by default. - - MIDI output should not stop randomly now. - - The GStreamer elements are much improved, cheese should work - a lot better now. - - Virtual sinks and sources should now always show up immediately. - - JACK processing is now delayed until buffersize and samplerate - are emitted. This should improve stability of many JACK apps. - - JACK transport sync is now implemented correctly so that preroll - in bitwig works. - -## PipeWire - - The module dir environment variable can now contain multiple paths. - - Documentation now contains dot graphs of dependencies. (#1585) - - config min/max/default quantum values are now scaled with the - samplerate. - - A potential crash was fixed where destroyed memory was still used - by a node. This could cause crashes in cheese. - -## pipewire-media-session - - Only allow passthrough for passthrough formats (S/PDIF) for - now. (#1587) - - Improve bluetooth profile autoswitch. - - Don't try to route audio to nodes with unavailable routes. - -## ALSA - - Pass the right AES bits to the alsa device when opening an - S/PDIF stream. - - Fix a bug in the MIDI bridge port management logic. When a port - was added and immediately removed, output would stop. - -## GStreamer - - The GStreamer source now handles the flushing state correctly. - - All blocking operations now have a 30 seconds timeout, to avoid - infinite locks. - -## Plugins - - V4l2 Device formats and controls are now passed on the node, just - like with audio devices. - - audioconvert now also exposes the softMute property. - -## JACK - - Improve stability when changing buffer size and sample rate - dynamically by pausing the processing until the application has - handled the callback. - - Improve handling of timebase master. When the master was moved to - another driver, it did not attempt to become a new timebase - master on the new driver. (#1589) - - Implement transport sync to make preroll in bitwig work. (#1589) - -## pulse-server - - Fix an issue where virtual sinks/sources would not show up - immediately. (#1588) - - -# PipeWire 0.3.35 (2021-09-09) - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - S/PDIF passthrough over optical or HDMI is now implemented. - - Some critical fixes to MIDI, draining of streams and various - modules. - - skypeforlinux should work better now after adding it to the - quirks database. - - Bluetooth codecs are now in separate plugins to make it easier - to ship them. - -## PipeWire - - Drain was fixed in pw-stream. In some cases it would not clear - the drain state correctly. Fixes the issue where speaker-test would - only play one channel. - - Loopback connections to a driver will now activate the driver. This - fixes an issue where MIDI connections between devices or some - applications (puredata) would not get any MIDI messages. (#1559) - - The audiomixer can now mix more formats. Together with the passthrough - improvements this can be used to avoid conversions to/from the DSP - format in some cases. - - Make sure we idle drivers when removing a node from it in all cases. - JACK clients could keep a driver node busy. - - Add new methods to accumulate object info. The old one was difficult - to use when applications need to accumulate multiple changes. - - A new interface to load modules has been added. Plugins can use this - to ask the host (PipeWire) to load spa plugins. - - Increase param buffer size to handle larger params. Nodes with a large - number of channels would sometimes not have properties. (#1574) - - Concurrent link negotiation that caused some links to not work, - is now avoided. This fixes monitor ports in Ardour6. - - Small tweaks to how the quantum and rate are handled when nodes move - between drivers. Make node.lock-quantum work with node.latency - -## PipeWire modules - - The convolver plugin in filter-chain has been optimized some more. - - The echo-cancel stream properties were improved so that it actually - can remember the streams it links to. (#1557) - - module-pulse-tunnel had the buffer attributes wrong and would cause - high latency with older pulseaudio servers. (#1434) - - module-roc had the properties configured wrongly, which would cause - it to not work at all in most cases. (#1538) - - There is now an example of a 7.1 virtual surround sink using the - hesuvi impulse responses. - - The convolver now supports dirac pulses as the IR. - -## ALSA - - UCM config is now cached per device, using up less memory. It also - temporarily works around a problem in alsa-lib that is now being - patched and rolled out. Should stop devices from disappearing when - logging out and back in. (#1553) - - Fix the MIDI clock rate matching. It was too sensitive to small - changes and would spiral out of control and break MIDI rather - quickly. - -## pipewire-media-session - - The media session can now save and restore IEC958 (S/PDIF) codecs - for the sinks. - - Passthrough of IEC958 (S/PDIF) content is now possible. If the client - and the sink contain a compatible set of codecs, an exclusive - connection can be made between client and sink to pass the encoded - S/PDIF content directly to the device. - - Use new introspection info update methods to suspend nodes in all - cases. Sometimes, nodes would fail to suspend because the state info - was not evaluated. - - The media session can now work in non-DSP mode, which will try to - avoid any audio conversions between client and device when possible. - But, this will also disable compatibility with JACK applications. - -## Bluetooth - - Bluetooth codecs are now compiled into separate plugins which are - dynamically loaded. This makes it possible to change the plugin - implementation or ship plugins separately without having to recompile - the bluetooth module. - -## PulseAudio server - - Delay stream create reply until the stream is linked to a sink/source. - - The device-restore extension is now implemented. This makes it possible - to configure the IEC958 (S/PDIF) codecs supported by the sink with - pavucontrol. - - skypeforlinux now uses the same quirks as teams to make the sinks - show up in all cases. This fixes the issue of not being able to hear - the remote end in skypeforlinux. - -## JACK - - Improve catia and carla compatibility by caching objects a little longer - after being removed. (#1531) - - JACK ports now notify the negotiated format correctly. - - A potential deadlock was fixed when multiple threads would perform a - call that would require a roundtrip. - - Improve bufsize callback, it should not be called right after doing - activate() but only when the buffersize changes later. - - Add tweak to disable the process lock. Some older apps might not - expect it. (#1576) - -## Docs - - man pages are now generated with rst2man. - - DMA-BUF docs were updated. - - Documentation updates. - - -# PipeWire 0.3.34 (2021-08-26) - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - - -## Highlights - - Fixes some critical issues with previous release. Such as - devices not showing up and default devices being lost. - - Support for consumer driver streams to make the producer v-sync - to the consumer monitor in a headless compositor setup. - - Improvements to routing of streams. - - Bluetooth battery status support for head-set profile and - using Apple extensions. aptX-LL and FastStream codec support - was added. - - Internal latency of ALSA devices can now be configured. - - A fast convolver was added to the filter-chain to implement - virtual surround sinks or reverbs. - -## PipeWire - - Add support for streams that are driver nodes for the graph. - This was already possible for source streams but it is now - also possible for playback streams. This can be used to let - a producer v-sync to the consumer monitor in a headless - compositor setup. (#1484) - - State files are now stored in XDG_STATE_HOME instead of - XDG_CONFIG_HOME. They will still be loaded from the config home - if they are not in the new state home, to ease migration. - - Set a driver on inactive nodes to make transport work in xjadeo. - (#1491) - - Fix parsing of filter-chain controls. - - A new FFT based convolver was added to module-filter-chain. It - uses a 0-latency 2 stage convolver with small FFT for the head - and a large FFT for the tail of the convolution. A convolution - can be used to implement IR based reverbs, HRIR surround sound - or other convolution based operations. An example HRIR - virtual surround sound sink has been added as well. - - module-filter-chain was reworked a bit to support more config - options for the plugins. - - Endian conversion and alaw/ulaw formats are now supported for - streams. - - pw-cat will now suggest a samplerate for the graph. - - SPA_PLUGIN_DIR can now search in multiple paths separated with - a ':'. - - Passthrough mode has been worked on and has been partially - merged. S/PDIF definitions have been added and ALSA devices - updated to report and configure S/PDIF formats. The session - manager changes to fully configure and enable passthrough mode - will hopefully be merged next time. - - Fix a race in pw-stream where it would not always emit the - right events. - -## ALSA - - Fix volume changed check. It was checking against the wrong - value and this could cause rounding errors. - - The ALSA plugin now also uses RT scheduling. - - Fix the behringer UMC202 usb device id, it was using a generic - TI chip ID that caused problems. - - Fix USB devices that don't show up anymore. Use an ALSA - workaround to fix this. (#1478) - - Add a rule for the new firmware of Sennheiser GSX 1200. - - ALSA sink and source can now use ProcessLatency param to configure - the internal latency. The latencyOffsetNsec property is also - exposed so that the latency can be adjusted in pavucontrol as - well. - -## media-session - - Fix a critical issue where the default device was not remembered - anymore when it was removed. - - Fix the issue where some apps need to be restarted when nodes go - away and reappear. - - Improve routing of streams. Streams that have a specific target - set will now be moved to the target when it appears instead of - staying on the fallback. - - Small memory leak fixes. - - Try to switch back to the user selected profile after finishing a - Bluetooth recording. - -## Bluetooth - - Add support for HF indicator 2 battery status. - - Add support for XAPL battery status. - - Set the Communication intended role for HFP profile. - - Enable SBC-XQ by default if not disabled by quirks. - - Fix some potential crashes due to excessive polling. - - Add aptx-LL codec and enable duplex for aptx-LL devices. - - Add FastStream codec. This is a codec that can use a - duplex SBC channel. - -## PulseAudio server - - Suggests a samplerate for the graph. - - Support for handling S/PDIF (IEC958) formats was added. This will - start working when the session manager supports configuring streams - and nodes in passthrough mode. - - Be smarter when handling devices without a negotiated format - yet so that they are visible as well. This makes virtual - devices show up immediately. - -## ALSA plugin - - Now suggests a samplerate for the graph. - -## JACK - - The jack.pc file can only be generated with meson >= 0.59.0. When - the jack-devel option is enabled, it will generate an error with - older meson. - - Small stability improvements when connecting/disconnecting in - Ardour. - - -# PipeWire 0.3.33 (2021-08-05) - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - Better support for virtual sinks/sources for Pro Audio - profile. - - Better DMA-BUF format modifier negotiation. - - Support multiple sample rates in the graph. Not enabled - by default yet. - - Bluetooth can now automatically switch between headset - and audio profile. - - Documentation updates. - - Many improvements and crasher fixes. - -## PipeWire - - Make AUX channels an official channel map, use this for the - PRO audio profile so that we can name the channels. This - make it possible to define virtual sources and sinks for - Pro Audio devices in a more reliable way. - - Fix scheduling of some virtual sinks/sources. (#1407) - - Fix potential corruption of ringbuffer because of multiple - concurrent writers. This might be the cause for many reported - crashes. (#1451) - - Don't place sockets in $HOME. (#1443) - - Improve DMA-BUF negotiation. Add a flag to avoid fixation - of a property so that producers can negotiate more - efficiently. This is used to negotiate DMA-BUF modifiers, - which should make more efficient use of the GPU. (#1084) - - Add support for multiple sample rates. The graph can switch - when IDLE to one of the supported rates. Add an option to - lock the rate as well. This is not enabled by default yet - because of driver bugs that need to be worked around first. - - Add node.lock-quantum property that can be used to lock the - quantum in place. - - Improve latency reporting in the loopback module. - - Make new client-node method to send the peer port id to the - mixer. This can be used to know where the buffers entering the - mixer are coming from. (#1471) - -## Tools - - pw-top should now also correctly show bluetooth devices. (#1540) - -## media-session - - Handle unset of the default node. - - Added a module that can switch the bluetooth profile to headset - profile when a stream wants to record from it. - -## JACK - - Only call the jack callbacks when the client is active. Some - JACK applications don't expect callbacks before the client is - active and crash (x42-dpl). (#1461) - - Emit client unregister event. - - Add per-client match rules in the config file to set app - specific configuration and tweaks. (#1456) - - Use peer_id to implement jack_port_get_buffer() from one of - our peer ports to get the data before it enters the mixer. - Makes the capture monitors work in Ardour6.8. (#1471) - -## Bluetooth - - Add some broken kernel versions to the mSBC blocklist - - Avoid looping and consuming CPU when we can't write to the - BT socket. - - Use libfreeaptx instead of libopenaptx. - - Fix rounding errors in HW volume conversion. - -## PulseAudio server - - implement module-switch-on-connect to emulate pulseaudio - behaviour of new devices. Some desktop environments expect - this behaviour and break otherwise. - - Fix stream cleanup, make sure the stream is stopped before - destroying it. Might be cause for some of the reported - crashes. - - Update message API to use the JSON format. - -## Other - - Many documentation updates. - - Many cleanups and small improvements. - - Support the latest libcamera version. (#1435) - - -# PipeWire 0.3.32 (2021-07-20) - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - Real-time priority handling for threads was reworked. Freewheeling - will now drop RT priorities to avoid being killed. - - Problems with filter chains and echo-cancel being linked in a loop - was fixed. - - alsamixer should now be able to see the mixer controls again. - - JACK has seen some latency reporting improvements that make Ardour - report latencies correctly. - - Many bugfixes and improvements. - - -## PipeWire - - Fix a bug in the neon audio resampler code. - - There is now a node.link-group property to relate linked streams. - this can be used to track the dataflow with coupled streams. - - Fix a crash when recalculating latency on a destroyed port. (#1371) - - Filter chains and other modules that create streams can now also - be added to the daemon config itself. (#1309) - - Fix some potential deadlocks in timerfd. (#1377) - - Feedback links are skipped when recalculating latency to avoid - loops. - - The dummy driver and null-sink now stop the timerfd when following - another driver instead of generating useless graph wakeups. - - rt.limit was increased to 2 seconds. Some applications got killed - because they run lengthy code in the Real-Time thread. (#1344) - - Fix s24_32 to float, it was not sign extending properly. (#1393) - - The performance of the feedback loop check algorithm was improved - a lot, making complex graphs start much much faster. - - The zeroconf publish module now doesn't republish nodes every time - the volume changes. (#1406) - - A potential memory corruption error has been fixed in the loop - that could cause random crashes. - - Mempools can now be created from multiple threads at the same - time. - -## media-session - - Loops in coupled streams are now avoided. (#1394) - - Port changes for inactive profiles are ignored now by the - default-route module. (#1403) - -## ALSA - - Make sure that alibpref is not part of the device node name because - it is random. (#1362) - - Fixed an off-by-one that could cause midi events to end up with a - wrong timestamp and thus being discarded by some apps. (#1395) - - Fix some memory leaks when destroying a card object. - -## JACK - - Fix some invalid cycle wakeups that could cause JACK application to - run with a 0 buffer size. (#1386) - - JACK can now use rtkit to manage realtime priorities on threads. - - The Real-time priority is dropped when entering freewheel mode to - make sure we don't get killed when using too much CPU. - - jack_recompute_total_latencies() is now implemented, fixing the - latency reporting in Ardour. (#1388) - - Fix some overflows in time calculations. - - Ensure frame_rate in position is never 0. - - Graph callbacks are now emitted as well. - -## Bluetooth - - RTP payload type is now set correctly for aptX, LDAC and SBC, which - should improve compatibility with devices that care about this. - -## PulseAudio server - - There is now a quirks database to deal with bad clients. The database - is builtin but can be made external later. - - Teams is now lied to and told all sink/sources use s16 samples to make - it show all sinks/sources. - - Firefox is forced to remove the DONT_MOVE flag on capture streams so - that you can move firefox streams with other tools. - - The UNDERFLOW warnings are now made into info log messages to not - spam the log too much. Many application just let things underrun - and PulseAudio did not warn about this either. (#910) - -## ALSA plugin - - The alsa plugin now uses the right metadata for finding the default - source and sink, which makes the volume controls reappear. (#1384) - -## Other - - Cleanups in pulse-server and pipewire. - - Documentation additions. - -# PipeWire 0.3.31 (2021-06-28) - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - Fixes for alsa-lib 1.2.5 - - New pulseaudio modules: module-avahi-zeroconf, - module-pipe-source, module-roc-sink, module-roc-source. - - JACK has seen massive stability improvements. Locking - and correctness wrt to callbacks has been reworked. Also - thread priorities have improved. - - Handle various crashes and lockups when running out of file - descriptors. - - Bluetooth now uses a hardware database to disable - non-working features on listed devices. - - Scheduling quantum and rate can now be changed dynamically - with pw-metadata. - - Many bugfixes and improvements. - - -## PipeWire - - Improve cleanup of context in error cases. - - There is now a pw-test framework for improved unit tests. - - Improve property serialization to valid JSON. - - Fix some macros to work with better with coverity. - - Metadata permissions are checked now. Clients need the - M permission on an object to be able to set metadata for - it. - - The core metadata object will now remove metadata for - removed objects, the implementor does not need to worry - about that anymore. - - Audioadapter will now follow the rate of the graph with - the resampler adjusting itself dynamically. - - Core now has a metadata implementation helper. A context - will expose a metadata with settings that can be changed - at runtime. This can be used to change the loglevel or - graph quantum and samplerate on the fly. - - An infinite loop was fixed in the audio converter. - - Handle out-of-fds more gracefully. Handle truncated - control data by dropping the client connection. - - Fix profiler crash with many streams. - - Improve latency handling in pw-filter. There is now a - default handler and a ProcessLatency parameter to simplify - latency reporting. - - Latency reporting was improved in devices and streams. - - And example sink/source was added. - -## ALSA - - hardware mute and volume are now properties on the - Route param to make things easier. - - More fixes for alsa-ucm 1.2.5. - -## Tools - - spa-json-dump now properly encodes string and keys. - - pw-dump now shows the correct subject of the metadata. - - -## PulseAudio server - - Ensure the node.description is set, some applications - crash otherwise (TeamSpeak). - - Module loading and unloading was improved. - - module-avahi-zeroconf was implemented. - - module-pipe-source was implemented - - module-roc-sink and module-roc-source was implemented. - - The maximum amount of connections has been limited to 64, - like pulseaudio. - - Handle out-of-fds more gracefully. - - Fix overflow of read/write pointers. - - Source and sink state are now decoupled from the monitor - state and will report IDLE when not playing anything. - -## media-session - - Port switching should now happen to/from the port that - actually changed. - -## JACK - - The locking was reviewed. All callbacks are now emitted - from the PipeWire thread with the lock released and - the process function will be disabled for the duration - of the callback. This ensures that no two callbacks are - called at the same time. - - Improve internal consistency and try to never call callbacks - with invalid objects. - - Monitor port can now be accessed with system:monitor_%d - - client threads are now created with SCHED_FIFO and module-rt - is used to create the other RT threads. This should avoid - SIGKILL from RTKit in some cases. - -## Bluetooth - - Various bugfixes to improve connections to devices. - - Handle delayed UUID connection. - - There is now a hardware database that can disable features - in listed devices. - - Use libusb to detect availability of mSBC. - -## ALSA - - The virtual device name can now also contain a media role. - - -# PipeWire 0.3.30 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -This is a quick emergency release to fix some severe -problems with the previous release. - -## Highlights - - Recording from a monitor port should work again. - - JACK applications should now be more stable again. - - Freewheeling should not lock up anymore. - - Fix lockups in many pulseaudio apps. - - module-echo-cancel was implemented in pipewire-pulse - - Many other stability fixes. - -## PipeWire - - Improve module path logic. - - Improve logger formatting - -## PulseAudio server - - Make sure to pass 64 bits values for time on ARM 32 bits to - avoid protocol errors. - - Avoid a crash when unloading module-combine-sink. - - Avoid overflow in requested bytes, resulting in stalled - audio. - - Implement module-echo-cancel. - -## Bluetooth - - Handle latency parameters instead of failing. - -## JACK - - Fix locking in many places to avoid deadlocks and crashes. - - Fix port rename. - - Stop freewheeling correctly instead of deadlocking. - -# PipeWire 0.3.29 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - Latency reporting is now implemented. - - Many documentation updates and cleanups. - - module-combine-sink was added to PulseAudio server. - - Better handling of multichannel input profiles. - - Fix 100% volume issue when monitor suspends or profile - changes in some cases. - - Bugfixes and crashes - - -## PipeWire - - A new module-rt was added to acquire real-time scheduling - privileges without using RTKit. - - Documentation fixes and updates. Docs are now using a - custom theme. - - There is now a MANDATORY flag on properties that influence - how properties are filtered. - - Filter-chain now parses the LADSPA_PATH correctly when it - contains a colon separated list. - - Move `#pipewire` IRC channel to oftc.net. - - Fix an error where param changes were not emitted in all - cases. - - Implement Latency reporting. Latency values are propagated - through the graph so that each node knows the latency to - the output/input device. Synchronization in pw-stream has - been updated to use this. - - Some more upmix cases are added so that LFE, SIDE and REAR - can be generated from a mono channel as well. - - pw-stream and pw-filter will now emit the process event from - the real-time thread in a safe way, potentially avoiding some - of the harder to debug crashes. - - Fix potential stack overflow with serialize_dict. - - Add PIPEWIRE_NO_CONFIG to run without custom config files. - - The WebRTC echo canceler was added. Next versions will - integrate this better. - -## PulseAudio server - - module-combine-sink was implemented. - - Fix some segfaults when DBus connections fail. - - Support for listening on IPv6 was added. - - Fix a bug where many flushes could result in requests for too - much data from the client, causing sync, latency and garbled - sound problems after many seeks. - -## ALSA - - Also probe input paths for multichannel mappings. This makes - multichannel input ports show up in more cases. - - Fix headphones/front volume issue on some cards. - - Fix max volume issue when profile changes. - - Fix issue with UCM local config that was not available when the - device was opened in the server but the UCM was opened by the - session manager. Fixes alsa 1.2.5 compatibility. - -## JACK - - Implement latency reporting with the new Latency params. - -# PipeWire 0.3.28 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -## Highlights - - Freewheeling was implemented. This makes it possible to - export projects in ardour. - - A new powerful filter-chain module was added that can - be used to created all kinds of filter-chains from ladspa - and builtin plugins. - - Many more pulseaudio modules are now implemented: - module-ladspa-sink, module-ladspa-source, module-pipe-sink, - module-tunnel-sink, module-tunnel-source, - module-zeroconf-discover - - Fix a bug where devices would not appear after logout/login. - - Fix a bug where the volume was reset to 0 and devices would - have no audio. - - Config files are now installed in the data dir, system - overrides in /etc/pipewire and $HOME are checked first. - - -## PipeWire - - Implement freewheeling for JACK clients - - Add filter-chain module that can be used to construct - arbitrary graphs from ladspa and builtin plugins. - - Add new property to easily set algorithm params - - Add module-pulse-tunnel to tunnel audio to and from - a PulseAudio compatible server. - - Add a avahi zeroconf discover module, create pulse-tunnel - when PulseAudio devices are announced. - - Config files are now installed in the data dir, system - overrides in /etc/pipewire and $HOME are checked first. - - Applications now have their monitor ports named with the - "monitor" prefix to avoid confusion with the output ports. - - LICENSE clarifications. - -## GStreamer - - fixes to the pipewiresink plugin. - -## SPA plugins - - Fix a bug where the volume was reset to 0 - - Add events to dbus plugin. This can be used to detect dbus - disconnects. - -## Media-session - - Handle dbus disconnect. - - Handle device reservation errors. - -## PulseAudio server - - Implement module-ladspa-sink and a new PipeWire-only - module-ladspa-source - - Implement module-pipe-sink - - Implement module-tunnel-sink and module-tunnel-source - - Fix a bug with module argument parsing - - Implement module-zeroconf-discover - -## ALSA plugin - - improve error handling - -PipeWire 0.3.27 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Fix bug that caused bluetooth devices to stop working. - - Fix session-manager crash when switching users caused by - the DBus plugin cleanup errors. - - Improve volume handling of monitor ports. - - Fix GStreamer v4l2 support. - - Implement module-remap-sink and module-remap-source in - pipewire-pulse. - - More fixes and improvements. - - -- PipeWire - - Move the loopback code into a module. Use this in pw-loopback - and pipewire-pulse. Fix some cleanup crashes. - - A dummy echo-cancel module was added. Later versions will - include the webrtc echo-canceler. - - State files don't have the X permission anymore. - - Move i18n core into a private header file. - - Stream can now advertise properties and receive property - updates. - - Fix an issue where the wrong index was used to address a port. - It caused Bluetooth devices to stop working. - -- SPA plugins - - Only do LFE filtering on channels we created. - - Improve name and description of devices. - - Improve cleanup in DBus connections and sources to avoid crash - when destroying. - - Improved volume handling. Hardware, Software and Monitor - volumes are now properly separated and handled. - - Support for S8 and S8P formats was added. - -- Tools - - pw-cli can now also create Struct from JSON arrays. - -- Session-manager - - The session manager can now also create passive links. This - makes is possible to suspend effect chains together with the - sinks when not in use. - - Match rules now check the complete property value instead of - only the start. - - Handle multiple pending param enumerations, take only last - result. This fixes some volume update issues. - -- GStreamer plugins - - GStreamer plugins now advertise handling DMABUF explicitly. This - is currently the only way to avoid a memcpy for v4l2 devices. - -- Device support - - sync ACP with pulseaudio, merge upstream patch instead of our - hack to workaround missing duplex devices. - - V4l2 devices don't expose their fd anymore. Previously the fd - and mmap offsets were passed to the client to access the buffer - memory but that could create security issues. - -- Bluetooth - - Don't unregister the profiles on shutdown because this can cause - delay, just close the dbus connection. - - Bluetooth devices now try to use the global samplerate from the - graph. - -- PulseAudio server - - Implement remap-sink and remap-source modules using the - new loopback module. - -PipeWire 0.3.26 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - I18n support, with translations merged from PulseAudio. - - New pw-link tool. - - Many Bluetooth improvements, support for hardware volumes. - - Support for 64 channel devices. - - Stability fixes and improvements. - - -- PipeWire improvements - - The link factory can now also make links between nodes and - ports by name so that it can be used in scripts. - - Add module-protocol-simple that can stream raw audio on a - socket. - - Added i18n support. Merge PulseAudio translations for the ACP - library so that we don't cause regressions. - - Support more than 19 channels in the channel mixer. - This makes all channels usable on 32 and 64 channel cards. - - Detect if we're running in a VM and allow for tweaking some - settings such as the max-quantum to make things work better in - VMs. - - Fix a potential crash when connecting a client and updating - permissions. - - Fix a potential crash when trying to link incompatible ports. - - Lingering links in error will now be destroyed automatically. - -- Tools - - Added new pw-link tool to list and monitor ports and to - list, monitor, create and destroy links between them. - - pw-cli can now also list params by name. - - pw-dump now outputs Spa:String:JSON types in metadata as properly - parsed and formatted JSON so that tools can parse the - metadata values using a JSON parser. - -- Session-manager - - Add logind support. The bluetooth monitor can only be started - for one user at the time, so use logind detect active seats. - - ALSA icon names were improved to match what PulseAudio does. - - Improve the bluetooth icon name. Also use the device alias - as the device description, like PulseAudio. - -- Device support - - When devices become inaccessible, they are now removed from - the PipeWire graph. - - Fix datatype selection for buffers in v4l2 and libcamera. - -- Bluetooth - - Various memory leaks and crashes are fixed. - - Added support for AVRCP hardware volume. - - Added support for HSP/HFP hardware volume. - -- PulseAudio server - - Fix module-loopback connections to monitor ports. - - Implement module-native-protocol-tcp. - - Handle nodes and streams with > 32 channels. The PulseAudio - API only supports up to 32 channels so only make those 32 - first channels available with the PA API. - - Implement module-simple-protocol-tcp. - - Improve events emitted by the server. - - Improvements to channels and channel_map properties on - modules. one can imply the other and they should match when - both given. - - null-sink will now have their volume work correctly by - default. - -- JACK - - JACK development files can now optionally be installed. - -PipeWire 0.3.25 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Many stability improvements. - - Plug fd leak in flatpak detection - - add pw-loopback tool and support module-loopback - - volume restore for virtual sinks/sources or other sink/sources - without hardware volume. - - Fix cracks and pops in audio capture. - - Many bluetooth improvements and compatibility fixes. - - -- PipeWire improvements - - Hex encode invalid SEC_LABEL properties to avoid generating - invalid json. - - Small fixes to how nodes are started to avoid crashes. - - Make sure ports are only scheduled after being fully - negotiated to avoid crashes. - - Implement coverity into CI, fix some bugs detected by - coverity. - - Plug leak in flatpak detection. - - Fix crash when removing globals in some cases. - - Fix crash because the mixer info was not removed from a - port in all cases. - - Add PIPEWIRE_AUTOCONNECT environment variable to disable - stream autoconnect. Also add a config option to disable - autoconnect. - - Improve wildcard in format helpers. - - Add env variable to disable journald logging. - -- Tools - - Add a new pw-loopback tool to loop a capture device to a - playback device. - - Display localized strings correctly in pw-top - - Add some more options to pw-dot - -- Session-manager - - When a new node is configured and some stream have this - as the default target, move them to it. - - Fix some crashes. - - Implement volume restore on nodes without routes. This makes - it possible to restore volume on purely software nodes like - null-sinks. - - Also try to suspend errored nodes so that they may leave the - error state and be reused again. - - Break endless link loops when something went wrong. - -- Device support - - Fix monitor volumes, they are now separate from the hardware - volume. - - Fix cracks and pops in alsa capture caused by mismatch between - resampler and capture source. - - Add start-delay config option to alsa sink. - - Ensure the PipeWire midi ports start from a higher number so - that the lower port numbers are available to apps as before. - -- Bluetooth - - source devices are now removed when idle - - Support using pipewire as Audio Gateway. - - LDAC encoding quality can be configured now - - Implement codec switching for HFP - - Implement codec switching with new device property. - - Improved stability and compatibility - - Autoconnect device profiles at startup - - Add AAC bitrate mode configuration - - Make it possible to use an A2DP source as an input device. You - can then use your phone as an A2DP microphone, for example. - - Remove battery reporting when RFCOMM connections is closed. - -- PulseAudio server - - Add some workarounds for Blueman - - Set correct errno values, fixes a hang in load-module of a - non-existing module - - Try to not send inconsistent information to clients. - - Fix some crashes. - - Add support for the new send-message API, use this to - switch bluetooth codecs. - - Fix draining by making sure we are started. - - Handle 0 sink and source as the default sink/source. - - Implement module-loopback - -- JACK - - Fix some memory leaks when closing a client - - Add self-connect config option to limit where clients - can connect themselves. - - Don't crash when apps call _port_get_buffer() on a - port that is not their own but simply return NULL. - This fixes a crash in Ardour6. - - Improve client added/removed callbacks. Sometimes it would - emit a client remove when there were still ports for the - client. - - make sure midi port names are stable across reboots. - -PipeWire 0.3.24 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Many JACK midi improvements and device support. - - Fixes in gnome-control-center default sink/source handling. - - Many small performance improvements in alsa device handling - and latency. There should also be less cracks/pops and xruns - now. - - Fixes for gnome-control-center default sink/source handling. - - More bluetooth compatibility improvements. - - -- PipeWire improvements - - Implement simple upmixing. - - Disable the resampler when not used. This improves latency - and CPU usage. - - Handle max-quantum on devices and try to not make the quantum - larger than the device buffer size. - - Improvements to how nodes and links are activated. It should - now result in less xruns and cracks/pops. - - meson uses the feature options everywhere now. - - Handle volume remap in the channelmixer. This fixes the channels - on multichannel devices. - - Try to escape invalid JSON string characters. - - Keep better track of changed parameters in audioconvert. - - Improve config files, make arrays where needed. - - Respect NO_COLOR where possible - - Support in-place config file parsing to avoid allocations and - improve startup performance. - - There is now a config option to enable non-power-of-two quantums. - - Preliminary support for upmixing and generating LFE channels. - -- Session-manager - - Default nodes are not stored as JSON in the metadata. This - is more readable and introspectable. - - More default-nodes and default-routes improvements. Port - switching should work better now. - - Wait until all devices are scanned before linking clients. - - Fixes some crashes. - - Sinks (monitors) can now be set as default sources. - -- Device support - - Fix startup timers for alsa devices. - - Improve timers in alsa when quantum changes. It should cause - less xruns and cracks. - - Fix UCM setup of capture devices. - - Only disable IRQ in alsa when not batch. For batch devices the - hw pointers are updated each IRQ so we need to keep them enabled. - This massively improves latency on USB batch devices to the same - level as JACK (with small enough period size). - -- Bluetooth - - Improvements to profile switches. - - Improvements to volume handling. - - Fixes for A2DP sources - - Add support for battery status when available. - - Many other small improvements. - -- PulseAudio server - - Handle NULL in set_default_sink/source to clear the default. - - Implement a workaround for gnome-control-center when setting - the default sink/source. It also sets the target in - stream-restore to the new default. This fixes moving streams - in gnome-control-center. - - Fix some races by replying to some requests after the operation - completed. - - Prefer formats of the extended format API. - - Create a pid file on startup to improve compatibility with apps - that look for it. - - Capture streams can now be moved to monitors with pavucontrol. - - Fixes for crashes. - -- JACK - - jack clients can now connect to the 'default' server. - - Move midi ports back to the midi client. - - Only mark midi hardware ports as terminal/physical. - - Use the same midi names as a2jmidid. - - match system ports in get_ports. - - Improve compatibility with some apps that require a - fixed latency. - - Beginnings of the libjackserver implementation. - - -PipeWire 0.3.23 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Fixes for some critical bugs in last release. - - Fix bug where audio was not drained properly at the end of - playback, causing repeating sound. - - Profile and route switching was improved and should mimic - more what pulseaudio did. - - Various fixes for xruns in capture and playback. - - Bluetooth now supports delay adjustment and various other - improvements. - - The pulseaudio server now correctly identifies AC3 and DTS - streams and returns a not supported error instead of playing - static. - - Multichannel support was improved in the alsa plugin and - the channel mixer. Channels should now play on the right - speakers in all cases. - -- PipeWire improvements - - Small fixes and improvements in JSON parsing and encoding. - - Improvements to param handling in audioconverter. It would - previously not always notify of changes. - - Avoid updating some properties that we use internally such - as the object id and the node.id. - - log.level in the config files is now actually used. - - the PIPEWIRE_LATENCY env variable should always override - any application settings in filter/stream/jack. - - The config file can now contain filer and stream properties - to, for example, control the resampler, mixer and latency. - - Add sandboxing to the systemd services - - Various FreeBSD fixes. - - Improve draining and a way to exit the drain state as well. - - Many multichannel fixes. Channel remapping should now be - correct. - - Fix bug with repeating audio at the end of playback because - the drain in the resampler was not draining all channels. - - RTKit default rt.prio has been increased to 88. This will - likely still be clamped to 20 until distros increase the - max priority. - -- Session-manager - - Don't try to switch to Pro Audio profile, this should be - a user choice only. - - Don't crash when metadata was disabled such as when not - using the audio features of pipewire. - - Rework the profile and route handling. - - Add systemd unit files for the media-session - - Device names should now also have sane names so that tab - pactl completion works on them. - -- Device support - - Fix ALSA format enumeration in more cases. Use the channels - and rate as a filter. - - Make sure the graph doesn't ever use buffers larger than - the alsa device buffer size or we get xruns. - - Tuning of the alsa device timeout handling and dynamic - resampler. There should now not be any xruns when streams - appear and disappear or when the quantum changes. - - Fix bug in alsa device when reassigning to a new driver, - in some cases the dynamic resampler was not activated and - things would drift out of sync and fail. - - Fixes in quantum changes for ALSA capture and how the - resampler is drained and fed with the new samples. - -- Bluetooth - - Delay adjustment has been implemented now. Bluetooth - devices should now be more synchronized with video due - to proper delay reporting. Because BT delays can be - large, it can cause hickups in some players. - - Fix volume in bluetooth devices. - - Codec switch improvements. - -- PulseAudio server - - Latency offset adjustment is now implemented and functional - for bluetooth devices. It is not working for alsa devices - yet. - - Handle unsupported formats. Previously we would accept encoded - formats and play noise. This fixes AC3 playback in vlc. - - Move some of the configurable parameters to the config file. - - Fix a fatal use after free when playing samples - - Improve module handling. loaded modules now show up in the - list of modules and can be unloaded. This also prepares the - core for more module implementations later. - -- ALSA plugin - - Fix drain with very large buffers, we need to manually start - the stream before draining. - - Fix the channel layout handling. - - Improve compatibility with apps that expect the poll to only - return when there is activity. - - Fix drain for capture - -- JACK - - Add a config option to shorten and filter client names - - Increase the length of the client name size and make sure - we don't exceed the allocated size. - - We now include our own jack header files so we can build - without depending on another jack-devel package. We don't - yet install the headers or provide pkgconfig files. - - -PipeWire 0.3.22 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Per client config files replace the module-profiles. It's - now possible to tweak settings and load custom modules. - - Pro Audio card profile support. You can now select the - Pro Audio profile and have raw device access with the - maximum number of channels and no mixer controls. This is - the usual setup for managing high end Pro Audio cards. - - Many fixes and improvements in the JACK library to make - devices look and integrate better. - - Many bluetooth improvements. Playback should be more - reliable and better synchronized. Support for the HFP HF - profile. - - Small fixes and improvements all over the map. - -- PipeWire improvements - - Add support for restrictions requested by a client. This - makes it possible to implement Flatpak policy for emulated - PulseAudio clients as well. - - Fix removal of params in objects. Previously they would not - be removed from the cache. - - Remove mlock warnings by default. There is an option to enable - them again if you want to check if your system is optimized. - - Remove LimitMEMLOCK lines from the service files. They can - only lower the system settings and are thus not useful. - - Implement per-client config files. Each pipewire client will - now read a config file that you can use to configure the - context of the client. - - Implement state and config load/save in pipewire. This is used - by the session manager or other apps. - - Make an option to disable dbus support. - - Add tool to convert pipewire config to JSON. - -- Session-manager - - Give all permissions to Manager flatpak apps. In the future - we will use the Permission store to remember user settings. - - Improvements to default audio/sink handling. - - Add option to configure device suspend time. - - Small fixes in route handling. - -- Device support - - Complain when ACP profile files are not found and use - a fallback in order to get something working. - - Add volume support to monitor ports. - - Fix resume from suspend for ALSA in more cases. - - ALSA ACP cards now have a Pro Audio profile that exposes - the raw card devices. - -- Bluetooth - - Enable A2DP delay reporting. This improves audio/video sync - when playing audio over bluetooth. - - Fix stuttering in A2DP source - - Tweak buffer size and latency settings to avoid stuttering - - More work on HSP and HFP support - - Fix initial profile configuration - - Add HFP HF support - -- PulseAudio server - - Small tweaks in capture packet size to avoid crashes in some - apps. - - Detect Flatpak apps and requests the flatpak permissions from - the session manager. This means that Flatpak pulseaudio apps - will now run with reduced permissions. - -- ALSA plugin - - Reduce min buffer size in the plugin for lower possible - latency. - -- JACK - - implement some missing methods to make qjackctl work again. - - Use the context data thread instead of making our own. This - fixes the issue where the data thread was not given RT - priority correctly. - - Pass extra jack flags around in port properties. This makes - CV ports in carla work. - - Many tweaks to the port names and aliases. Unwanted characters - are filtered out, giving better names to jack apps. Default - device names are now equal to those seen in pulseaudio apps. - - Add an option to make a separate client for the monitor ports - of a device. This makes it more usable in apps. - - add support for system:playback_N and system:capture_N port - names for apps that hardcode these port names. - - -PipeWire 0.3.21 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Many PulseAudio compatibility fixes. Handling of corked - streams, the prebuf setting, seek modes and stream flags - are now implemented correctly. - - Ports and Profiles are now managed by the session manager - and can save and restore previous settings. - - ALSA device handling has been tweaked for maximum - compatibility at the expense of latency. There are tuning - options in the config file. - - Improved Bluetooth support. HSP is disabled by default - because it is old and deprecated and in some cases causes - conflicts with the newer HFP profile. Codec switching is - now implemented as well. - - PipeWire accepts donations with liberapay now. - -- PipeWire improvements - - Improve draining in pw-stream. - - pw-stream now uses busy metadata by default. This makes sure - that no writer can write to buffers when readers are still - busy. - - Fix handling of empty array/choice instead of failing. - - Fix crashes when creating properties from empty strings. - - Make it possible to pass an array to module-access - access.allowed variables - - Fix small bug in argument parsing in pw-cat - -- Session-manager - - Restore route volumes in all cases, also when switching - routes. - - Use a default route volume for unknown routes instead of - letting the system decide on a default. - - Improve profile handling. Don't try to restore unavailable - profiles. Implement the profile switching in the session - manager now. - - Fix handling of Virtual sources as defaults. - - Handle port switching in the session manager. Implement - save and restore of default ports per profile. - -- GStreamer - - Fix a crash with zero SPA_PARAM_BUFFERS_size - -- Device support - - v4l2-source will now respect the requested memory types. - - ALSA buffering has been tweaked. USB devices should have - less XRuns by default. Parameters can be tweaked to - decrease the latency on capable devices. Also fix a case - where a quantum change would cause an xrun. - - Fix mute in bluetooth devices - - bluetooth devices are not paused in idle anymore for - improved compatibility. - - Codec switching for bluetooth is implemented along with - config options to select the codecs manually. - - HSP for bluetooth is now disabled by default. Most devices - support the newer HFP profile and some devices fail when - both are available. - - Reduce the amount of events the ALSA plugins emit by bundling - them. - -- PulseAudio server - - Implement the suspend command - - Fixes volume in sample info - - Fix playback of samples, sometimes samples would be clipped - short. Also implement the target sink for the sample. - - Use rate match to feed samples. This way the latency can - be kept to a minimum. - - Latency has been tuned some more, more closely emulating - pulseaudio behaviour. - - Improve default sink/source handling. Make sure all events - are sent correctly when defaults change. - - Handle underrun better without causing sync issues. Make sure - to pause in corked state. - - Implement rewind due to seeks, fixes GStreamer seeking. - - -PipeWire 0.3.20 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Latency was reduced in ALSA and PulseAudio and time - reporting has improved a lot. - - Bluetooth now has a native HFP backed, SBC XQ and - mSBC support. - - Many bugfixes and improvements, improved device - support. - -- PipeWire improvements - - pw-dump can now dump all objects such as Endpoints - - pw-dump has a -m option to monitor changes - - pw-dump can now dump metadata - - pw-stream can now use the rate-match io to exactly - produce the required number of samples for the - current cycle. When using this feature, a stream can - achieve the same low-latency as pw-filter. - - spa-acp-tool can now load a custom profile-set and - correctly parses the volume updates - - There is now a nofail option when loading modules - - The connection has been made reentrant to fix some - strange random problems with metadata. - - Turn some errors into warnings or simply info. - - Executables are now built with PIE - - S24OE formats should work now (MAudio FastTrack Pro) - - Remove mlock warnings. Add support for mlockall with - a config option. - -- Session-manager - - There are now config files for bluez and v4l2 modules - - Improve ALSA device and node properties - - Bluetooth devices have better properties now. - - The default device routing has been improved. - -- Device support - - Port priorities are updated for UCM devices - - ACP devices notify change in routes in all cases - - There is now RW support in ALSA devices to increase - compatibility. - - Many improvements to Bluetooth. SBC XQ support can now - be enabled with a config option. mSBC can be enabled - with an option. - - Bluetooth devices not expose Routes so that they look - more like how PulseAudio handles them - - Gracefully handle missing profile-sets - - There is now a native HFP backend - - Improve card names in some cases. - - pause-on-idle is now disabled for ALSA devices. This can - reduce pops and clicks when the device is stopped. - -- ALSA plugin - - Use rate-match to reduce the latency - - Implement a _delay() function to get smoother timestamps. - - Fix property parsing. Fixes volume changes in alsamixer. - -- PulseAudio server - - Use rate-match to reduce the latency. This also reduces - the buffering in audioconvert and improves timestamp - reporting. - - Implement rate changes now that we have rate-match - support. - - pactl stats will now work - - Fix excessive memory usage when a capture client doesn't - read fast enough. - -PipeWire 0.3.19 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Startup after login should be fixed now with inotify - used to wait for permissions. - - Channels should be mapped correctly now. - - Many bluetooth improvements in LDAC, AptX-HD. AAC was - also added. Headsets should work better now. - - pipewire-libpulse was removed. It is now completely - replaced by pipewire-pulse. - - Fix a crasher bug in pipewire-pulse and some memory leaks. - - Fix a bug with feedback loop that would cause 100% CPU. - - A new pw-top tool to display real-time graph performance. - - The example session manager now has config files. - - The config file format was changed to use the SPA JSON - tokenizer. This makes it more flexible and extensible. - -- PipeWire improvements - - Fix debug of id in format channels - - Audioconvert should now remap channels correctly in all - cases. - - Feedback loops were not scheduled correctly and would - cause 100% CPU usage. - - Small improvements to the profiler to also log incomplete - graph status. - - a new tool pw-top was added that prints real-time performance - stats of the graph. - - the rtkit module now sets the nice level to -11 - -- Session-manager - - The session manager would sometimes link dont-reconnect - nodes to another node, which would leak monitor streams in - pipewire-pulse. - - The session manager now has configuration files. Config files - can also be placed in the user home directory to make custom - configurations. - - The session managers now creates unique device and node - names for alsa and v4l2 devices. - -- Device support - - Many improvements in Bluetooth codecs, LDAC stuttering, - AptX-HD negotiation, LDAC ABR support - - Bluetooth supports AAC audio now. - - Many fixes to Bluetooth SCO transport used in headsets. - - inotify support in device monitors - - ACP was synced with the latest pulseaudio code - - Fix a bug in enumeration of device ports. - -- PulseAudio server - - seek flags and offset are now supported, making gstreamer - pulse elements work better. - - Fix a crasher bug in pipewire-pulse, we sometimes would - write too much to the ringbuffer - - Fix some memory leaks in error cases. - - Fix handling of NULL string to locate default sink/source - -- JACK layer - - Ports can also be found with the aliases now, making - qjackctl work in more cases. - - -PipeWire 0.3.18 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - More work in the PulseAudio server. It should be compatible - with more applications. - - Bluetooth now support extra codecs such as AptX/HD and LDAC. - - Support for virtual sources and sink was improved a lot. - - Added a new pw-dump tool to dump the objects in JSON formats - and for filtering them with tools like jq. - - Many more stability fixes and improvements. - -- PipeWire improvements - - Silence some harmless warnings - - pw-cli can now be used to set parameters. - - Streams now perform the correct channel mapping when linked - to non-standard multichannel devices. Previously channels - would get swapped. - - port, node and device params are now cached in the server. - This avoids opening and closing devices whenever some client - enumerates formats, which improves performance a lot, - especially in cases where opening a device is slow. - - Add a command to keep a device open during negotiation. This - is used to enumerate and set a format while opening the - device just once, improving performance. - - The null-sink scheduling was fixed. - - A memory corruption bug was fixed in format conversion, this - could cause crashes, silent channels or other undefined - behaviour. - - There is now a simple JSON parser. - -- Session-manager - - Settings files are now stored in JSON. With the json parser - this is easier to parse and extend - -- Device support - - Bluetooth now supports additional codecs: LDAC, AptX and - AptX HD. LDAC is known to not work very well yet. - - ALSA devices will now default to the max supported channels - if nothing else is specified. This makes it possible to use - 8+ channel cards with the alsa-pcm module, which is not - supported with the default alsa-acp module. - - Enable mSBC support in oFono. - - Add an option to disable hardware mixers - - ALSA now improves support for batch devices. - - The udev rules had references to Pulseaudio removed in order - to not create conflicts. - - Fix a potential crash in bluetooth devices when - disconnecting. - - UCM cards now use HW volume when possible. - -- PulseAudio server - - The id can now be used as the name to locate cards and - devices - - Report streams with planar formats as well - - Better error reporting when stream create fails - - module-null-sink can now handle channels, rate and - channel_map properties - - Add support for 3 types of virtual devices: source, - sink and duplex. - - set-port was fixed - - Some buffer parameters were tweaked to improve - performance, compatibility and stuttering with lower - latency. - - NULL can be used as a name for the device sink/source - - Support lookup of monitor names - - Set properties more like pulseaudio so that some - clients (Teamspeak) don't crash anymore - -PipeWire 0.3.17 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Fix crasher bug for kwin when screensharing stopped. - - Massive improvements and compatibility fixes in the - PulseAudio server. - - The session manager now has a config directory in - /etc/pipewire/media-session.d/ It will look for files there - to activate session manager modules. Packagers can use - this to only activate the audio modules when the PulseAudio - server, libjack.so or the alsa modules are installed. - -- PipeWire improvements - - We now clear hooks before adding them. Some application - did not clear them and had random data for the destroy - callback. - - Return -ENOENT from unknown resources so apps can handle - this better. It's a common problem when an app tries to - introspect and object but it disappeared before the message - reached the server. Apps should ignore this. - - channelmap information is now passed with the volume - settings. - - DMABuf is not mmapp()ed anymore with the FLAG_MAP_BUFFERS in - the stream or filter. This is because DMABuf usually - requires more that just a simple mmap and is better left - for the application. - - increase the maximum number of ports for a client-node. - - adapter and node-factory now support the linger option to - keep the objects alive after the creating client disconnected. - -- Device support - - ALSA now handles error in close(), like when unplugging a - USB device. - -- Session-manager - - The session manager is now handling DONT_RECONNECT streams - without a target node. They get connected to a default node - once and then fail to reconnect. - - The session manager now exposes the stream setting as - metadata. This makes it possible for other components, such - as pulse-server to use this information. Information is stored - as a json object for easier consumption. - - The session manager now has a config directory in - /etc/pipewire/media-session.d/ packagers can use this - -- PulseAudio server - - Pulse server now acquire the dbus name. - - Improvements in timing and compatibility with many apps. - - The stream-restore extension is now implemented so that - the event volume can be configured. - - Many stability fixes and improvements. - - Fix some issues with module-load/unload - - -PipeWire 0.3.16 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - Fix screensharing for old 0.2 clients - - Many pulse-server improvements. There is now a - pipewire-pulse binary that is the preferred solution for - PulseAudio compatibility. The replacement libpulse - libraries are now deprecated. This also makes audio in - Flatpak work. - -- PipeWire improvements - - Fix cleanup of listeners everywhere. Force remove of - listeners in _destroy to avoid crashes. - - Add support for a journald logger module. - - Various memory leak fixes - - Silence some warnings that spammed the logs. - - Fix flush in pw_stream. This fixes small glitches when - switching streams in music players. - - Various FreeBSD fixes and improvements. - - Fix some crashes when destroying objects. - -- Device support - - Reload the ALSA configuration when creating a node so that - hotplugged devices work in all cases. - - Fix memory leaks in ACP library. This also fixes issues - where the mixer device was not closed. - - Bluetooth now has support for the mSBC codec for SCO - source and sink. - -- pulse-server - - Many introspection and compatibility improvements. It should - now be as good or better than the replacement library. - - Implement sample cache to make notification events work. - -- JACK layer - - handle errors when linking, fixes jack_connect hang when - the ports were already linked. - - -PipeWire 0.3.15 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - This is a quick update to fix critical issues with the - 0.3.14 update, which broke screen sharing and accidentally - enabled the experimental pulse-server. - - Fix some compatibility issues in pulse-server with - pavucontrol and fix an issue that would block the complete - server. - -- PipeWire improvements - - Permission checks for new clients are now done from a - global context, which makes it possible to assign initial - permissions to objects. - - Handle EINTR everywhere - - Fix an issue with the node state changes where a quick - pause/play would hang a client. - -- Session manager improvements - - Disable the bluez5 and pulse-bridge modules by default because - they interfere with pulseaudio. These options should only be - enabled if pulseaudio is removed or disabled in the system. - - Fix an issue where the session manager could end up in - infinite recursion while scanning for things to do. - - The session manager will now always configure nodes to remix - to the channel configuration of the device. This fixes the case - where mono streams would only end up on one channel of a stereo - device. - -- Device support - - Initial merge of A2DP extra codec support using the new bluez5 - API. - -- pulse-server - - Create the runtime directory when it doesn't exist. - - Don't ever block the server, use non-blocking IO everywhere. - - Fill description of profiles with the name if not otherwise set, - this fixes a crash in pavucontrol. - - the connection debug category will now also debug pulse - messages. - - Respect the no_remix flag to make the control panel channel - check work. - -- ALSA plugin - - implement pause - - -PipeWire 0.3.14 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Highlights - - This release focuses on bugfixes and stability - improvements. - - A new experimental pulse-server module was added. This - module implements the pulseaudio protocol on top of - PipeWire and can be used to make flatpaks work with - PipeWire. It looks like this might be a better way - forward compared to the libpulse.so replacement library. - - A2DP bluetooth was reworked. Playback should work a lot - better now. Support was also added to automatically link - an A2DP source to a playback device, which makes it possible - to use PipeWire as a bluetooth receiver as well. - - Improvements to the routing and volume restore features - of the session manager. - - -- PipeWire improvements - - The channelmixer does not normalize volumes anymore. Volumes - are only normalized for monitoring streams now. - - Streams can actually start in the inactive state now. - - The channelmixer can now also convert volume updates from one - channel layout to another. This makes saved volumes work - even when streams have different channel layouts. - - Clients are only registered after the properties have been - updated. - - Links now have a new active state. - - Drivers can now also specify a minimum quantum. This makes it - possible for bluetooth devices to specify an optimum quantum - for the given codec settings and MTU. - - The amount of data sent over the socket was reduced by only - sending the data that changed. - - Client objects are now exposed after they uploaded their - properties, which makes the new object more useful. - -- Tools improvements - - pw-cat will now add metadata to the PipeWire streams. - -- Session manager improvements - - Fix crashes when reading bad data in stored settings. - - volume and routing is improved. Settings are now remembered - per application or media-role. - - The session manager remembers the last device used per stream - - Fix a bug when moving streams where it could sometimes end - up with linking a stream to multiple devices. - - Use RTKit to set realtime priority on the data thread in the - session manager. This improves performance of the pulse-server - and bluetooth devices. - - Add a new property to mark streams that want to capture from - the monitor of the default sink. - - NODE_TARGET can now also contain the node name. This avoids - some lookups in the pulseaudio layer when selecting target - nodes by name. - - the -e and -d options are more usable now and can be used to - add and remove modules from the default list of modules. - -- Device support - - v4l2: add some workarounds for buggy drivers. Add Limited - support for droidcam. - - ACP: improve selection of default port and profiles. - - ACP: add support for using the hardware mixer for more than - 8 channel streams. - - ACP: support the new port type and availability group found - in PulseAudio. - - A2DP bluetooth timings were reworked. Automatic linking of - A2DP sources was added to make it possible for PipeWire to - act as a bluetooth receiver. The code was reworked to allow - other codecs such as APTX and LDAC in the future. - - Try harder to recover from ALSA errors. - -- GStreamer improvements - - Fix some crashes in the monitor that cause - gnome-initial-setup to crash. - -- PulseAudio layer improvements - - Many compatibility improvements. Improved playback in - chrome. Fix a crash in firefox when the daemon is stopped. - - Fix a leak in the formats. - - Fix !ADJUST_LATENCY streams like paplay. - - Make the device option in paplay work. - - Fix volume/mute notifications, this makes plasma volume updates - work again. - - Do the conversion between PulseAudio cubic volumes and PipeWire - linear volumes. Volume levels should behave now like they did - with PulseAudio. - -- JACK layer improvements - - Return an error when we run out of midi events. Some application - rely on this behaviour. - -- ALSA plugin improvements - - The ALSA plugin now also supports the node name in the - playback_node and capture_node properties. - - -PipeWire 0.3.13 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- PipeWire improvements - - Add pw-reserve tool to reserve or monitor a device on DBus. - - Install spa-resample, a tool to resample a file. - - Install spa-acp-tool, a tool to inspect the card profile. - - Various fixes and improvements - - Fix a bug in pw-stream where a capture stream could run out - of buffers and become silent. - - Rework the processing loops in the adapter and stream. There - is now less latency in PulseAudio and ALSA layers. - -- Session manager improvements - - Improve the device reservation code. We now try to acquire - the device using the dbus device reservation API before we - probe the device. This avoids conflicts with a running - PulseAudio where devices would disappear (because they were - locked by the other process). - - Don't fail on invalid input from the config files. - - Audio devices now have the same name as what PulseAudio - would assign. - -- Device support - - v4l2: try to use the format before enumerating the size and - framerate. Some drivers don't check the format and might now - work better. - - v4l2: Fall back to MMAP when EXPBUF fails. Fix MMAP access, - just export the fd and the mapoffset. This should make more - devices work. - - Fix crash in ALSA Card Profile (ACP) code. - - ACP: fix selection of default profile. Prefer any possibly - available profile over 'Off'. This makes some card at least - start with something. - - Fix soft volume. After setting the volume to 0, it would stay - at 0 until pushed over the max volume. This should fix - various volume related issues. - -- PulseAudio layer improvements - - Rework the buffering and latency measurements and tweak the - buffer attributes. This should make browsers and media - players work better. This should also improve speechd - performance. - -- JACK layer improvements - - Fix compilation against newer JACK. - - -PipeWire 0.3.12 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- PipeWire improvements - * the channelmap converter now handles unknown and strange - channellayouts much better. - * the resampler is now cleared correctly, avoiding clicks and - pops at the start of sound. - * Fixes for various crasher bugs. (paplay drain, vlc shutdown, - pactl info, ...) - * Fix a race condition in the node state changes that caused - all kinds of sync and other issues (vlc, mpv, ...) - * Improve the binary name property of applications - * Fix the scheduling again of nodes that always need a driver - such as the jack clients. - -- Session manager improvements - * fix routing to default nodes. Sometimes nodes were not routed to - the default node (bluetooth) - -- Device support - * disable channelmap from ALSA by default. This is what PulseAudio - does and thus provides better compatibility. - * fix a bug in how the resampler was used in the ALSA source, - causing distortion and errors when using low latency capture - clients. (Discord, webrtc, ...) - * Small bluetooth improvements. More work is needed for reliable - bluetooth playback. - -- GStreamer plugins - * the device provider now stops the processing loop before shutting - down, which avoids crashes (gnome-initial-setup). - -- PulseAudio layer improvements - * the buffer attributes were reworked to ensure compatibility with - many more applications such as mpv and audacious. - * the pulseaudio layer will now try hard to not hand out invalid - channel maps to the application. (avoids crashes in - gnome-volume-control). The channel map will now also look more - like what PulseAudio does. - * the @DEFAULT_SINK/SOURCE/MONITOR@ wildcards now work. This - fixes the problem with volume keys when they are bound to - scripts using pactl and the default sink/source wildcards. - * the PIPEWIRE_LATENCY environment variable now works again - * Fix some leaks of ports and port info. Also fix the leak of the - context when the mainloop is stopped. - * The sink/source format_info array is now filled up completely, - this is actually not implemented yet in the real PulseAudio. - -- JACK layer improvements - * jack now returns version 3.0.0 and has PipeWire in the version - string so that apps can report this. - - -PipeWire 0.3.11 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- PipeWire improvements - * Properly cleanup the mixer structures when a port is removed, - this should fix client crashes related to port config changes - and other random crashes. - * Optimize the preferred formats in the audio converter. Higher - quality formats with higher performance are chosen first. - * Make sure the time reported by pw_stream is always increasing, - even when the driver and clock changes. - * There is now also a system service and socket that can be used - to enable PipeWire systemwide. This is however not recommended - and disabled by default. - * Fix channelmixer 5.1 to stereo mix matrix. It was not reading - the conversion matrix correctly and cause channels to be - dropped. The channelmixer will now also normalize the volume, - like what pulseaudio does. - * The channelmixer will now just copy channels when no layout - has been given. It has also optimized paths for this. This - makes it possible for apps to request > 8 channels from the - alsa plugin (ardour). - * Port, Node and Link will now also emit an error on the - resources in addition to updating the error in the info. This - would make it easier to track negotiation errors in the session - manager later. - * many small fixes and cleanups. - * Fix compatibility: - + DOSBox: fix crash because of double free in pw_stream - -- Session manager improvements - * The session manager will now try to configure the client to - the channel configuration of the sink/source. It will only - do this for downmixing, never for upmixing and also never - when the client has the dont-remix property set. It will - also renegotiate the channel layout when moving a stream to - a new sink/source. - * Configuration state is now saved in XDG_CONFIG_HOME. - Previously it was saved in $HOME/.pipewire-media-session/ - You can migrate the state by moving the files to - $XDG_CONFIG_HOME/pipewire-media-session (or - $HOME/.config/pipewire-media-session as a fallback when - XDG_CONFIG_HOME is not set). - -- Device support - * Bluetooth sources and sinks should work better now. - * There is now also a new bluetooth backend using hsphfpd. - * fix the ALSA UCM Off profile for alsa pcm devices - * improve ALSA port and profile switching. The ACP device will - now switch to the best port and profile when availability - changes. - -- PulseAudio layer improvements - * Implement some more callbacks. The pulse layer will now also - notify applications of stream moved, started and latency - changes. - * Fix error code when an object was not found. We now return - PA_ERR_NOENTITY instead of PA_ERR_INVALID. - * Add some support for loading new null sinks. Applications such - as pulseeffects use this. Note that pulseeffects does not yet - work reliably but can start now. - * Improve handling of profile and port updates, it should work - much more reliable now. Apps should now also again receive - volume updates from sinks/sources. - * Fix compatibility: - + openal-soft 1.20 - + pavucontrol (checks PA_ERR_NOENTITY) - -- JACK layer improvements - * improve default source and sink handling. It was not updated - correctly in all cases. - * add samplerate and period to the pw-jack wrapper to easily - configure the desired samplerate and period for the app. - -- ALSA plugin improvements - * Add a mixer entry in the alsa config file. - * Implement support for planar types, rework the processing - function to make it more robust. - * refuse to load the alsa plugin when linked against 0.2. This - catches some old apps linked against 0.2 that want to use the - alsa plugin. - * Fix compatibility: - + linphone (ALSA SIGFPE when _status() is called - before _prepare()). - -PipeWire 0.3.10 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Many improvements to the pulse layer. - * GStreamer pulsesink element now works. - * Fixes some segfaults. - * Enable rtkit for client threads. - * fixes capture of monitor stream by name - * implement some more extensions, this makes paman - work and removes some warnings. - -- Many improvements to the GStreamer elements - * negotiation rework, avoid calling GStreamer methods from - the PipeWire callbacks because they might block and cause - deadlocks. - * Add support for non-string property values. - * improve stability after buffer and format - renegotiation. - * Rework the device provider. - * pipewiresink can now provide a stream that can - be consumed by apps like cheese. - -- Many improvements to the JACK layer: - * Rework the buffer_size callbacks. Make sure we call - the callback from a 'safe' thread and that we don't - call the process callback while the application is - handling the callback. This improves stability in - apps like Carla when PipeWire dynamically changes - the buffer size. - * Improve compatibility with apps that call - get_buffer_frames() with a 0 size (calfjackrack) - * JACK can now create nodes that can be set as a - sink/source in PulseAudio/ALSA apps (you can make an - effects rack and set that as default sink for - apps). - -- Added a group id property for nodes. This makes it - possible to schedule nodes with the same driver even - when they are otherwise not linked together. To make - this work well a new flag needed to be added to nodes - to signal when they are ready for processing. - - Together with the GStreamer fixes, this makes things - like: - - gst-launch-1.0 -v pipewiresrc path=51 stream-properties="props,node.group=1" ! - audio/x-raw ! pipewiresink stream-properties="props,node.group=1" - - work as expected with PipeWire managing the resampling - to keep the clocks of the devices in sync. - - This can later also be used to force devices to be grouped - together to create a JACK-like scheduling group. - -- Streams and filter now use PIPEWIRE_NODE and - PIPEWIRE_LATENCY env variables as fallback. - -- ACP add per device port list. This makes UCM devices - expose the right ports. - -- Fix some segfaults in ACP and UCM. - -- make pw-cat use the metadata to find default devices. - -- The media session can now save and load audio device - Profiles and Routes (volumes), stream volumes and - the default sink and sources. - -PipeWire 0.3.9 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Fix bad audio in chrome - -- Remove some errors that are not real errors. - -- Fix 100% cpu when disconnecting devices. - -- Improve pulseaudio introspection of formats - -- Fix JACK metadata handling, carla can now monitor the - port it creates and insert midi. - -- Add a new permission bit (M) that is needed to be able - to configure metadata on an object. Improve security of - metadata some more, only allow metadata on objects that - are visible to the client setting the metadata. - -- Add support for videocrop in the GStreamer elements. - -- Improve handling of the runtime directory for the - server sockets. Add some reasonable fallback when - XDG_RUNTIME_DIR is not set, as suggested in the spec. - -- Improve ALSA device names from ACP. - -- Fix various crasher bugs. One in the pulse layer, one in - the session manager. - -- Make alsa plugin respect the PIPEWIRE_REMOTE env variable. - -- Various compile fixes. - - -PipeWire 0.3.8 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Fix an embarrassing crasher in the JACK layer when - metadata keys were removed. - -- Make it possible to add properties to jack clients with - a PIPEWIRE_PROPS env variable. This can be used to make - JACK nodes look like a device (like an effects rack). - -- Improvements in the session manager in how it links - ports. Now it will try to link matching channels first - and be more intelligent otherwise. The session manager - will also configure the stream to the device port - configuration when needed. - -- Add ofono backend for Bluetooth HeadSet support. - -- Improve default source and sink handling. They are now - stored with their id, instead of name, in the metadata. - This makes it work better with JACK because of JACK's - limited name length. - -- Improve environment variables to make it possible to - create and connect to servers other than "pipewire-0". - Implement this in pulseaudio, JACK and alsa layers. - -- Add an alsa mixer plugin so that alsamixer works with - PipeWire. It will configure the default source/sink - volumes. - -- Fix capture devices. There was something wrong with how - the resampler was used that caused corruption in the - signal when the resampler was active. - -- We now ship alsa card paths, profile-sets configuration - files and udev rules so that we don't have to rely on - the pulseaudio ones. - -- Many build and stability fixes. - - -PipeWire 0.3.7 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Improved PulseAudio compatibility. The alsa card profile - code was reused from PulseAudio. Devices now support - all profiles, ports, jack detection, UCM and hardware - mixers that PulseAudio implements. There should not - be (almost) any difference between PipeWire and PulseAudio - in how it presents and manages devices. - Other missing API pieces such as the default sink/source - and move_stream are implemented now. At this point - it should be possible to replace PulseAudio with the - compatibility layer for those who want to try. - -- Many fixes and improvements to the GStreamer elements. - pipewiresrc now has the ability to periodically resend - the last frame. This makes it possible for use-cases like - screensharing to only update the screen on changes while - still keeping the client side encoder busy. PipeWire - elements can now also share a connection between them. - -- Improvements to the bluetooth nodes. Dynamically adding - and removing devices should work much smoother now. Many - fixes and improvements to a2dp and sco nodes. - -- Reduced memory usage by using less pre-allocated memory - where possible. JACK clients are especially using less - memory. - -- Support for passive links is added again. These are links - that don't cause the associated driver to become active. - This makes it possible to have blocks of effects+sinks go - to suspend as a group when not in use. - -- Both consumers and producers can now ask to renegotiate - the format. This required some cleanups and improvements - to how links and node states were handled. More work is - needed to implement more use cases. - -- Important fixes to how memory is shared with clients. Memory - was not correctly freed in all cases, which would result - in reuse of the wrong memory. - -- Support for planar formats for audio and video was added. - -- Improved error handling in the session manager. - -- Metadata is now used to manage default audio source and - sink devices. The session manager will try to link streams - to the default device. Changing the default device will - move streams to the new device. PulseAudio and JACK layers - respect the default source/sinks. - -- Metadata is used to tag the desired output device for - a stream and the session manager will move streams when - the metadata changes. The PulseAudio layer uses this to - implement the move_stream feature. - -- Many fixes to the security modules. The session manager now - has a flatpak module that grants permissions to flatpak - apps. The PulseAudio layer now respects the permissions of - objects. Security related properties are made read-only - now. Different access modules can now coexist. - -- The portal module has been split up in 2 parts: - 1) a part living in the daemon that monitors the portal - dbus owner and tags all clients from this PID. This - part has to run in the daemon in order to securely - tag the clients. - 2) a part in the session manager that uses the permission - store to manage the permissions of portal managed - clients. - - -PipeWire 0.3.6 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Extensive memory leak fixing and stress testing was done. - A big leak in screen sharing with DMA-BUF was fixed. -- Compile fixes -- Stability improvements in jack and pulseaudio layers. -- Added the old portal module to make the Camera portal - work again. This will be moved to the session manager in - future versions. -- Improvements to the GStreamer source and sink shutdown. -- Fix compatibility with v2 clients again when negotiating - buffers. - - -PipeWire 0.3.5 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Compiler fixes -- Add pw-midiplay and pw-midirecord aliases -- Add pw-mididump tool -- Add pw-metadata tool to inspect, add and remove metadata - for objects. -- Docs updates, man pages -- install alsa config files -- Fix linked sink/source in pulseaudio -- ratelimit graph processing warnings -- improve buffer handling in GStreamer elements -- Fix power usage by removing the queue for the alsa - sequencer system announce messages. -- Fix metadata clear() method dispatch. -- Improve parameter enumeration, make it possible to detect - missing parameters vs no-compatible parameters so that we - can use defaults in the first case and error in the second - case. -- Fix cleanup of proxy objects. Stability improvements on - plug/unplug in session manager. -- Make it possible to set log level from config file -- improve debug of param negotiation errors. Log the - parameters to stderr/journal. -- Make it possible to configure global logger - implementation. -- Fix NEON detection -- JACK and PulseAudio compatibility improvements - - -PipeWire 0.3.4 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- A quick update with some important stability fixes. - - -PipeWire 0.3.3 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- NEON optimizations for audio conversion (32 and 64 bits) -- rework of session manager implementation -- Add option to disable modules in the session manager -- Release midi hardware devices when suspended -- various build fixes -- Clean up options of various utils -- Stability improvements -- Mayor improvements in pulseaudio emulation. Improved - timings and compatibility. -- Implementation of drain and flush in pulse and alsa - emulation. -- Implement poll on file descriptors. -- Improvement of metadata for jack emulation. -- Fix memory and thread problems in jack emulation. -- Simplification of state changes. Should make more use - cases work in the jack emulation. -- Improvements in the gstreamer elements. Removal of - extra internal queue. pipewiresink can now be used to - play audio. -- Add pw-jack and pw-pulse scripts to run pulseaudio and - jack applications with the right library path. - - -PipeWire 0.3.2 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- build fixes -- Added support for data type negotiation. This makes it - possible for a client to say that it can handle DMABuf - and MemFd and then let the server select a compatible - format. -- Handle errors when enumerating parameters better. -- Add support for rate, format, channels and period_bytes - to the alsa config file to restrict what alsa apps can - negotiate. -- Fix JACK midi output. -- Optimizations in common audio format conversions using - AVX2. Small optimizations to plugins. -- Change the vulkan compute example to an MIT licensed - shader. -- Remove some hardcoded defaults in the audio and video - processing and use the values from the processing - context. This also fixes the vulkan example. -- Correct the documentation and defaults in the daemon - config file. -- Fix alsa and v4l2 buffer recycle. A paused client could - cause the server to leak all buffers. -- Remove some warnings that should be ignored. -- Fix a crash in the bluez5 plugins. -- Try to select higher quality formats first when - negotiating a format with an audio device. -- Fix an infinite loop in udev detection in some cases. -- Add non-interactive mode to pw-cli. You can now just - do "pw-cli ls Port" to get a listing of all ports. - pw-cli will now also connect to the default server by - default and has options to select a different server. -- Allow the server to go up to the maximum quantum (8192 - samples or ~=180ms) if a client explicitly wants this. - - -PipeWire 0.3.1 - -This is a bugfix release that is API and ABI compatible -with previous 0.3.x releases. - -- Don't load the rtkit module by default. It can cause a - sigkill, which is not desirable for mutter, for example. - Only enable this for the jack library for now. -- Don't use pthread cancel by default because it uses a - signal that might crash some apps. Only use it for - the jack library because jack clients really expect this. -- Build fixes for -Werror=suggest-attribute=format -- improve error messages, don't report harmless errors and - warnings. Try to send error messages to the proxy that - started the operation or is the owner of the object. -- pw-cat: midi improvement, add midi recording and dump - in verbose mode -- fix properties when loading spa-nodes from the config -- Fix and update some examples -- jack: check arguments and don't crash when invalid -- Fix buffer memory upload. -- jack: fix compatibility with zrythm. Fix timemaster - install, improve sample_rate callback. Fix reposition - handling. -- fix crash in port after buffer negotiation error. -- add support for control ports in pw_filter -- fix cleanup of the metadata module -- improve param enumeration. -- Clear stream buffers when the format is cleared. -- Add create-object command in the config file to create - object from a factory. -- Fix crash after the driver was not removed from unassigned - nodes. Also properly pause inactive nodes. -- Use "true" and "false" in properties when we are talking - about a boolean. -- pulseaudio: improve compatibility - - -PipeWire 0.3.0 - -The 0.3 release is a major milestone in the development of -PipeWire. It features a complete redesign of the scheduling -mechanisms that make it possible to run a JACK compatibility -layer with comparable performance to JACK2. - -The API has been reworked and is declared stable now. All -development files and runtime paths are versioned so that -future incompatible changes can be done without breaking -existing applications. - -PipeWire 0.3 also includes a (now mandatory) session manager -that populates and controls the PipeWire graph. This example -session manager is very simple and not configurable. It is -expected that future version will either switch to a more -flexible session manager (like WirePlumber) or improve the -configuration options of the example session manager. - -PipeWire 0.3 includes both PulseAudio, JACK and ALSA -compatibility libraries that are known to support a wide range -of applications. The ALSA library is pretty complete at this -point. The JACK and mostly the PulseAudio compatibility -libraries need more work. See the Wiki pages for the current -compatibility problems. We do not yet encourage people to -switch away from their existing audio solutions (PulseAudio -or JACK) but we would love to hear from people who try it -anyways. Future versions will mostly focus on improving -compatibility further to make PipeWire a drop-in replacement. - -PipeWire comes with some GStreamer plugins to consume and -produce data for PipeWire. The consumer (pipewiresrc) is -working well in most cases. The sink (pipewiresink) is known -to be somewhat problematic for now. - -PipeWire 0.2.97 - -Eighth pre-release for upcoming 0.3: - -- Build fixes -- pw-cat improvement: Fix remote name, add midi support -- add device subscribe params for completeness -- jack and pulseaudio compatibility fixes -- Fix a bug in resampler, add quality option, tweaked quality - settings, tested now against https://src.infinitewave.ca/ - testsignals and submitted results for publication. -- Fix awkwardness in buffer negotiations, the default number of - buffers was 4 and jack could only handle 2, causing - corruption. Also implement negotiation of Step ranges. -- Fix device reservation to work together with pulseaudio, - previously we would block pulseaudio. - -PipeWire 0.2.96 - -Seventh pre-release for upcoming 0.3: - -- jack: improve compatibility -- Fix unit test -- Fix license of jack and alsa libs -- Make start/stop more threadsafe -- Fix rt-kit again, add params to configure things, increase default - soft/hard limits to avoid being killed. -- version 0 compatibility improvements, tested with firefox, cheese, - GStreamer and chrome using compat layers. -- Fix timing for gstreamer source -- Require libspa in pkg-config file -- Limit buffers to 16 to support old clients - -PipeWire 0.2.95 - -Sixth pre-release for upcoming 0.3: - -- Fix tests for big endian some more -- Improve v2 compatibility mode: improve type negotiation and - update_permissions -- Workaround for firefox screen sharing - - -PipeWire 0.2.94 - -Fifth pre-release for upcoming 0.3: - -- Fix man page names -- Fix jack set_sync_timeout -- Improve JACK compatibility with apps that cache buffer pointers. -- Improve mlock failure warning message, add property to configure - if mlock should be used. -- Improve OBJECT_PATH in alsa objects -- Install in versioned directory -- Add pw-profiler tool -- Improve pulseaudio compatibility wrt pa_operations -- Thread safety fixes in remote nodes when activating/deactivating -- Improve JACK names on duplicates -- Add option to ignore failure when loading modules - -PipeWire 0.2.93 - -Fourth pre-release for upcoming 0.3: - -- Fix unit tests on 32 bits -- Append -pw version to pulse and jack libs. This way we can install - it next to the real libraries and use a symlink to enable it. -- Improve jack support by killing threads with pthread_cancel. This - then also remove the eventfd from the data-loop, making it - maybe a little faster. -- Fix jack_client_close() compatibility -- Fix some segfaults in the session manager -- Improve debug of protocol messages -- Add examples options -- Don't fail when alsa is not found -- Fix some compiler warnings with a new spa_aprintf() helper. -- Add pw-cat, the simple audio playback/record tool -- Rename pipewire tools to pw- prefix -- Add improve pw-cli object dump feature - - -PipeWire 0.2.92 - -Third pre-release for upcoming 0.3: - -- Improve old version check some more -- Fix unit tests on little/big endian -- Fix compilation when CPU has no optimisations -- Install jack and pulse libraries -- Handle -EACCESS in flatpack access module - - -PipeWire 0.2.91 - -It is mostly a bugfix release to make the new version install and -run correctly in distros. - -- Install session manager, fix path to find the session manager -- Fix alsa buffer reuse -- Small fixes for crasher bugs -- Implement pw_core_set_paused() to suspend/resume even - processing. This can be used when using multiple connections - to a daemon and one needs to pause one connection until the - other one completes an action. Used by session managers. -- Improve old version check - - -PipeWire 0.2.90 - -This is the first pre-release of the 0.3 version. It consists of a -major rewrite and is not API or ABI compatible with the 0.2 -branch. - - -PipeWire 0.2.7 - -This is mostly a bugfix release and is API/ABI compatible with -previous 0.2 versions. - -Work is ongoing in the work branch that features a completely new -scheduling method that will enable audio support. Some of these -API changes are backported in this branch. - -- Add support for alsa-lib 1.1.9 which changed the include path -- Improve error checking and reporting in the protocol -- deviceprovider: fix probing without starting -- add sentinel to some functions -- compiler fixes for musl -- Revert object tree permission checks that broke things, this is - probably not a good idea (and the tree of objects is going to - be removed later) - - -PipeWire 0.2.6 - -- Improve error checking for threads -- Fix some memory and fd leaks -- Fix compilation with C++ compilers and clang -- DISABLE_RTKIT should now not try to use dbus at all -- Camera Portal fixes: - - add Camera media.role - - Rename module-flatpak to module-portal - - Use the portal permissions store for camera checks -- Actually use the passed fd in pipewiresrc -- Make properties with "pipewire." prefix read-only -- Add security label to client object -- Enforce link permissions -- Permissions of objects are now combined with parent permissions -- Remove libv4l2 dependency, it is not used -- Improve format negotiation in autolink #146 -- Try to avoid list corruption with event emission #143 -- Fix destroy of client-node memory corruption -- Various small improvements - -PipeWire 0.2.5 - -- build fixes for systemd -- Add cursor and bitmap metadata. This can be used to send a cursor - sprite with the video stream. -- permissions were set too strict for non-flatpak clients -- Fix crash in loop caused by thread unsafe hook emission -- Add more error checking for thread-loop -- Small cleanups and bugfixes - -PipeWire 0.2.4 - -- Install man pages in right directory -- Add systemd socket activation -- Various memory leak and corruption fixes in properties, dbus and - buffer mmapped memory. -- Fix v4l2 crash on unplug -- improve stream cleanup - -PipeWire 0.2.3 - -- Fix deviceprovider caps introspection -- Refcounting fixes in pipewiresrc -- Remove clock interpolation from stream -- Improve clock in gstreamer elements -- Remove spalib -- Fix crash with pw_map -- Add version number to hook list -- Improve driver mode in gstreamer elements -- add daemon options -- add man pages - -PipeWire 0.2.2 - -- Increment API version and .so version - -PipeWire 0.2.1 - -- Various fixes to memory handling -- Fixes for shutdown -- v4l2 fix enumeration of frame intervals -- Make the daemon stop when the setup commands fail -- Improve safety of hooks -- Update stream API to more future proof version -- Add more options to stream API such as scheduling in the - main thread and automatic mapping of buffers -- Add version file and macros to check compile time and - runtime versions of pipewire -- Future proof some structs - - -PipeWire 0.1.9 - -- Various build fixes -- Do more permission checks -- Add support for doing async connections. This can be used to - make connections through the portal later. -- Fix device creation from the GStreamer device monitor -- v4l2 experiment with controls -- move rtkit to a module to avoid dbus dependency -- use dmabuf allocator in gstreamer elements -- Add DSP module for pro audio cases, remove jack module. The - idea is to make a replacement jack client library that talks - pipewire directly instead of trying to emulate a jack server. -- Various memory handling improvements diff --git a/README.md b/README.md index bf91478b2..98a4dd07d 100644 --- a/README.md +++ b/README.md @@ -1,193 +1,20 @@ -# PipeWire +# PipeWire Media Session -[PipeWire](https://pipewire.org) is a server and user space API to -deal with multimedia pipelines. This includes: +PipeWire Media Session is an example session manager for +[PipeWire](https://pipewire.org). - - Making available sources of video (such as from a capture devices or - application provided streams) and multiplexing this with - clients. - - Accessing sources of video for consumption. - - Generating graphs for audio and video processing. - -Nodes in the graph can be implemented as separate processes, -communicating with sockets and exchanging multimedia content using fd -passing. +Note that we recommend the use of +[WirePlumber](https://gitlab.freedesktop.org/pipewire/wireplumber) instead. ## Building and installation -The preferred way to install PipeWire is to install it with your -distribution package system. This ensures PipeWire is integrated +The preferred way to install PipeWire Media Session is to install it with your +distribution package system. This ensures PipeWire Media Session is integrated into the rest of your system for the best experience. -If you want to build and install PipeWire yourself, refer to +If you want to build and install PipeWire Media Session yourself, refer to [install](INSTALL.md) for instructions. -## Usage - -The most important purpose of PipeWire is to run your favorite apps. - -Some applications use the native PipeWire API, such as most compositors -(gnome-shell, wayland, ...) to implement screen sharing. These apps will -just work automatically. - -Most audio applications can use either ALSA, JACK or PulseAudio as a -backend. PipeWire provides support for all 3 backends. Depending on how -your distribution has configured things this should just work automatically -or with the provided scripts shown below. - -PipeWire can use environment variables to control the behaviour of -applications: - -* `PIPEWIRE_DEBUG=` to increase the debug level (or use one of - `XEWIDT` for none, error, warnings, info, - debug, or trace, respectively). -* `PIPEWIRE_LOG=` to redirect log to filename -* `PIPEWIRE_LOG_SYSTEMD=false` to disable logging to systemd journal -* `PIPEWIRE_LATENCY=` to configure latency as a fraction. 10/1000 - configures a 10ms latency. Usually this is - expressed as a fraction of the samplerate, - like 256/48000, which uses 256 samples at a - samplerate of 48KHz for a latency of 5.33ms. -* `PIPEWIRE_NODE=` to request a link to the specified node - -### Using tools - -`pw-cat` can be used to play and record audio and midi. Use `pw-cat -h` to get -some more help. There are some aliases like `pw-play` and `pw-record` to make -things easier: - -``` -$ pw-play /home/wim/data/01.\ Firepower.wav -``` - -### Running JACK applications - -Depending on how the system was configured, you can either run PipeWire and -JACK side-by-side or have PipeWire take over the functionality of JACK -completely. - -In dual mode, JACK apps will by default use the JACK server. To direct a JACK -app to PipeWire, you can use the `pw-jack` script like this: - -``` -$ pw-jack -``` - -If you replaced JACK with PipeWire completely, `pw-jack` does not have any -effect and can be omitted. - -JACK applications will automatically use the buffer-size chosen by the -server. You can force a maximum buffer size (latency) by setting the -`PIPEWIRE_LATENCY` environment variable like so: - -``` -PIPEWIRE_LATENCY=128/48000 jack_simple_client -``` -Requests the `jack_simple_client` to run with a buffer of 128 or -less samples. - - -### Running PulseAudio applications - -PipeWire can run a PulseAudio compatible replacement server. You can't -use both servers at the same time. Usually your package manager will -make the server conflict so that you can only install one or the -other. - -PulseAudio applications still use the regular PulseAudio client -libraries and you don't need to do anything else than change the -server implementation. - -A successful swap of the server can be verified by checking the -output of - -``` -pactl info -``` -It should include the string: -``` -... -Server Name: PulseAudio (on PipeWire 0.3.x) -... -``` - -You can use pavucontrol to change profiles and ports, change volumes -or redirect streams, just like with PulseAudio. - - -### Running ALSA applications - -If the PipeWire alsa module is installed, it can be seen with - -``` -$ aplay -L -``` - -ALSA applications can then use the `pipewire:` device to use PipeWire -as the audio system. - -### Running GStreamer applications - -PipeWire includes 2 GStreamer elements called `pipewiresrc` and -`pipewiresink`. They can be used in pipelines such as this: - -``` -$ gst-launch-1.0 pipewiresrc ! videoconvert ! autovideosink -``` - -Or to play a beeping sound: - -``` -$ gst-launch-1.0 audiotestsrc ! pipewiresink -``` - -PipeWire provides a device monitor as well so that - -``` -$ gst-device-monitor-1.0 -``` - -shows the PipeWire devices and applications like cheese will -automatically use the PipeWire video source when possible. - -### Inspecting the PipeWire state - -To inspect and manipulate the PipeWire graph via GUI, you can use [Helvum](https://gitlab.freedesktop.org/ryuukyu/helvum). - -Alternatively, you can use use one of the excellent JACK tools, such as `Carla`, -`catia`, `qjackctl`, ... -However, you will not be able to see all features like the video -ports. - -`pw-mon` dumps and monitors the state of the PipeWire daemon. - -`pw-dot` can dump a graph of the pipeline, check out the help for -how to do this. - -`pw-top` monitors the real-time status of the graph. This is handy to -find out what clients are running and how much DSP resources they -use. - -`pw-dump` dumps the state of the PipeWire daemon in JSON format. This -can be used to find out the properties and parameters of the objects -in the PipeWire daemon. - -There is a more complicated tool to inspect the state of the server -with `pw-cli`. This tool can be used interactively or it can execute -single commands like this to get the server information: - -``` -$ pw-cli info 0 -``` - -## Documentation - -Find tutorials and design documentation [here](doc/index.md). - -The (incomplete) autogenerated API docs are [here](https://docs.pipewire.org). - -The Wiki can be found [here](https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home) - ## Contributing PipeWire is Free Software and is developed in the open. It is mostly diff --git a/autogen.sh b/autogen.sh index 5e0c381e7..9e99c6d90 100755 --- a/autogen.sh +++ b/autogen.sh @@ -7,7 +7,7 @@ if [ -z "$MESON" ]; then fi if [ -z "$MESON" ]; then echo "error: Meson not found." - echo "Install meson to configure and build PipeWire. If meson" \ + echo "Install meson to configure and build PipeWire Media Session. If meson" \ "is already installed, set the environment variable MESON" \ "to the binary's path." exit 1; @@ -15,4 +15,3 @@ fi mkdir -p builddir $MESON setup "$@" builddir # use 'autogen.sh --reconfigure' to update -ln -sf builddir/Makefile Makefile diff --git a/meson.build b/meson.build index f5cac642c..e7d9f6430 100644 --- a/meson.build +++ b/meson.build @@ -193,10 +193,6 @@ else makedata.set('TAG', media_session_version) endif -configure_file(input : 'Makefile.in', - output : 'Makefile', - configuration : makedata) - # Find dependencies mathlib = cc.find_library('m', required : false) rt_lib = cc.find_library('rt', required : false) # clock_gettime