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


Older versions:

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