diff options
Diffstat (limited to '')
-rw-r--r-- | NEWS | 4812 |
1 files changed, 4812 insertions, 0 deletions
@@ -0,0 +1,4812 @@ +# PipeWire 0.3.65 (2023-01-26) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Add back the deprecated symbols but make sure a deprecated warning is + emitted for them. This fixes compilation issues in bindings. + - Fix an error in the AVX code that could cause crackling in filter-chain + when using the mixer. + - The convolver in filter-chain can now select an IR from a list of IRs + that best matches the current samplerate. Also resampling of the IR + has been improved. + - A new native module-combine-stream was added. You can use this to create + a 5.1 device from 3 stereo soundcards, for example, or direct the output + to multiple sinks at once. + - Support for Bluetooth MIDI was added. This requires a wireplumber + addition as well. + - An ALSA plugin rule was added to tweak the buffer settings in Davinci + Resolve so that it now runs with acceptable latency. (#1697) + - Support for compress offload was added using tinycompress. This allows + compressed formats to be decoded in hardware using ALSA on some devices. + - Many more buffixes and improvements. + + +## PipeWire + - Add back the deprecated symbols but make sure a deprecated warning is + emitted for them. (#2952) + - Fix a regression when running older servers and newer clients (such as + flatpaks on older server) where the server would run clients too soon, + causing crashes. (#2964) + - Ensure that environment variables override any config values. + +## Tools + - pw-cli has received some improvements in the output. + - pw-cat can now use ffmpeg to demux streams for compress offload. + +## modules + - The convolver IR volume is now preserved after resampling. + - Adapter ports can now have a custom prefix. + - module-rt now clamps the realtime priority to the user allowed one if + it is within an acceptable range. Before it would fall back to RTKit + immediately. + - The module-echo-cancel can now have per stream channel layouts which + makes it possible to link to specific audio ports on a device. (#2939) + - Fix an error in the AVX code that could cause crackling in filter-chain + when using the mixer. (#2965) + - The convolver in filter-chain can now select an IR from a list of IRs + that best matches the current sample-rate. + - module-pipe-* now better matches the pulseaudio properties. (#2973) + - A new combine-stream module was added to combine multiple sinks into + one sink. It is also possible to merge multiple sources into one. + - module-rtp-source now has match rules to select what SAP sessions + to stream from. There were also improvements to the buffering and + latency handling. + - module-rtp-sink now handles multicast loopback correctly. + - module-rtp-sink implements min-ptime and max-ptime to control the + send packet latency. + +## SPA + - A new modifier flag was added to the video format parser helper to + allow 0 (linear) as a valid modifier. (#2943) + - Params includes were reorganized to make it more scalable. Many compressed + audio formats were added. + - The alsa pcm plugin now handles invalid values from the driver + gracefully. (#2953) + - Fix some potential stuttering cause by wrong scaling and overflow + of the output buffers in audioconvert. (#2680) + - Debug output is now also sent to the log instead of stdout. (#2923) + - A debug context was added to debug macros to implement custom debug + handling. This is used to redirect the debug of pods to the debug log + instead of using some custom duplicated code. + - Fix some warnings for potentially undefined shifts in format + conversion. + - Support for compress offload was added using tinycompress. This is mostly + used on some embedded hardware where decoding of audio formats can be + done in hardware. + +## Bluetooth + - Some fixes for LE audio were added. + - Support for Bluetooth MIDI was added. This requires a wireplumber + addition as well. + - Reply OK to empty commands. + - Improve compatibility with some devices that send stray \n such as + the Sennheiser HD 350BT. (#2991) + +## pulse-server + - Devices with unsupported formats (by the pulseaudio API) are now also + listed in the pulseaudio API (with invalid formats). + - The native module-combine-stream is used for module-combine-sink. + +## JACK + - Make jack.merge-monitor default to true to better match the jack1/2 + behaviour. Add an exception for mixxx, which is more usable with + unmerged monitors. (#1760) + +## ALSA + - The property handling in the ALSA plugin was improved. alsa.properties + and alsa.rules can now be added to the config file. + - A rule was added to tweak the buffer settings in Davinci Resolve so that + it can run with acceptable latency. (#1697) + - ALSA volume will now also use cubic volumes, like pulseaudio. + - The ALSA ctl plugin now also uses the client-rt.conf file. + - A new alsa.volume-method was added to configure cubic or linear volume. + This can be set per application using the rules. + +## GStreamer + - pipewiresrc will now advertize DMABUF support if the pipeline suports + this. + - pipewiresrc will now always be a live source unless told otherwise. + +Older versions: + + +# PipeWire 0.3.64 (2023-01-12) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Clear old buffer memory on ports to fix some SIGBUS errors. + - It is now possible to assign custom port names to the ports from an + adapter. This feature is helpful to those who use a multichannel + interface with long-term connections. This way they can label each + port with its designation, such as an instrument name or anything else + to be displayed in a patchbay or DAW. + - Fix some issues with node suspend and quantum and rate calculations. + - Fix some regressions in pulse-tunnel and RTP-source adaptive resampling + that could cause synchronization problems. + - UCM devices now also have a Pro Audio profile. + - NODE_TARGET (with the object.id) is now deprecated, use TARGET_OBJECT + (with the object.serial, which is not reused and can avoid races). + + +## PipeWire + - Clear all peer input port buffers when suspending. This fixes some + SIGBUS errors when some plugins were using old memory. (#2914) + - Fix a case where nodes that were not supposed to be suspended, were + kept suspended on a rate change. (#2929) + - Fix an error in the quantum and rate calculations that could cause + nodes to run with wrong quantum and rates when multiple rates were + allowed. (#2925) + +## Tools + - pw-dump will now sort dictionaries to make it easier to compare + different outputs. + - Improve output of pw-reserve. + - pw-loopback uses TARGET_OBJECT so you will need to use the serial + id (or better the name) as the target instead of the object id. + +## modules + - The filter-chain modules has seen some cleanups, refactoring and + optimizations in the various DSP functions. + - The ROC module now supports setting a custom samplerate. + - ROC 0.2.X is now required. + - The pulse tunnel and RTP source were not updating the rate field + correctly which could cause synchronization problems. (#2891) + - The filter-chain now supports an arbitrary number of control + properties. (#2933) + - It is now possible to assign custom port names to the ports from an + adapter with the PW_KEY_NODE_CHANNELNAMES. + - Support was added for capture and playback props in echo-cancel. + (#2939) + +## SPA + - The ACP code now has an option to set the probe samplerate. (#1599) + - UCM devices now also have a Pro Audio profile. + - Filtering of Step ranges is now implemented. + +## Pulse-Server + - The channel-map is now set correctly on the echo-cancel module. + - source_master and sink_master are now correctly handled in module + echo-cancel. + - Fix a regression in DRAIN where resuming after a DRAIN would fail. + This caused problems for espeak. (#2928) + - TARGET_OBJECT is now used to make it possible to use the indexes + as a target. + - ladspa-source and remap-source can now also link to monitors. + +## ALSA + - The ALSA plugin now handles the target.object correctly when set to + -1. (#2893) + +## V4L2 + - The v4l2 replacement library now also follows symlinks. + - Support for getting and setting controls was added. + - Support for G_PARM was added. + - The environment variable PIPEWIRE_V4L2_TARGET can be used to force + an application onto a specific camera. + +## Bluetooth + - Fix compilation without ldac_abr. + - Fix a missing brace in CIND reply. This could cause some devices to + fail. + - Fix configuration of the initial latency. + +## GStreamer + - The device provider now supports setting an fd so that it can connect + to PipeWire sessions from the portal. + - DMABuf support was re-enabled in gstpipewiresrc. + +# PipeWire 0.3.63 (2022-12-15) + +This is a quick bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Fix a critical bug that causes audio distortion in some cases when using + AVX2. + - Fix a crash in mpv caused by deinit of PipeWire. + - Resample the convolver IR to match the graph samplerate for better + results. + - Many more small bugfixes and improvements. + + +## PipeWire + - Fix a segfault in the PipeWire deinit code triggered by mpv in some + cases. (#2881) + - Fix docs about SPA_PLUGIN_DIR. + - Always dlclose by default (even under valgrind). Add an option with + PIPEWIRE_DLCLOSE to select alternative behaviour. + - Improve PIPEWIRE_DEBUG category handling. + +## modules + - Resample the IR for the convolver when the IR samplerate and graph rate + don't match. + +## SPA + - Handle spurious reads from timerfd gracefully. + - Fix potential stack-use-after-scope when starting Audacity. + - Fix distorted audio when using AVX2. (#2885) + - Remove fallback to default channel map in channelmix. + - Improve sorting of MIDI events, use the same order as Ardour. (#1816) + - Enable LFE downmixing by default. (#2425) + - Make IEC958/AC3 and IEC958/DTS work better by enforcing a fixed minimal + buffering for the encoder to avoid stuttering. (#2650) + +## Pulse-Server + - Add a new pulse.cmd config section to execute pulse commands, currently + only for loading modules. This removes the dependency on pactl. + - Improve debug of messages. + +# PipeWire 0.3.62 (2022-12-09) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - A regression in screensharing was fixed. It was caused by a race when + activating links and driver nodes. + - Video transform metadata was added so that cameras and screen sharing + can report the video orientation and transformations. + - Support for the PulseAudio module-gsettings was added to make paprefs + work. + - Support for bluetooth offloading was added. This allows for the bluetooth + reception, decoding and playback to happen completely in hardware. + This also requires some support in WirePlumber. + - Many bugfixes and improvements. + + +## PipeWire + - More work on stopping nodes in a more controlled way. + - Fix a race in starting nodes and drivers. In some cases the driver + node would already be started while the link to the peer node was not + ready yet. This caused regressions in screen sharing. The driver is + now only started after all the followers and links completed. + - Fix a case where a slow capture stream would not recycle buffers + anymore and stall. (#2874) + - Fix a subtle bug in pw_loop_invoke that could cause callbacks to be + delayed and cause crashes in some cases. + - Fix a case where IPC was done from the data-thread and could cause + crashes. + +## Tools + - Silence some expected errors in the pw-top output. + +## modules + - The filter-chain has seen some optimizations in the copy plugin and + the convolver. + - The zeroconf plugin will now only unpublish services from the server + that was removed. + - Fix a potential crash when stopping pw-loopback. + - Some harmless errors were turned into info messages. + - Fix some cases where pw_stream methods were called from the data-thread + that could cause segfaults. (#2633) + +## SPA + - There is now a video transform metadata that indicates how a video + frame was transformed (rotated/flipped). libcamera and the GStreamer + elements now have support for this metadata. + - The SPA volume plugin is now disabled from the default build. + - Handle missing control info in libcamera. + - Handle errors from loop better, don't call the callbacks on errors. + - Somewhat improve performance in some audioconvert AVX2 code for format + conversion. + - Fix PortConfig and EnumPortConfig params in audioconvert and + audioadapter to reflect what is actually going on instead of using + hardcoded values. + - Pass ignore-dB property correctly in all cases. + - Probing is now done in 48KHz again. (#2857) + +## Pulse-server + - IPv4 addresses are now added first to the list and exposed first with + zeroconf discover. + - module-gsettings was added to make paprefs work. + - The pulse.idle.timeout option was disabled by default and only enabled + for selected apps (speech-dispatcher) because it caused some problems + for other apps. (#2880) + +## JACK + - Only process valid ports. Could fix some crashes. (#2863) + +## Bluetooth + - Support was added for offloading bluetooth handling. Some hardware can + receive, decode and play the bluetooth audio directly in hardware. + +# PipeWire 0.3.61 (2022-11-24) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Fix a bug in audioadapter that could cause crashes when switching + bluetooth profiles. + - Fix sound in QEMU, deadbeef and openal again. + - libcamera plugin fixes, dynamic add and remove should now work with + the next wireplumber version. + - Fix a regression in pw-midiplay where the first buffer would not + play and some events would be missing. + - The network module now doesn't export other network sources + anymore. + - pulse-server now detects clients that keep underrunning for a long time + and will pause them to save power. + - Many more bugfixes and improvements. + + +## PipeWire + - Optimize away some useless graph recalculations. + - Increase alternative sample rates from 16 to 32. + - FreeBSD and musl build fixes. + - Silence some module loading errors when the error can be ignored. + - Fix initial buffer requested size for pw-stream when operating in + async mode. This also indirectly fixes the first buffer in + pw-midiplay. (#2843) + +## Modules + - Set the network property on pulse-tunnel streams so that they are + not exported anymore. (#2384) + - Filter-chain has optimized mix functions now. + +## SPA + - Handle some errors in libcamera better. + - Fix libcamera remove events. Fix the id allocation for devices. + - Fix a bug in audioadapter where it would not renegotiate after + a port reconfiguration, leading to crashes, especially when + automatically switching profiles in bluetooth. (#2764) + - Do ALSA probing in 44100Hz again. Some devices seem to fail + otherwise for some unknown reason. (#2718) + - Force playback start when the ALSA buffer is full. This fixes sound + in QEMU. (#2830) + - Support Digital 5.1 AC3 for Asus Xonar SE. + - Improve format renegotiation in audioadapter. This makes the ALSA + plugin work again for deadbeef. (#2832) + - Fix latency reporting on adapter DSP ports. + +## pulse-server + - Fix a bug where openal based applications would hang. (#2821) + - Improve zeroconf publish. Only publish on the address of the first + running server. This avoids duplicate entries for IPv4 and IPv6. + Add support for republish entries when new servers are started. + - Add a pulse.idle.timeout option (default to 5 seconds) to pause + streams that have been underrunning for this amount of time. Badly + behaving clients will then not keep the graph and device busy so + that devices can be suspended to save battery. This should give + better default behaviour with speech-dispatcher. (#2839) + +## JACK + - Add an option to configure the filter character. + - Fix connect_callbacks. It was only called once for output ports. + (#2841) + - Add option to set node.passive on jack clients. Make some quirks + for qsynth to make it suspend and fade out better. + +# PipeWire 0.3.60 (2022-11-10) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - The filter-chain now handles errors better and has fixes for many + crasher bugs. + - A new RTP module was added with a sender and receiver. It uses SAP + to announce and consume RTP streams and is compatible with the + PulseAudio RTP modules. + - Many small bluetooth improvements and fixes. + - The alsa plugin will now only start playback when there is data. This + results in better sync and lower latency between capture and playback. + - The v4l2 and libcamera plugins have seen a lot of improvements. They + support control properties now. Also pw-v4l2 has seen many improvements + and mostly passes the v4l2-compliance test now. + - Many more bugfixes and improvements. + + +## PipeWire + - Code cleanups, compiler warning fixes. + - Add some extra checks to avoid scheduling an inactive node. + - Rework the sequence of events to start and stop nodes. + - Improve param enumeration. + - An option was added to give priority to the Buffer params of the + consumer. This makes it possible to use the default values of the + consumer (instead of the producer) when capturing from a source. + - The graph rate selection was improved to pick a rate closest to the + requested one (instead of picking the default). + +## Modules + - Fix some crashes in filter-chain. (#2737) + - X11 Bell module will now be loaded by default when available. + - A new RTP module was added with a sender and receiver. It uses SAP + to announce and consume RTP streams and is compatible with the + PulseAudio RTP modules. + - Improve RAOP compatibility. + - The echo-cancel module now uses the resampler prefill option to align + input and output samples without buffering. Better latency control + when starting and stopping has been implemented. + - The pulse tunnel will now write aligned samples to pulseaudio even + when the ringbuffer wraps around. This fixes playback issues with + multichannel sinks. + - Add a delay option to module-loopback using a ringbuffer. + - Implement echo-cancel params. + - The filter-chain module has better error reporting. + - The LADSPA search path was extended with some more common paths. + - The echo-canceler input can now also be a monitor of a sink. This + improves compatibility with some proton games that expect a real + sink instead of a virtual one. + +## Tools + - Better error reporting in pw-link. + - pw-top now also shows IEC958 passthrough formats and JPEG/H264 video + formats. + - pw-top refreshes the screen faster. + - pw-top now prints the state of the node and shows less info for + inactive nodes. + - pw-dump now uses the new seq field in the spa_param_info to discard + old param updates and avoid duplicate params in the output. + +## Bluetooth + - Add ModemManager support in the native backend. + - Clean up GetManagedObjects handling. + - Handle QoS from the endpoints in the codec. + - Increase the socket buffer to have more control over the rate and QoS. + - Simplify the packet flushing code. + - Stop processing nodes before destroying them. + - Fix timers when a source switches drivers. + - Codecs can now share endpoints. This reduces the amount of endpoints and + avoids problems with devices that can't handle a large amount of + codec endpoints. + - Report batery status to UPower for HFP AG. + - Fix bitpool increase. + +## SPA + - The audioresampler now avoids clicks and pops between activating and + deactivating the adaptive resampler when used by the stream API. + - Use default locale to parse float parameters. + - The upmix functions now have SSE optimizations. + - Avoid recalculating the complete channelmix setup when only the + volume changes. + - The alsa plugin will now only start playback when there is data. This + results in better sync and lower latency between capture and playback. + - The ALSA MIDI sequencer will now pull data from the graph even when it + did not output anything. Fixes some graph stalls with the sequencer in + some cases. (#2775) + - v4l2 and libcamera sources now recycle buffers when nothing is consuming + them. This avoids stalling the graph. + - libcamera now suggests a more appropriate frame size than the smallest + poster frame. + - Improve state changes in audioconvert. (#2764) + - A new seq field was added to spa_param_info to keep track of pending + param updates. + - Support speaker output only on RealTek ALC4080. (#2744) + - The v4l2 source now supports setting controls. + - The libcamera plugin now supports enumerating and setting controls. + - A new unit test for 6.1 channel mapping was added. (#2809) More debug + info was added to audioconvert for the channel matrix. + - Audioconvert will now also upmix a rear-center channel when needed. + +## pulse-server + - Add support for the RTP send and recv modules with the new native + RTP module. + - Add option to set latency for pulse-tunnel streams and + module-zeroconf-discover. + - The socket will now be given the same permissions as what pulseaudio + did (0777). + - Implement module-loopback latency_msec correctly with the new delay + parameter. + - sysfs.path is now filled with the same data as pulseaudio. + - The manager now uses the new seq field in the spa_param_info. + - Fix a bug where in some cases the read pointer would get out of sync + and cause too large requests. (#2799) + +## ALSA + - The alsa plugin now reuses the stream in prepare which results in + better performance. + - Some deadlocks have been fixed in the ALSA plugin. + - The ALSA plugin reports more accurate timing information in some cases. + +## V4l2 + - The v4l2 compatibility layer has received a lot of updates. + - Improved node names and format enumeration. + - Support for multiple /dev/videoX devices, each mapped to a unique + PipeWire node. + - Passes the v4l2-compliance test now with both the v4l2 and libcamera + backend in PipeWire. + - Improved mmap support for inline buffer memory. This makes it possible to + consume PipeWire streams. + - Negotiation works more reliably now. + +## JACK + - Implement jack_acquire_real_time_scheduling() and + jack_drop_real_time_scheduling() by keeping the thread utils in a global + state. + - Fix jack_client_thread_id() to return NULL when the client is not active, + just like jack1 and jack2. + - An option was added to let the jack_set_buffer_size() function update the + global metadata. A quirk was added so that jack_bufsize uses this new feature + to make the buffer size settings persistent and global, just like jack. + - jack_port_register() and jack_port_unregister() can be called on an + active client so make this thread safe. (#2652) + +# PipeWire 0.3.59 (2022-09-30) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Fix possible wrong samplerate in loopback streams after suspend and + rate switch. + - module-filter-chain can now adapt to the graph samplerate. + - Fix some potential stuttering and crackling in pulse-server. + - Add Bluetooth LE support. This requires experimental kernel and bluez + support. + - The ALSA plugin has more options to control the buffer size. This can + be used to work around high latency in davinci resolve. + - Many bugfixes and improvements. + + +## PipeWire + - Add audio capture example with volume meter. + - Fix a case where a rate switch would not suspend all the nodes of the + driver first. This could cause wrong samplerates in streams. + - Fix a case where a node would be Paused while still added to the + graph, causing potential crashes. (#2701) + +## Modules + - module-filter-chain and module-loopback now use the resample.prefill + option to avoid buffering extra samples and causing unwanted latency + when resampling is activated. + - module-filter-chain can now adapt to the graph samplerate. + - Improve module-raop to support the ALAC codec as raw PCM. + - Improve RTSP parsing to improve compatibility. + +## Tools + - Fix 100% CPU in pw-cli monitor mode. (#2709) + - spa-acp-tool can now be exited with ctrl-D. + +## SPA + - Various libcamera fixes and improvements. + - Set stride on audioconvert output buffers. + - Make sure we always place the last requested size from the resampler + on the buffers in pw-stream. + - Add resample.prefill option in the resampler to fill the history with + 0 so that we don't have smaller buffers at the start. + - Make sure that when an overflow corrupts a POD, that it will always + stay corrupted. + - Rate limit some ALSA warnings and reduce some unwanted warnings. + - Don't recalculate the audioconverter state for each pause/play. (#2701) + - Fix some POD parsing inconsistencies and potential overflows. + - Add support for Asus Xonar SE. + - Fix Flush command handling. It should not stop playback. (#2726) + - Refactor the peaks function and add some unit tests and optimizations. + - The channelmix has an optimized nXm converter and new unit tests. + - Normalization in the channelmixer was fixed. + +## pulse-server + - The requested latency of record streams was reduced to fix some + stuttering in Teamspeak. (#2702) + - Tweak the max amount of bytes sent to a client. (#2711) (#2715) + - Improve maxlength calculations, this fixes some crackling noise with + high samplerate and channel counts in some players (audacious). + +## Bluetooth + - Merge Bluetooth LE support. + - Make sure we are backward compatible with WirePlumber. + - Fix some HFP and HSP AT command parsing. (#2463) + - Use HFP by default over HSP. + +## ALSA + - Increase max number of periods. + - The parameters handling was improved. There is now an option to set the + buffer-bytes of the ALSA plugin. + - PIPEWIRE_ALSA can now be used as an environment variable to restrict the + plugin formats and buffer size. + +# PipeWire 0.3.58 (2022-09-15) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Fix a regression that could cause audio crackling. + - Fix a regression in RTKit because rlimit was not set correctly. + - JAVA sound applications will now alsa work with the pulseaudio-alsa plugin. + - pw-top will now show the negotiated formats of devices and streams. + - Fix some potential crashes when starting streams. + - The ALSA plugin has had improved timing reporting and poll descriptor + handling that should improve compatibility. + - Many more improvements and bugfixes. + + +## PipeWire + - Avoid scheduling nodes before they are added to the graph. This could + avoid some crashes when scheduling nodes that were not completely + started yet. (#2677) + +## Tools + - pw-top now also shows the negotiated formats of streams and devices. + (#2566) + - pw-top prints microseconds as "us" now to avoid unicode problems. + +## Modules + - Fix compilation with newer lv2. + - Fix setting realtime priority with RTKit, it was not setting rlimit + correctly and RTKit would refuse to change the priority. + - Fix some playback problems with RAOP sink. (#2673) + - Filter chain will now warn when a non-existing control property is + used in the config file. (#2685) + - Filter chain can now handle control port names with ":" in the name. + (#2685) + - The echo-cancel module and interface now has activate/deactivate + functions to make it possible for plugins to reset their state. + +## SPA + - Make sure audioconvert uses the given channelmap and channels for the + volumes, even when not negotiated yet. This makes it possible to change + the volume before the node has been negotiated. + - Refactor the peaks resampler. Fix an error in the SSE code. + - Fix DSD min/max rates, avoid exposing impossible rates. + - Set monitor port buffer size correctly. This could cause some crackling + and hickups. (#2677) + - Make ALSA sequencer port names unique. + +## Pulse-server + - Rework the capture buffer attributes to better match pulseaudio. This + fixes a regression where opening pavucontrol could cause crackling. + (#2671) + - Implement TRIGGER and PREBUF methods. + - Handle clients that send more than the requested amount of data. + PipeWire will now also keep this as extra buffered data like PulseAudio. + This fixes JAVA sound applications when they are running on top of the + PulseAudio ALSA plugin. (#2626,#2674) + - Update the requested amount of bytes more like PulseAudio. Fixes + stuttering after resume with the GStreamer pulseaudio sink. (#2680) + +## ALSA Plugin + - More debug info was added. The time reporting was improved. + - The poll descriptor handling was improved, avoiding some spurious + wakeups. (#1697) + + +# PipeWire 0.3.57 (2022-09-02) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Support masking of conf.d/ files. (#2629) + - Use org.freedesktop.portal.Realtime when available. This does the + correct PID/TID mappings to make realtime also work from flatpaks. + - Fix rate adjustement logic in pulse-tunnel. This would cause + increasing delays and hickups when using tunnels. (#2548) + - Add OPUS as a new vendor codec. Add OPUS-A2DP spec. PipeWire can now + send and reveive OPUS data over bluetooth. + - An AAC decoder was added so that PipeWire can now also function as + an A2DP AAC receiver. + - Fix some issues where the wrong samplerate was used. (#2614) + - Fix rate match for sources. This fixes an error where follower sources + would generate many resync warnings. + - Many more bugfixes and improvements. + + +## PipeWire + - Support masking of conf.d/ files. (#2629) + - Add some more debug info to memfd. + - Improve data-loop invoke method. Also flush pending items. (#2631) + - Add a filter-chain systemd service file than can be used to start + custom filters placed in ~/.conf/pipewire/filter-chain.d/ (#2553) + - Improve triggered timestamps for remote nodes. + - Fix some potential cross compilation problems due to wrong + host_machine. + - Check return values of pw_getrandom(). + +## Tools + - Updates to pw-cli manpages. (#2552) + - Remove the pw-cli dump command. It is mostly implemented as part of + wpctl status, pw-dump, pw-link, pw-top and others. + - Clean up resource in pw-cat correctly on errors. (#2651) + +## Modules + - Fix compilation of AVB on big-endian. Enable AVB only on Linux. + - Use org.freedesktop.portal.Realtime when available. This does the + correct PID/TID mappings to make realtime also work from flatpaks. + - Fix compilation of ROC module when headers are missing. (#2513) + - Improve some error cleanup paths in protocol-native. Improve connect + and disconnect. + - Fix a potential crash in FFT unload in filter-chain. + - Implement PIPEWIRE_NOTIFICATION_FD for notification when the socket + is ready. + - Try to use rtkit if set_nice() fails. + - Fix rate adjustement logic in pulse-tunnel. This would cause + increasing delays and hickups when using tunnels. (#2548) + - Handle disconnect in pulse-tunnel. + +## Bluetooth + - Add OPUS as a new vendor codec. Add OPUS-A2DP spec. PipeWire can now + send and reveive OPUS data over bluetooth. + - An AAC decoder was added so that PipeWire can now also function as + an A2DP AAC receiver. + +## SPA + - Tweak the resampler window function some more. (#2574) + - Improve format convert performance in some fallback cases. + - Fix rounding in format conversion on ARM NEON. + - Fix libcamera build error. (#2575) + - Fix some issues where the wrong samplerate was used. (#2614) + - Don't wait for more samples that can fit in the ringbuffer in ALSA. + - Improve buffer size handling in audioconvert, scale the buffers based + on the rate conversion and make things work with really large rate + conversions as well. + - Add more and better debug for ALSA devices. + - Improve channel mix: Filter FC and LFE when copying from a different + layout. Implement STEREO from FC. Avoid generating REAR from FC in PSD + mode. + - Fix rate match for sources. This fixes an error where follower sources + would generate many resync warnings. + - Improve ALSA format negotiation. If the ALSA node is not running and + there was a previously configured format, close and reopen the device + to enumerate and accept all possible formats again. (#2625). + +## ALSA + - The alsa plugin will now also save the volumes set with the control + API. This saves the volumes set with alsa-mixer, for example. + +## Pulse-server + - Flatpak apps with devices=all (Zoom) will now be granted Manager + permissions. + - Small tweaks to the amount of data sent to clients to work around an + issue in freerdp. + +## JACK + - Clean up the transport correctly when closing a client. (#2569) + - Match context properties in addition to node properties for the jack + client rules. (#2580) + - Make sure to return an error when disconnected from the server. (#2606) + - Fix thread cast problem in jack_client_thread_id(). + - Increase jack_client_name_size() length and make sure we have space for + the \0 byte. + - JACK clients from the same application will be added to the same group + so that they share the quantum and rate. + +# PipeWire 0.3.56 (2022-07-19) + +This is a quick bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - A critical bug that could crash JACK apps was fixed. + - Some more regressions in audiomixer were fixed. This should fix crackling + and stuttering in some cases as well as some channel mapping regressions. + - A bug in the alsa plugin was fixed that could cause stuttering in VMs. + - Bluetooth sources should have improved latency and rate control. + - Many more bugfixes and improvements. + + +## Modules + - An experimental AVB module was added. It can expose PipeWire as an AVB + entity and initiate (broken) streaming between entities. + - module-loopback now handles the cases where the input and output channels + are different without crashing or producing silence. + - The filter-chain module now correctly calculates the output size without + crashing in some cases. It also skips invalid ports instead of crashing. + - Handle and report pthread errors better. + +## SPA + - The resampler qualities were tweaked a little. + - A bug that would sometimes cut off the last part of a buffer was fixed in + the alsa plugin. This could cause broken audio in VMs. (#2536) + - Access to the alsa mixer and devices is now checked more thoroughly. + (#2534) + - The spa-resample tool can now also handle large downsampling rates without + crashing. + - Audioconverter now uses rounding for float to int conversions, which + reduces distortions. Compilation of the c functions was separated and uses + its own optimization flags now. Unit tests were added. (#2543) + - Noise shaping was improved in audioconvert. A new Wannamaker 3 tap shaper + was added. + - Audioconvert now uses a pattern for generating keep alive noise. This + should have much less energy and be even more inaudible. (#2540) + - A channel mapping bug was fixed in audioconvert. Unit tests were added. + - The dsp audio mixer would sometimes not mix enough and cause dropouts. + (#2525) + +## JACK + - A critical bug in the mixer was fixed. It would cause most JACK apps to + segfault at startup. + +## Bluetooth + - A new rate control algorithm was implemented for the sources. + - The media role on HSP/HFP streams is now fixed. + +## Pulse Server + - Add the resampler delay to delay reporting as well. + + +# PipeWire 0.3.55 (2022-07-12) + +This is a quick bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Fix some more critical bugs in the new audioconvert and the queueing + in pw-stream that causes stuttering and hickups. + - HFP hardware volumes are now saved and restored. + - Format conversions and mixing was improved. + - Small bug fixes and improvements. + +## PipeWire + - The queueing in pw-stream was improved with support for buffer prefetch + in async mode. + - Add a pw-filter unit test. + +## tools + - pw-midiplay should now work again after improvements in pw-stream. + +## modules + - The RAOP module was improved to support auth_setup. + - The RAOP module should now handle timing packets better. + - Add some more filter-chain examples. + - The filter-chain now has a separate config file with the boilerplate + settings. The examples are now just config snippets that can be dropped + in .conf.d/ directories, such as the filter-chain.conf.d/ one. + - Start suggesting to use target.object instead of node.target in docs + and examples. + +## SPA + - Use the cosh window again for the resampler. It should now + give better resampler quality. (#2483) + - Rework the mixer functions. They were rewritten for higher precision and + better performance. Add unit tests and benchmarks. + - Improve format conversion for 32bits for avoid errors in clang because + of undefined behaviour at extreme ranges. + - Fix a bug in audioconvert where it would not consume the right + amount of samples when the resampler was disabled. This could cause + skipping and hickups. (#2519) + - Fix bug in audioconvert where it would try to convert the input samples + multiple times, causing strange artifacts when upmixing. + - Be more strict about valid JSON floats. + - device.vendor.id and device.product.id should now always show up in + 0xXXXX format and should not be converted to floats in pw-dump anymore. + - Add triangular dither, add unit tests for noise generation, add some + more optimizations. + +## Bluetooth + - HFP and A2DP now expose different routes and thus can have different + volumes. + - HW Volumes for HFP are now synced better. Volume changes from HW buttons + are now also saved. + +# PipeWire 0.3.54 (2022-07-07) + +This is a quick bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Some critical bugs in the new audioconvert were fixed. The old + adapter had internal buffering that was abused in some places. + - The bluetooth sources were rewritten using a ringbuffer to make them + more reliable to jitter and remove old audioconvert behaviour. + - Many improvements to the audio converter. + - Native DSD128 and up is now supported by pw-dsdplay. + + +## tools + - Support DSD128 to DSD512 as well by scaling the amount of samples + to read per time slice. + +## SPA + - Format conversion is now generated with macros to remove duplication + of code. + - 24bits conversions were rewritten to use the generic conversion + functions. + - Temporary buffers in audioconvert are now made large enough in all + cases. + - Fix draining in audioconvert. This fixes speaker-test. + - Fix the channel remapping. (#2502, #2490) + - Audio conversion constants were tweaked to handle the maximum ranges + and provide lossless conversion between 24bits and floats. + - Vector code and C code are aligned and the unit tests are activated + again. A new lossless conversion test was added. + - Fix an underrun case where the adapter would not ask for more data. + - Fix PROP_INFO for audioconvert. (#2488) + - Use the blackman window again for the resampler, the cosh window has + some bugs that can cause distortion in some cases. (#2483) + - Add more unit tests for audioconvert. Add end-to-end conversion tests. + - Don't leak memory in format converter. + +## pulse-server + - Card properties are now also added to sinks and sources, just like + in pulseaudio. + - Increase the maxlength size to at least 4 times the fragsize to avoid + xruns. + - Fix a race when setting default devices. + +## Bluetooth + - The source was rewritten to use a ringbuffer. This avoids regressions + caused by audioconvert. + +# PipeWire 0.3.53 (2022-06-30) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - The 44.1KHz samplerate was removed again from the defaults, it caused + all kinds of problems with various hardware. + - The ALSA plugin should now be able to deal with unsupported samplerates + and fall back to the nearest supported one. + - The rlimits performance tuning wiki page was updated. Please check + you limits.conf file, the version on the wiki used to give all + processes a -19 nice level instead of just the pipewire daemon. + - The audioconvert plugin was rewritten to be more maintainable and + faster. It also gained support for control ports and dithering with + optional noise shaping. + - An impossible buffering situation is avoided in pulse-server that would + cause some applications (sunshine, ...) to stutter. + + +## PipeWire + - 44.1KHz was removed from the allowed rates again. It caused all kinds + of regressions due to driver bugs and timing issues on HDMI. + +## modules + - filter-chain now does some more error checking and reporting to + avoid some crashes. + - filter-chain now supports more channel layouts for input and output + that does not need to match the plugin layout. + - Format parsing is now more consistent in the modules. + +## Tools + - pw-cli can now also work without readline support. + - pw-cat can now also read multichannel ulaw/alaw/u8/s8. + +## SPA + - The audioconvert plugin was rewritten. This should make it more + maintainable. It also fixed some issues such as CPU spikes in some + cases and crashes in others. The old plugins were removed, for a + code reduction of some 6000 lines. + - The audioconvert plugin now supports control ports, which can be + enabled on nodes in the session manager. This makes it possible to + control audioconvert properties using timed events or midi. + - NoteOn 0-velocity MIDI events are no longer filtered out. This is + a valid event, nodes that can't deal with it should fix it up + themselves. The JACK layer still filters out these events by default + but this can now be configured with a per-client property. + - The running status on midi events is now disabled to match what + JACK does. + - The ALSA plugin will now deal with driver bugs when a driver announces + support for a samplerate but then refuses to use it later. + - The ALSA plugin has been optimized a little for sample IO. + - V4L2 now doesn't error when there are no controls. + - Error handling was improved in the audio converter. + - The audioconvert plugin now supports rectangular dithering and + noise shaping. + - The audioconvert plugin can now insert additional inaudible noise + that can be used to keep some amplifiers alive. (#705) + - The audioconvert format conversion was changed so that it now produces + the full 32 bits range in the C fallback conversion code as well. + - The resampler window function was changed to a cosh() window + function. (#2483) + - Vendor and device id are now in hex. + +## pulse-server + - Tweak the record buffer attributes some more and make sure we don't + end up in impossible buffering situations. Fixes an issue with + distorted sound in sunshine. (#2447) + - Fix a potential crash when updating the client property list. + - Some properties on cards were aligned with pulseaudio. + +## Wiki + - Change "priority" to "nice" in the example limits.conf file. It was + giving a -19 nice level to all processes, not just the pipewire + daemon. + +# PipeWire 0.3.52 (2022-06-09) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Add 44.1KHz to allowed samplerates. The server can now switch by + default between 48KHz and 44.1KHz. + - Streams now allocate less resources. + - Fix some bugs that could make the server crash. + - Bluetooth now supports the LC3plus vendor codec. + - Many bugfixes and improvements. + + +## PipeWire + - Add 44.1KHz to allowed samplerates. + - Avoid setting the locale. + - Avoid use-after-free when destroying a node from spa-node-factory. + - Avoid using reallocarray when not available. + - Set port alias is not otherwise set. + +## Modules + - Improve filter-chain parsing and error reporting. Handle empty + nodes. (#1950) + - Handle destroy of globals and factory in most modules. (#565) + - Add refcounts to client and resources to handle destroy of the + protocol. (#565) + - Handle global node.name in filter-chain and loopback again, use + it to construct unique stream names. + - Avoid a wrapped pw-node in the adapter. This reduces resources + allocated for streams. + - Fix a crash when module-x11-bell was unloaded. (#2392) + - Add a new module-pipe-tunnel that can write/read data from a + UNIX pipe. + +## Tools + - Fix DSD playback again in pw-cat. + - Add -n option to pw-loopback to set node names. + - Add -P option to pw-cat to pass properties to the stream. + - Support stdin/stdout in pw-cat. (#2387) + - pw-dump now also dumps object removal when monitoring. (#2426) + +## SPA + - Avoid duplicate param results in pw-dump for ports. + - Avoid endless loops in audioconvert for badly behaving client. + (#2359) + - Scale max-error in alsa based on quantum and avoid logging a warning + when starting. + - Improve debug of failed format conversion. (#2383) + - Handle offset in the audio dsp mixer inputs and clamp to the max + buffer size. + - Add option to disable locale support for JSON number conversion. + - Add support for Astro A20 Gen2. + - Fix some of the test sources, the flags were not set correctly. + - Add camera location as property in libcamera and let the session manager + Generate a localized description. + - Fix some crashes due to wrong vargar types in v4l2 controls. (#2400) + - Improve ALSA resync behaviour. (#2257) + - Add support for Komplete Audio 6 MK2. + - Improve loop cancel while iterating. + - Try not to mix surround channels and AUX channels. Make card with many + ports look better when not using the Pro Audio profile. + - Vulkan filters were added. + +## Bluetooth + - Add LC3plus vendor codec. + - Handle unsupported indicators better. + - Ensure multiple devices on an adapter use different codecs because one + endpoint can only be used by one device at a time. + - Fix bitpool control as a follower. + - Handle bluetooth errors better. + - Speed up bluetooth connection by only waiting for the profiles + supported by the adapter. + - The dummy AVRCP player is disabled by default because it seems to break + more devices than it fixes. + +## pulse-server + - Add initial stream latency property so that devices can be started + with a resonably accurate latency. + - Fix ringbuffer underrun case. (#2366) + - module-native-protocol-tcp now has a auth-anonymous option to give + full access to the clients. + - Report a node as being moved when it is still moving. This improves + compatibility with pasystray. + - Avoid overallocating message memory. + - Don't export NETWORK nodes in zeroconf. (#2384) + - Fix stride for TrueHD and DTSHD passthrough. (#2284) + - Make sure we don't send too small audio fragments. Fixes capture + from multiple tabs in Chrome. (#2418) + - Rework module handling some more. + - Use the new native module-pipe-tunnel for pipe-sink and pipe-source. + - Implement the STREAM_MOVED message when a stream got moved. (#2407) + - Fix a potential segfault when stopping the server and a TCP module + as still loaded. + +## ALSA + - Add support for updating sw_params at runtime, mostly the min-avail + param. + - Capture and playback nodes are now assumed to use a different clock and + will activate the adaptive resampler when linked. This assumption is + removed in Pro Audio mode. This provide a better experience out of the + box with most devices. + +## JACK + - Fix setting properties with PIPEWIRE_PROPS again. + - Don't use 64 bits atomic operations for sync_timeout. (#1867) + - Cleanup in error cases was improved, avoiding some crashes. (#2394) + +## GStreamer + - Fix pipewiresink in mode=provide. (#1980) + - Share memory into a new buffer in pipewiresrc to avoid buffer corruption. + - Fixes to the source and fd use. + - It is now possible to set client properties as well. (#1573) + +# PipeWire 0.3.51 (2022-04-28) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Improved graph reconfiguration. + - Extra configuration options for streams and filters with config + rules and environment variable. + - Improve module-pulse-tunnel latency, stability and error recovery. + - pw-top, pw-cli and pw-link improvements. + - Fix a channelmixer upmixing clipping issue. + - The ROC module has seen many improvements. + - Many more bugfixes and improvements. + + +## PipeWire + - The graph reconfiguration code was reworked: + * Moved nodes will update the new driver quantum correctly. (#2293) + * Inactive nodes are ignored more. + * Nodes that require a driver are now not scheduled anymore when + they are passive (unused). (#2309) + * Improved performance, the graph is reconfigured with a minimal + amount of changes. + - Method and event argument names were improved. + - A linker garbage collection problem was fixed. (#2292) + - Properties on threads are now implemented. Use common code to + set thread name and add an option to set stack-size. + - Streams and filters always want a driver now. This makes it possible + to just link a playback stream to a capture stream without a driver + and have it work. (#1761). + - Streams and filters can now also have rules in the config file. + - Streams, filters, JACK, ALSA and v4l2 now support PIPEWIRE_PROPS + environment variable to override node properties. + - Add config section extensions. This provides a way for modules to + have specific config to override the default config. + - Handle realloc errors better. + - Improve stream and filter property updates. + +## Modules + - The pulse-tunnel modules has improved latency management and should + now work a lot better. (#2230) + - Module-loopback, module-echo-cancel, module-filter-chain unload the + module when a stream is destroyed. (#1754) + - Biquads in filter-chain now can have more gain (5->20 dB). + - Documentation updates. Most Wiki content was moved to the source code + inline comments. + - Filter-chain now has a builtin delay line filter. (#2320) + - Filter-chain can now parse the config key correctly in all cases. + - The ROC sink and source saw many improvements. roc-source is now a stream + by default that connects to the default sink. Both modules will try to set + a graph rate. Both modules have an option to select the FEC mode. + The ROC source has lower latency now. (#2331) + - Handle realloc errors better. + +## tools + - pw-cat does not have --list-targets anymore, use one of the more + advanced and less buggy tools such as wpctl or pw-cli to list + sinks and sources. + - pw-top has seen many improvements. + * It now has some timeouts to reset the node values to their default + state when unused. + * The man page was improved. + * Invalid timings and errors are displayed in a better way. + - pw-cli and pw-link can now create links between all ports of given nodes. + - pw-cat can now save to other file formats than wav, based on the extension + of the filename. + +## SPA + - The resampler now uses a different internal method for draining. It can + now also handle 0 size buffers as input without draining. + - The channelmixer now uses the front channel averages for FC and LFE. + This avoids clipping and results in much better upmixing. + - ALSA should now work again on 32 bits. (#2271) + - The JSON parser now converts escaped unicode correctly to UTF8. + +## bluetooth + - Codec switch improvements when the device is disconnected. (#2334) + +## pulse-server + - There is a new module-roc-sink-input module, the the PulseAudio equivalent. + - The ROC source and sink-input module now have a much lower latency. + - The ROC module now has an option to select FEC mode. + - Playback and record rate adjustements should work now. (#1159) + +## JACK + - Remove some useless pthread attributes. This makes JACK work in QEMU with + sandboxing enabled. (#2297) + - The buffer_size callback is now only called when something has changed + since the last process() callback or get_buffer_size() method. This + fixes a GStreamer issue and is more in line with what JACK does. (#2324) + - Fix a potential deadlock when the process thread is doing IPC and the + IPC thread is blocking on the data thread. + - Allocation errors in metadata are handled better. + +# PipeWire 0.3.50 (2022-04-13) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - pw-stream can now report more timing information and can suggest + the optimal number of samples to queue for playback. + - pw-dot now works again.. + - module-pulse-tunnel latency was improved. + - WINE applications using the JACK backend should no longer crash. + - The channelmixer defaults are improved and the muffled sound when + playing back 5.1 and 7.1 material has been fixed. + - Many fixes and improvements. + + +## PipeWire + - pw-stream now places a suggested amount of samples in the pw-buffer + for playback. This allows you to remove some places where + spa_io_rate_match was needed to get this information. + - pw-stream has new API to request a timing update. New fields are + added in the timing info, such as number of buffered samples in + the resampler and the number of queued and dequeued buffers. + - pw-stream has support for double controls now. More controls are + exposed such as the Rate control to do adaptive resampling. + - The thread-utils object was moved to the context to avoid some + concurrent use cases that caused crashes. (#2252) + - Deactivating an exported node/stream will now remove the node from + the data-thread immediately so that the process function will not + be called anymore and resources can be safely freed. This could + fix some of the last remaining crashes when streams are stopped. + - PipeWire will now fail to load a module that tries to register + the same export type twice instead of silently doing the wrong + thing. (#2281) + +## Modules + - Many modules now use the NODE_WANT_DRIVER instead of the + pipewire.dummy NODE_GROUP property. This makes it possible to use + them with any other driver and can avoid resampling in some + cases. + - module-pulse-tunnel now uses an adaptive resampler to keep the + latency under control. Latency should be much better than before + and stay constant even when there are network delays. + - There is now an option for packages to disable building the RTKit + module, which is still built by default for backwards compatibility + reasons. + - A leak was fixed in filter-chain. (#2220) + - Module node names are now made more unique with the pid. + +## tools + - pw-cat verbose output has been improved. + - pw-link now has a man page. (#2263) + - pw-reserve now has an -r option to make it issue a RequestRelease + command on the owner of the device. This makes it possible to ask + WirePlumber to close and release a device. + - Fix pw-dot again. It didn't work anymore because of stray done + events that were emitted to notify the client of object serials. + (#2253) + +## SPA + - The channelmixer now has PSD upmixing enabled again. We used the + simple upmixing in the previous release but that just sounds too + aweful to be a good default. (#861) and (#2219) + - The channelmixer will not upmix FC and LFE anymore when upmixing is + explicitly disabled. (#2266) + - The channelmixer will only lowpass filter FC and LFE channels when + they were upmixed. (#2280) + - The defaults of the channelmixer were tweaked a little. There is now + a little bit more bass in the LFE channel and more high fequencies + in the FC channel when upmixing. Also the channel widening has been + disabled by default. + - Locale independent float parsing now uses a more portable solution + with uselocale. + - ALSA will now only allocate a buffer size big enough to hold 4 + times the quantum limit instead of as large as possible. + +## pulse-server + - Internal cleanups in handling of modules. + - A quirk to force s16 sample formats for teams-insider has been added. + +## JACK + - The data-loop is now started in activate and stopped in deactivate. + This makes the data-loop respect any custom thread functions you + configure. This also makes WINE apps using the JACK backend work. + (#1495). + - Port sorting was improved/fixed. (#2260) + +# PipeWire 0.3.49 (2022-03-29) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Sample rate switching should work again. + - pw-dot can now use the output of pw-dump to render a graph. + - Bluetooth A2DP streaming was improved that would reduce stuttering on + some devices. + - A JACK bug was fixed that would sometimes make it impossible to add more + tracks in Ardour. (#1714) + - Many bugfixes and improvements. + +## PipeWire + - Fix a potential crash when NULL params were configured. + - Add some simple functional tests to avoid some recent regressions. Improve + the test framework for this as well. + - Improvements to the poll loop to avoid some use-after-free scenarios. + - Fix samplerate switching again. + - setlocale is not called anymore from the pipewire library. This should be + called by the application. (#2223) + - pw_init() and pw_deinit() can now be nested and called multiple times. + - pw_stream will now report the resampler delay in the pw_time.queued field. + +## modules + - module-filter-chain now supports arbitrary many properties and will use + property hints to assign them the right type. + - The ROC modules now accept a sink/source_properties parameter. + - The module-rt can now also be built without RT-Kit support. + - module-echo-cancel can now use a fraction to specify the delay for more + precise control. + +## SPA + - The channelmixer will now do upmixing by default and will not use + normalization. It will also use a simple upmixing algorithm that duplicates + channels by default. A more interesting upmix method is also available (PSD) + but needs to be enabled manually. (#861) + - Add SSE optimized (de)interleave functions for 32 bits samples with and + without byteswap. + - JSON parsing of empty strings will now give an invalid number instead of + 0. + - JSON numbers are now parsed and serialized in a locale independent way so + that , and . are not mixed up. + - The resampler will now report the resample delay and queued samples as the + extra delay. + +## tools + - pw-cat will read more dsf files correctly and will not crash at the end. + - pw-top now has a man page. + - pw-dot can now use the output of pw-dump to render a graph. + +## bluetooth + - Improve interactions with oFono. + - Fix recovery with slow connections. + - Improve frame size of AptX-ll. + - A2DP can now use any quantum and will flush packets in smaller chunks + when needed to adapt. This improves stuttering in some cases. + +## pulse-server + - The server configuration can now be placed in pulse.properties section, + which also makes it possible to have custom overrides. + - Implement FIX_ flags for capture as well. + - Small fixes and improvements in module loading. + +## JACK + - Clear the last error before executing a new action or else we could end up + with error from a previous action. This causes some problems in Ardour where + adding a track would fail after some time. (#1714) + + +# PipeWire 0.3.48 (2022-03-03) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Fix IEC958 passthrough again. + - Fix pulse-server crashes when playing a sample. + - Support for more a more advanced upmixing algorithm. + - filter-chain now supports arbitrary many ports. + - Fix multichannel support in WINE. (with new WirePlumber). + - Many bugfixes and improvements. + + +## PipeWire + - The work queue is now created in the context so we can fail early and + avoid further error checking in various places. + - Fix a potential use after free with threaded loops. + - The protocol now has a message footer. This is used to pass around + global state such as the last registered object serial number. This can + be used to detect when a client tries to bind to old (but reused) + object ids. This avoids some races in the session manager but also + when binding objects. + - The zero-denormals CPU flag is now not touched anymore unless explicitly + selected by the user. Denormals are avoided in filter-chain now in + software. If the zero-denormals are now only configured in the data + thread. This should fix issues with luajit. (#2160) + - Configuration parsing will not actually fail on errors. + - pw-top now correctly clips unicode characters. + - Many places now use a dynamic POD builder to support arbitrary large + property sets. + - pw-stream now support PropInfo parameters so that they can announce + custom properties. + - Serial number are now also set on metadata and session-manager objects. + +## SPA + - audioadapter is now smarter when trying to fixate the format. It will + use the PortConfig format to fill in any wildcards. This results in + the least amount of conversions when the stream can handle it. It also + is part of a fix (also requires a session manager fix) for WINE + multichannel support. (#876). + - Fix 5.1 to 2 channels mixing. It was using the volume of the stereo + pair on all channels. + - Fix some weird volume issues when a source is capturing and + channelmixing. + - Add stereo to 7.1 upmixing. + - The channelmix parameters can be changed at runtime now. + - Many improvements to the upmixing algorithms. Rear channels are now + constructed from the ambient sound and can have delay and phase shift + applied to them to improve spacialization. The stereo channels can + be filtered so that the dialog is more concentrated in the center + channel. (#861) + +## modules + - Module X11 bell received cleanups and improvements. + - The module now has a private method to schedule unload later. This + simplifies cleanup in many modules. + - module-filter-chain now handles arbitrary many ports and control + ports. (#2179) + - Fix a bug in RAOP where it was reading from the wrong port. (#2183) + +## pulse-server + - Nodes with the DONT_MOVE property should fail with -EINVAL when + they are moved. + - Fix a segfault when playing a sample. (#2151) + - The _FIX flags in pulse-server also now ignore the configured + sample format, just like pulseaudio does. (#876) + - Fix IEC958 passthrough again. It got accidentally broken since + 0.3.45 with a fix for another issue. (#1442) + - Fix module-null-sink device.description. (#2166) + +## Bluetooth + - Don't try to connect HSP/HFP when no backend is available. + + +# PipeWire 0.3.47 (2022-02-18) + +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 + - Fixes a bug in pulse-server that caused cached notifications + to play multiple times. (#2142) + - Removed check and warnings to catch leaked listeners on the + proxy. This might access invalid memory and cause infinite + loops in older wireplumber. + +# PipeWire 0.3.46 (2022-02-17) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Fix a critical bug in pipewire-pulse buffer size handling that made some + apps (MuseScore, ... ) stutter. + - Fix a critical bug where devices would not show when the kernel was + compiled without VERBOSE_PROCSFS. + - JACK clients will now use lock-quantum by default. This makes sure that + all dynamic quantum changes are disabled while a JACK app is running. + The only way to force a quantum chance is through a JACK app or with + the metadata. + - Almost all limits on number of ports, clients and nodes are removed. + - A Dummy fallback sink is now automatically created when there are no + other sinks. This avoids stalling browsers. + - Sound sharing with Zoom should work better. A new WirePlumber release + might be required. + - Many more fixes and improvements. + + +## PipeWire + - Update docs with new config overrides. + - The rule matching logic was moved to config and code is now shared with + pulse-server and JACK. + - Add new Romanian translation. + - When a quantum is forced with metadata, any node that asked to lock-quantum + is ignored so that the quantum change can happen. + - Fix a bug where a mixer was removed twice, leading to potential memory + corruption. + - The port limits on nodes and filters are now removed. Some code was + simplified. + - Fix a potential leak because listeners where removed while they could be + emitted. + - Improve context.exec and avoid zombie processes. + +## Modules + - The RAOP module now has a default latency of 2 seconds, like PulseAudio. + - The echo-cancel module now uses the plugin loader to load the backends. + This makes it possible to add custom, out of tree, echo cancel plugins. + +## Tools + - Improve help of pw-link. + - Output to stdout and error to stderr. Use setlinebuf for stdout to improve + piping between apps. (#2110) + +## SPA + - Improve removing sources when dispatching. Also improve performance now + that a destroy loop can be removed. (#2114) + - Fix an fd leak in the logger when logging to a file. + - Improve loop enter/leave checks and support recursive loops. + +## pulse-server + - Clamp various buffer attributes to the max length. Fixes some issues + with various applications. (#2100) + - Module properties are now remapped correctly from their pulseaudio variant + to the PipeWire ones. + - Fix module index in introspect. Use the right index when loaded from our + internal modules. (#2101) + - Improve argument parsing and node.description. (#2086) + - The sink-index should now be filled in correctly when playing a sample. + (#2129) + - module-always-sink is now implemented and loaded by default. (#1838) + - Add support for loading some modules only once. + - Module load and unload now does extra sync to make it appear synchronous, + like in PulseAudio. This improves sounds sharing in Zoom. + +## ALSA + - Fix critial bug where alsa devices would not show when the kernel was + compiled without VERBOSE_PROCFS. + - Some corner cases were fixed in the ALSA timing code. When the capture node + is follower, it will now not try to read too much data and xrun but it will + instead produce a cycle of silence. + - Various fixes and improvements to make ALSA devices resync to the driver + more quickly and accurately. + +## JACK + - Add an option to name the defauld device as `system` to improve + compatibility with some applications, + - Use lock-quantum by default. This makes sure that all dynamic quantum + changes are disabled while a JACK app is running. The only way to force + a quantum chance is through a JACK app or with the metadata. + - It is now possible to do IPC calls from the data thread. Note that this + is a very bad idea but required for compatibility with JACK2. + +## GStreamer + - GStreamer sink will now set a default channelmap to make it possible to + remap to the channel layout of the device. + +# PipeWire 0.3.45 (2022-02-03) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Zoom, telegram and other apps should be able to play sound again. + - Implement a better way to force and lock JACK buffersize. + - Default sink and source names and properties are improved. + - The config loader can now load and merge fragments in conf.d directories + for easier user configuration of config files. + - Many small bug fixes and improvements. + +## PipeWire + - pw-cli can now also send Commands to nodes. This can be used to Suspend + a device, for example. + - The eventfd was removed from loops and invoke is now used to stop the loop, + this saves an fd. + - New Alpine CI target to test musl builds, various build fixes. + - Add force-quantum and force-rate properties. + - The config loader can now load and merge fragments in conf.d directories. + (#207) + - resource error methods can be called without a resource and then just + log an error message. + - link-factory can now also work from the config. (#2095) + +## modules + - module-simple-protocol has better argument parsing and can handle + channelmap now. (#2068) It's also possible to configure latency and + rate. + - The native protocol now does extra checks for invalid data. (#2070) + +## ALSA + - TI2902 chips as found in various Behringer cards should have inputs + again. + - Better handling of busy devices in udev, retry when the inotify close + event is emited. + +## SPA + - plugins now handle alignment properly and only expect the max alignment + required for the CPU. (#2074) + +## Bluetooth + - SBC-XQ is now enabled for the JBL Endurance RUN BT headset. + - Support for non-hexadecimal XAPL version strings to improve compatibility. + - Use HCI commands again to probe the adapter msbc capability. This improves + compatibility with some adapters. (#2030) + - Set the right startup volume. + - Better A2DP source idle handling. + - Fix a timer bug in SCO sink that could cause busy looping. + +## pulse-server + - A playback issue when the tlength > maxlength was fixed. (#2069) This + affected Zoom and other applications. + - The STREAM_BUFFER_ATTR command is now implemented. + - Module names are improved. (#2076) + - Many small fixes and improvements. + - Fix a pavucontrol crash with invalid channels. (#1442) + +## JACK + - Use the new force-quantum and force-rate properties in the JACK API to + switch quantum and ensure it can't change for the lifetime of the JACK + app. (#2079) + +# PipeWire 0.3.44 (2022-01-27) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - It is now possible to run a minimal PipeWire server without a session + manager, enough to run JACK clients. + - The maximum buffer size is now configurable and can be larger than + the previously hardcoded limit of 8192 samples. When using high sample + rates, the larger buffer size can avoid xruns. + - The default maximum latency was reduced from 170ms to 42ms. This should + improve overall latency for application that ask for a large latency, + such as notifications. + - Better JACK compatibility. Patchbays should now get less confused about + ports appearing and disappearing. + - Fix some bluetooth crashes. + - Fix some races in ALSA device detection. + - Many bug fixes and improvements all over the place. + +## PipeWire + - Bump the meson requirement to 0.59.0. + - pw-top now reports correct times for filter-chain and loopback. + - max-quantum is now also scaled with the rate. A new quantum-limit + property was added as a hard limit for the quantum. This makes it + possible to configure for larger than 8192 buffer sizes. Note + than many JACK applications have a hardcoded 8192 limit. (#1931) + - The max-quantum was reduced to 2048, This gives a 42ms default + latency. (#1908) + - pw-filter can now return a NULL buffer from _get_dsp_buffer(). + - Add a PIPEWIRE_RATE and PIPEWIRE_QUANTUM env variable to set the + graph rate and the graph quantum and rate respectively. + - Fix a potential file descriptor leak in the connection. + - A new minimal.conf file was added to demonstrate a static setup + of a daemon that doesn't require a session manager and is able to + run JACK applicaions. + - Nice levels are now only changed on the servers, not the clients. + - Add an option to suspend nodes when idle. + - Make it possible to avoid quantum and rate changes with + pw-metadata. This is essential in a locked down system. + - Handle mixer port errors better and fail to create the link instead + of silently not working. + - Nodes that are moved to a driver now have all the linked nodes moved + as well. This makes it possible to run some graphs without a + driver, such as paplay -> zita-j2n. + - pw-cli and pw-dump can now also list objects by name, serial and + object.path using glob style pattern matching. + + +## modules + - filter-chain can now also configure parameters by index. + - Fix the client name of module-protocol-simple. (#2017) + - module-rtkit was merged into module-rt. This makes it easier to + ship a default config that works on more systems by default. + - module-adapter can now configure the adapter node from the config. + Previously, this was a task only performed by the session manager. + - module-metadata can now also create metadata object from the + config file. + - The ROC module should now work again. (#2045) + - An X11-bell module was added to handle X11 bell events. (#1668) + - filter-chain and loopback modules now have better unique default + names for the streams, which makes it possible to save and restore + their volumes independently. (#1983) + - module-echo-cancel now has properties to control the delay and + buffer size. + +## ALSA + - The monitor names are now correctly parsed. + - The default period size for batch devices is limited now to avoid + large latency. + - The unused min/max-latency properties were removed. + - Internal latency is now also configurable with params at runtime. + - The udev rule for TI2902 was removed because it causes problems. + - Fix a race where some devices would sometimes be missing. (#2046) + - Add some more timeouts to work around a race in udev device + permission changes when switching VTs. + +## SPA + - Fix potential infinite loop in audioconvert. + - The spa-resample tools can now also use optimized implementations. + - Fix a potential crash in resampler. (#1994) + - audioconvert can now also handle F64 formats. (#1990) + - The channelmixer now does normalization by default to avoid clipping + when downmixing is active. + - The channelmixer will now generate LFE channels when the lfe_cutoff + frequency is set, even when upmix is disabled. + - The channelmixer will now always generate FC when the target has it. + - Adapter now reports latency correctly, even after linking the monitor + ports. + - Reduce memory usage and preallocated memory in some of the + audioconvert nodes. + - Many properties are now exposed in adapter, such as the resample + quality. + - The resampler and channelmixer can now be disabled. + +## V4L2 + - pw-v4l2 now also works for ffplay. (#2029) + - Take product names from udev now that the kernel returns a generic + name. + +## JACK + - The jack pkgconfig file now has the `jack_implementation=pipewire` + variable to be able to distinguish jack implementations. (#1666) + - jconvolver now starts correctly again. (#1989) + - The object.serial is now used for the port_id. This makes it easier + to track old objects in the cache. + - Add a dummy jacknet implementation. (#2043) + - A bug in the port allocation was fixed that would make it impossible + to allocate ports at some point. (#1714) + +## Bluetooth + - Bluetooth profiles are now saved properly by the session manager. + - Improved profile detections, increased timeouts for slow devices. + - Implement HFP call indicator for improved compatibility. + - Handle the case where bluez does not set the adapter or address + properties on the device instead of crashing. + - Improved support for setting the profile from the session manager. + +## pulse-server + - Monitor sources now have the device.class=monitor for better + compatibility. + - Behaviour after seeking is improved. The algorithm for requesting + bytes from the client was simplified and improved. (#1981) + - module-ladspa-sink implements the control argument now. (#1987) + - A potential memory leak in the message queue was fixed. (#1840) + - Use the object.serial for the pulseaudio object index. The index is + not supposed to be reused and this would cause problems with some + clients. + - Servers should now again be able to listen in IPv4. (#2047) + - module-x11-bell was added. (#1668) + - There is now support for per-application quirks and properties in + the pipewire-pulse.conf file. Per-application latency and buffering + properties can also be configured. + - Fix a regression in telegram sounds not playing. + +# PipeWire 0.3.43 (2022-01-05) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Flatpak apps such as Ardour can now remove links again. + - Many fixes to pulse-server. Memory usage should be improved. Some + crashes are fixed. Underrun handling should work better. Better + compatibility with GStreamer based applications after seeking. + - Many of the samplerate and quantum changes bugs in previous releases + were fixed. This fixes some issues where the microphone would fail + to work. + - Many more small fixes and improvements all over the place. + +## PipeWire + - Quantum and rate changes are now applied immediately when the driver + is idle. This avoids setting the driver in the previous samplerate. + (#1913) + - Object destruction now does not need write permissions anymore. This + restriction needs some more work. (#1920) + - When we reposition, start a sync operation. This fixes a problem + in Ardour when seeking. (#1907) + - Require meson 0.56.0 + - Make the align property in BUFFER_PARAM optional. We now only set this + if the plugin has specific requirements and we default to the CPU + largest alignment requirement. + - pw-record will now also list monitors and streams as possible targets. + +## modules + - Improve LV2 plugin support in filter-chain. Add support for Worker and + Options. + - The loopback module now has a unique media.name to make it possible + for the session manager to restore unique volume settings. + +## SPA + - Improve sample rate for EAC3 streams, some clients scale it while + others don't so use some heuristics to make things work better. + (#1902) + - Allocate ports dynamically in audioconvert. This avoids using larger + memory blocks of preallocated memory that confuses the allocator. + (#1840) + +## ALSA + - Merge the latest pulseaudio UCM improvements. (#1849) + - Fixes for selecting the sample rate. (#1892) + - Improve latency on USB devices by scaling the period size based on + the desired quantum when the device is opened. + - Add api.alsa.period-num to configure the amount of periods to use + in the device. Some devices have lower latency when a small value + is forced. (#1473) + - Allow multi-rate by default. In previous versions cards could only + be opened in one samplerate to avoid bugs in pre 5.16 kernels. This + however caused other problems so the default was removed. + - Fix a bug where a card was not freed correctly. + - Fix a bug in the alsa boundary check that could hang the alsa-plugin + for a long time. + - The ALSA plugin now has a parameter to configure the allowed + samplerates. + +## JACK + - Improve handling of monitor nodes. + +## Bluetooth + - Codecs now have a priority. This should improve codec selection. + +## pulse-server + - The stream FIX_ flags are now implemented. (#1912) + - Improve flushing and draining behaviour. Short samples will now + play correctly. (#1549) + - Fix a crash when enumerating the formats. (#1928) + - Track quantum changes and update the amount of required buffering + accordingly. This improves forced quantum handling. (#1930) + - Improve handling of channels > 32. + - Handle the case where a module is destroyed before it could be + completely loaded. + - Fixes some issues when samples were removed while they were playing. + (#1953) + - Fix some issues in module-zeroconf-publish. + - Fix some memory leaks in module-roc. + - Add command access control. This avoids execution of commands without + proper authentication. + +# PipeWire 0.3.42 (2021-12-16) + +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 + - Fixes a bug in pulse-server underrun handling that broke qemu + and orca. + - A fix was added to pulse-server to handle quantum changes + gracefully. + - Fix module-echo-cancel again. + - Fix a bug where the bluetooth headset capture was producing + noise. + + +# PipeWire 0.3.41 (2021-12-13) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Improved compatibility for flatpaks. Flatpaks with newer PipeWire + version can connect to an older server in all cases. + - A new RAOP module was added to stream to Apple Airplay devices. + - OBS can now capture from the monitor devices again when using + WirePlumber. + - Improved JACK compatibility. Improved stability in Carla and Ardour + when changing buffer size. Improved latency calculations and + playback latency in Ardour. + - Improved pulse-server handling of underruns and buffer size changes. + - Many bugfixes and improvements. + + +## PipeWire + - The systemd service files now have better names. + - client.access permission checks are improved. + - Fix some memory leaks in error paths. + - Objects now have a global serial number that is unique for the + lifetime of the server. + - Make clock.rate, clock.allowed-rates and clock.quantum + runtime tunable parameters with the settings metadata. + - Add some additional memory checks in client-node to avoid + sending invalid memory to clients. (#1859) + - Improve buffer memory allocation. If one of the nodes is a + remote node, ensure we only use memory that can be shared. + - Version checks when binding to objects is removed. This means + that newer clients can now bind to older servers, which is + a typical case for a flatpak. + - A bug in the latency calculations was fixed where it would in + some cases report the wrong minumum latency. + +## modules + - module-echo-cancel has voice-detection enabled now. + - module-raop-sink and module-raop-discover to stream audio to + an Apple Airplay device. + - module-filter-chain now has preliminary support for LV2 + plugins. + +## SPA + - The audio resampler now has improved buffer size calculations. + In some cases it was too small and would cause distortions. + - More checks are done when doing volume changes so that the + channelmap is correct. + - Audioadapter now exposes most config options with params so that + they can be adjusted at runtime. + - The resampler can now calculate the expected input buffer size + before receiving the first buffer, which avoids some confusion + when starting streams. + - Support was added for some 10bit video formats. + - MONO channel handling was improved. + - Most plugins now set a clock name and this is configurable where + it makes sense. The clock.system.monotonic clock name is used + for most plugins that use the system clock for timing. + +## pulse-server + - implement module-raop-discover + - Use STREAM_CAPTURE_SINK property when capturing from a monitor + source to better inform the session manager. This fixes some + issues where OBS would capture from the microphone instead of + the output monitor. + - Limit the amount of cache messages to 16MB and don't add large + memory blocks to the cache. This should fix some excessive + memory usage that people reported. + - Fix a potential memory leak when cleaning up a client. + - Do some additional checks to avoid buffer overruns. + - Improve recovery from underruns better. (#1857) This improves + seeking in gnome-music. + - Improve recovery when the quantum is forced larger that the + stream configured latency. + - The prebuf state is now handled correctly. + +## JACK + - A per type object cache is now implemented. This ensures that + port objects remain valid for a longer time because many + JACK applications inspect objects after they are destroyed. + This improves catia/carla compatibility. + - Recompute the latencies when the buffer-size changes. Fix some + cases where we would end up with negative latencies. + - Handle regcomp errors to avoid some crashes later. + - Latency calculations are improved a lot. + - More care is taken to not call a process callback while a buffer + size change is pending. This fixes some crashes in Carla, which + expect that all clients are paused when one handles the buffersize + callback. + - Loopback links to a client are now handled correctly and without + latency. This fixes playback latency in ardour6 (#1839) + +## ALSA + - ALSA devices now keep track of the samplerate of the card and + ensure that all PCM use the same rate. This is a workaround for + a kernel bug that is fixed in 5.16. + - Refactor the ALSA plugin a little. + - The ALSA plugin now reports correct delay for a capture PCM. (#1697) + - The ALSA nodes now expose all config options with params that can be + changed at runtime. + - The ALSA node has a configurable clock name. Adaptive resampling to + match clock rates is avoided when the driver has the same clock + name as the ALSA node. This can be used to link alsa devices together + with a word clock. + +# PipeWire 0.3.40 (2021-11-11) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - Producers and consumers can now incrementally negotiate a format + by narrowing down the options. This can be used to select an optimal + combination of format and modifiers. + - Driver nodes such as the consumer of a headless compositor can now + throttle the speed based on a new trigger_done event. + - Headless compositors can now signal a damage event to consumers + to start the processing of the graph. + - Compatibility improvements in JACK. + - Draining and resuming is now working correctly in pulse and alsa. + - Many bugfixes and improvements. + + +## PipeWire + - Many BSD fixes. + - clang compilation fixes. + - Fix map implementation on big-endian machines. + - Improve tracking of param changes in pw-stream. + - Add support for renegotiation. With this change, producer and + consumer can incrementally renegotiate a format until it is fixed. + This will be used to do complex negotiation of DRM modifiers. + (#1732). + - Add a trigger-done event in the stream. This can be used to know + when processing of the complete graph has finished after issuing + a trigger_process() and it can be used to throttle processing. + - Add a RequestProcess node event and command. This can be used by + non-driver nodes to suggest to a driver to start processing. One + case is where a compositor can emit this event as a result of a + screen update to let the headless compositor start an update. + - Fix zeroconf sample format. + - pw-mon outputs to stderr now and has colors. + +## SPA + - Fix compilation on ppc and armv7. + - Fix port type check for ALSA seq midi ports so that they are not + falsely listed as hardware. + - Fix crash when running SSE code on unsupported HW. (#1775) + - The libcamera plugin was rewritten. It now supports hotplug, + format enumeration and an easier to read codebase. + - Fix compatibility some more for cards with 64 channels. + +## pulse-server + - Flush data in pause in combine-sink to avoid stray audio fragments. + - Fix a race where not all objects were removed correctly. + - The latency calculations and setup was improved to more closely + match pulseaudio behaviour. PULSE_LATENCY_MSEC should now resemble + pulseaudio more closely. (#1769) + - The drained reply is now sent only once and new data will be + accepted once the drain completes. + - Fix a potential crasher bug where the stream started processing + before the setup was completed. + - The server will now drop the client connections when the pipewire + connection is lost. + +## JACK + - Rework the jack_port_get_buffer() method to return the same memory + when called multiple times during the process() callback. This makes + things work on a new Hydrogen. (#1748) + - Add an option to disable showing the monitor ports. + - JACK ports are now sorted per node/client and port_id. This should + more closely match JACK behaviour and avoid random port order. + (#1780) + +## v4l2 + - Fix v4l2 LD_PRELOAD script. + - Make sure we destroy the proxy when the global is destroyed. + +## ALSA + - _prepare should exit the draining state. (#1467) + - Fix the precision of the _delay function by taking into account + the amount of queued samples are the correct samplerate. + + +# PipeWire 0.3.39 (2021-10-21) + +This is a bugfix release that is API and ABI compatible with previous +0.3.x releases. + +## Highlights + - media-session is now moved into a separate module to speed up its + deprecation in favour of WirePlumber. + - There is now an LD_PRELOAD v4l2 emulation library to run some existing + v4l2 applications on top of PipeWire. + - Filter-chains should now flush out remaining samples when paused. There + is now also the option to let a filter-chain drain so that long filters + such as reverbs can fade out properly. + - Stability and compatibility improvements in JACK apps. + - Better Bluetooth compatibility with more devices. + - libcamera plugin improvements. + - Many bugfixes and improvements all over the map. + + +## PipeWire + - Fix compilation on ARM. + - Log topics are added to most modules. + - Documentation updates. Many improvements to the layout. Reorganisation + of the modules and groups. + - Share a work queue for all links and nodes. This removes the need for + a separate eventfd per link and per node. + - Catch errors in the map implementation. + - Add option to compile without dbus support. + - Fix biquad frequency. It was using the wrong sample rate. + - Fix a potential crash when destroying nodes, in some cases the node + would not be deactivated properly. + - Add some more helpers for dealing with properties and their values. + - Implement flush and reset on virtual sinks/sources. + - Make it possible to let virtual sinks/filter-chains run and drain + after being idle. + - Fix a bug where the quantum could exceed the maximum because it was + scaled with the sample rate. + - Fix channel_map parsing in module-zeroconf-discover so that the remote + channel map is used. + - pw-stream errors emitted on the proxy are reported but not fatal + any more. They are usually used by the session manager to signal status + to the client but otherwise does not really cause an error on the + client. + - Links now also store the output and input node id in the global + properties so that applications can parse and use them regardless of + how the link was made. (#1723) + - pw-stream and pw-filter now have an event to notify commands. + - The echo-cancel module can now operate on larger quantums. + - pw-cat now uses the right metadata to find the default devices in + --list-targets. + +## media-session + - Don't try to remix unpositioned streams when linking. This ensures + that linking to Pro-Audio nodes does not remix the stream channels + but links them as they are, one by one. + - media-session is now moved to a separate module to accelerate its + deprecation in favour of WirePlumber. + +## SPA + - Many libcamera improvements, handle MemFd buffers, handle errors + gracefully. + - Small improvements to make interface fall-backs easier to implement. + - Add support to enable flush-to-zero and denormals-are-zero to avoid + high CPU usage when dealing with denormals. + - AUX13 channels are no longer reported as AUX12. (#1727) + - Devices with more than 32 channels in Pro-Audio mode now only + uses AUX channels. + - Improve windowing function of the resampler to reduce aliasing and + improve the quality. + +## JACK + - Port connect callbacks will not only be emitted after the port + has negotiated buffers, which improves compatibility with + applications that try to use the port right after the callback + (jack_midi_latency_test). + - Fix crash when midi ports were removed and being monitored, like + in Ardour. + +## pulse-server + - The pulse tunnel will now use the specified format/rate/channels. + - Improve lookup of default source and fall back to the monitors when + no sources are available. + - Mark some nodes as network nodes so that we can set the NETWORK flag + correctly. + +## GStreamer + - The GStreamer element not releases the buffers in the stream again in + all cases so that they can be reused by other streams. + +## v4l2 + - Add a v4l2 LD_PRELOAD library to emulate v4l2 system calls on top of + PipeWire. This is tested with firefox and GStreamer and is known to + not work with Chrome. + +## Bluetooth + - AAC compatibility improvements. + - Disable hardware volume for "Tribit MAXSound Plus" and + "SoundCore mini". + - Add quirk to disable faststream. Disable faststream on "FiiO BTR3". + - Add a dummy AVRCP player to improve compatibility with some devices. + + +# 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. + + +# 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 |