# PipeWire 0.3.66 (2023-02-16)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Fix a regression in the pulseaudio module-combine-stream because the new
    module-combine-stream was not installed.
  - PipeWire can now generate a limits.d config file with our recommended
    settings for priorities and memlock.


## PipeWire
  - Avoid rate switches when the graph is idle.
  - The rate selection algorithm was improved. This ensures minimal performance
    and quality loss when resampling.
  - The default min.quantum was set to 32 again after it got erronously changed
    to (the too low) 16 in version 0.3.45.
  - Fix compilation issues with rust bindings because of macros in defines.
    Work around it for now. (#2952)
  - Invalid file mappings are now refused (#2617 #2914 #3007)
  - Modules, exec and objects can now be loaded depending on conditions. One
    example is the X11-bell module that can now be disabled with a custom
    property override.
  - Filter now also supports _trigger_process() to drive the graph.
  - TID is now added to the journald log.
  - PipeWire generates and installs */etc/security/limits.d/25-pw-rlimits.conf*
    that by default contains project's recommended settings. Creation of the
    pipewire group is left to the distro or user ( `groupadd -r pipewire` ).
    See the rlimits-* Meson options for controlling this behavior.
  - Additionally there is now by default disabled Meson option that will
    install */etc/security/limits.d/20-pw-defaults.conf* with the current Linux
    default memlock value. Distros with only kernels >=5.16 or always using
    systemd v251 or newer do not need this. But all other builds should set the
    `-Dpam-defaults-install=true` Meson option to ensure that the memlock value
    is always large enough. Thanks to Rickie Schroeder for pointing out that
    the default Linux memlock value has been somewhat recently increased.

## modules
  - Install module-combine-stream.
  - RTP source now has support for custom channel names.
  - RTP source will now stop when inactive.
  - There is now
  - Filter-chain has a new mysofa based spacializer plugin.
  - The RTP modules can now use direct clock timestamps to send and receive
    packets. This makes it possible to synchronize sender and receiver with
    a PTP clock, for example.
  - Filter-chain now has an invert plugin to invert the polarity of a
    signal. (#3008)

## SPA
  - There is now an option to set the channels used for probing Pro Audio
    devices. This could unlock more samplerates for some devices when they are
    probed with fewer channels. (#2990)
  - Support was added for other clocks than the MONOTONIC clock in the
    driver nodes. This can be used to synchronize the graph to a PTP clock,
    for example.
  - The ALSA source has some more headroom when rate matching to avoid
    stuttering when following another driver.
  - libcamera controls are now mapped to standard PipeWire property values.
  - The channelmixer has seen some improvements. MONO and undefined channel
    layouts are now upmixed and downmixed more correctly. (#3010)

## Bluetooth
  - Many BAP support fixes.

## GStreamer
  - The gstreamer elements now support buffer video metadata so that strides
    are correctly handled.
  - pipewiresrc will now error out correctly in more cases. (#2935)

## JACK
  - The frame to/from time functions are improved to also work with negative
    time and frame offsets.

Older versions:


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

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

