# 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.

Older versions:


# 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.
