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


Older versions:


# PipeWire 0.3.49 (2022-03-29)

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

## Highlights
  - Sample rate switching should work again.
  - pw-dot can now use the output of pw-dump to render a graph.
  - Bluetooth A2DP streaming was improved that would reduce stuttering on
    some devices.
  - A JACK bug was fixed that would sometimes make it impossible to add more
    tracks in Ardour. (#1714)
  - Many bugfixes and improvements.

## PipeWire
  - Fix a potential crash when NULL params were configured.
  - Add some simple functional tests to avoid some recent regressions. Improve
    the test framework for this as well.
  - Improvements to the poll loop to avoid some use-after-free scenarios.
  - Fix samplerate switching again.
  - setlocale is not called anymore from the pipewire library. This should be
    called by the application. (#2223)
  - pw_init() and pw_deinit() can now be nested and called multiple times.
  - pw_stream will now report the resampler delay in the pw_time.queued field.

## modules
  - module-filter-chain now supports arbitrary many properties and will use
    property hints to assign them the right type.
  - The ROC modules now accept a sink/source_properties parameter.
  - The module-rt can now also be built without RT-Kit support.
  - module-echo-cancel can now use a fraction to specify the delay for more
    precise control.

## SPA
  - The channelmixer will now do upmixing by default and will not use
    normalization. It will also use a simple upmixing algorithm that duplicates
    channels by default. A more interesting upmix method is also available (PSD)
    but needs to be enabled manually. (#861)
  - Add SSE optimized (de)interleave functions for 32 bits samples with and
    without byteswap.
  - JSON parsing of empty strings will now give an invalid number instead of
    0.
  - JSON numbers are now parsed and serialized in a locale independent way so
    that , and . are not mixed up.
  - The resampler will now report the resample delay and queued samples as the
    extra delay.

## tools
  - pw-cat will read more dsf files correctly and will not crash at the end.
  - pw-top now has a man page.
  - pw-dot can now use the output of pw-dump to render a graph.

## bluetooth
  - Improve interactions with oFono.
  - Fix recovery with slow connections.
  - Improve frame size of AptX-ll.
  - A2DP can now use any quantum and will flush packets in smaller chunks
    when needed to adapt. This improves stuttering in some cases.

## pulse-server
  - The server configuration can now be placed in pulse.properties section,
    which also makes it possible to have custom overrides.
  - Implement FIX_ flags for capture as well.
  - Small fixes and improvements in module loading.

## JACK
  - Clear the last error before executing a new action or else we could end up
    with error from a previous action. This causes some problems in Ardour where
    adding a track would fail after some time. (#1714)


# PipeWire 0.3.48 (2022-03-03)

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

## Highlights
  - Fix IEC958 passthrough again.
  - Fix pulse-server crashes when playing a sample.
  - Support for more a more advanced upmixing algorithm.
  - filter-chain now supports arbitrary many ports.
  - Fix multichannel support in WINE. (with new WirePlumber).
  - Many bugfixes and improvements.


## PipeWire
  - The work queue is now created in the context so we can fail early and
    avoid further error checking in various places.
  - Fix a potential use after free with threaded loops.
  - The protocol now has a message footer. This is used to pass around
    global state such as the last registered object serial number. This can
    be used to detect when a client tries to bind to old (but reused)
    object ids. This avoids some races in the session manager but also
    when binding objects.
  - The zero-denormals CPU flag is now not touched anymore unless explicitly
    selected by the user. Denormals are avoided in filter-chain now in
    software. If the zero-denormals are now only configured in the data
    thread. This should fix issues with luajit. (#2160)
  - Configuration parsing will not actually fail on errors.
  - pw-top now correctly clips unicode characters.
  - Many places now use a dynamic POD builder to support arbitrary large
    property sets.
  - pw-stream now support PropInfo parameters so that they can announce
    custom properties.
  - Serial number are now also set on metadata and session-manager objects.

## SPA
  - audioadapter is now smarter when trying to fixate the format. It will
    use the PortConfig format to fill in any wildcards. This results in
    the least amount of conversions when the stream can handle it. It also
    is part of a fix (also requires a session manager fix) for WINE
    multichannel support. (#876).
  - Fix 5.1 to 2 channels mixing. It was using the volume of the stereo
    pair on all channels.
  - Fix some weird volume issues when a source is capturing and
    channelmixing.
  - Add stereo to 7.1 upmixing.
  - The channelmix parameters can be changed at runtime now.
  - Many improvements to the upmixing algorithms. Rear channels are now
    constructed from the ambient sound and can have delay and phase shift
    applied to them to improve spacialization. The stereo channels can
    be filtered so that the dialog is more concentrated in the center
    channel. (#861)

## modules
  - Module X11 bell received cleanups and improvements.
  - The module now has a private method to schedule unload later. This
    simplifies cleanup in many modules.
  - module-filter-chain now handles arbitrary many ports and control
    ports. (#2179)
  - Fix a bug in RAOP where it was reading from the wrong port. (#2183)

## pulse-server
  - Nodes with the DONT_MOVE property should fail with -EINVAL when
    they are moved.
  - Fix a segfault when playing a sample. (#2151)
  - The _FIX flags in pulse-server also now ignore the configured
    sample format, just like pulseaudio does. (#876)
  - Fix IEC958 passthrough again. It got accidentally broken since
    0.3.45 with a fix for another issue. (#1442)
  - Fix module-null-sink device.description. (#2166)

## Bluetooth
  - Don't try to connect HSP/HFP when no backend is available.


# PipeWire 0.3.47 (2022-02-18)

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

This is a quick emergency release to fix some severe
problems with the previous release.

## Highlights
  - Fixes a bug in pulse-server that caused cached notifications
    to play multiple times. (#2142)
  - Removed check and warnings to catch leaked listeners on the
    proxy. This might access invalid memory and cause infinite
    loops in older wireplumber.

# PipeWire 0.3.46 (2022-02-17)

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

## Highlights
  - Fix a critical bug in pipewire-pulse buffer size handling that made some
    apps (MuseScore, ... ) stutter.
  - Fix a critical bug where devices would not show when the kernel was
    compiled without VERBOSE_PROCSFS.
  - JACK clients will now use lock-quantum by default. This makes sure that
    all dynamic quantum changes are disabled while a JACK app is running.
    The only way to force a quantum chance is through a JACK app or with
    the metadata.
  - Almost all limits on number of ports, clients and nodes are removed.
  - A Dummy fallback sink is now automatically created when there are no
    other sinks. This avoids stalling browsers.
  - Sound sharing with Zoom should work better. A new WirePlumber release
    might be required.
  - Many more fixes and improvements.


## PipeWire
  - Update docs with new config overrides.
  - The rule matching logic was moved to config and code is now shared with
    pulse-server and JACK.
  - Add new Romanian translation.
  - When a quantum is forced with metadata, any node that asked to lock-quantum
    is ignored so that the quantum change can happen.
  - Fix a bug where a mixer was removed twice, leading to potential memory
    corruption.
  - The port limits on nodes and filters are now removed. Some code was
    simplified.
  - Fix a potential leak because listeners where removed while they could be
    emitted.
  - Improve context.exec and avoid zombie processes.

## Modules
  - The RAOP module now has a default latency of 2 seconds, like PulseAudio.
  - The echo-cancel module now uses the plugin loader to load the backends.
    This makes it possible to add custom, out of tree, echo cancel plugins.

## Tools
  - Improve help of pw-link.
  - Output to stdout and error to stderr. Use setlinebuf for stdout to improve
    piping between apps. (#2110)

## SPA
  - Improve removing sources when dispatching. Also improve performance now
    that a destroy loop can be removed. (#2114)
  - Fix an fd leak in the logger when logging to a file.
  - Improve loop enter/leave checks and support recursive loops.

## pulse-server
  - Clamp various buffer attributes to the max length. Fixes some issues
    with various applications. (#2100)
  - Module properties are now remapped correctly from their pulseaudio variant
    to the PipeWire ones.
  - Fix module index in introspect. Use the right index when loaded from our
    internal modules. (#2101)
  - Improve argument parsing and node.description. (#2086)
  - The sink-index should now be filled in correctly when playing a sample.
    (#2129)
  - module-always-sink is now implemented and loaded by default. (#1838)
  - Add support for loading some modules only once.
  - Module load and unload now does extra sync to make it appear synchronous,
    like in PulseAudio. This improves sounds sharing in Zoom.

## ALSA
  - Fix critial bug where alsa devices would not show when the kernel was
    compiled without VERBOSE_PROCFS.
  - Some corner cases were fixed in the ALSA timing code. When the capture node
    is follower, it will now not try to read too much data and xrun but it will
    instead produce a cycle of silence.
  - Various fixes and improvements to make ALSA devices resync to the driver
    more quickly and accurately.

## JACK
  - Add an option to name the defauld device as `system` to improve
    compatibility with some applications,
  - Use lock-quantum by default. This makes sure that all dynamic quantum
    changes are disabled while a JACK app is running. The only way to force
    a quantum chance is through a JACK app or with the metadata.
  - It is now possible to do IPC calls from the data thread. Note that this
    is a very bad idea but required for compatibility with JACK2.

## GStreamer
  - GStreamer sink will now set a default channelmap to make it possible to 
    remap to the channel layout of the device.

# PipeWire 0.3.45 (2022-02-03)

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

## Highlights
  - Zoom, telegram and other apps should be able to play sound again.
  - Implement a better way to force and lock JACK buffersize.
  - Default sink and source names and properties are improved.
  - The config loader can now load and merge fragments in conf.d directories
    for easier user configuration of config files.
  - Many small bug fixes and improvements.

## PipeWire
  - pw-cli can now also send Commands to nodes. This can be used to Suspend
    a device, for example.
  - The eventfd was removed from loops and invoke is now used to stop the loop,
    this saves an fd.
  - New Alpine CI target to test musl builds, various build fixes.
  - Add force-quantum and force-rate properties.
  - The config loader can now load and merge fragments in conf.d directories.
    (#207)
  - resource error methods can be called without a resource and then just
    log an error message.
  - link-factory can now also work from the config. (#2095)

## modules
  - module-simple-protocol has better argument parsing and can handle
    channelmap now. (#2068) It's also possible to configure latency and
    rate.
  - The native protocol now does extra checks for invalid data. (#2070)

## ALSA
  - TI2902 chips as found in various Behringer cards should have inputs
    again.
  - Better handling of busy devices in udev, retry when the inotify close
    event is emited.

## SPA
  - plugins now handle alignment properly and only expect the max alignment
    required for the CPU. (#2074)

## Bluetooth
  - SBC-XQ is now enabled for the JBL Endurance RUN BT headset.
  - Support for non-hexadecimal XAPL version strings to improve compatibility.
  - Use HCI commands again to probe the adapter msbc capability. This improves
    compatibility with some adapters. (#2030)
  - Set the right startup volume.
  - Better A2DP source idle handling.
  - Fix a timer bug in SCO sink that could cause busy looping.

## pulse-server
  - A playback issue when the tlength > maxlength was fixed. (#2069) This
    affected Zoom and other applications.
  - The STREAM_BUFFER_ATTR command is now implemented.
  - Module names are improved. (#2076)
  - Many small fixes and improvements.
  - Fix a pavucontrol crash with invalid channels. (#1442)

## JACK
  - Use the new force-quantum and force-rate properties in the JACK API to
    switch quantum and ensure it can't change for the lifetime of the JACK
    app. (#2079)

# PipeWire 0.3.44 (2022-01-27)

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

## Highlights
  - It is now possible to run a minimal PipeWire server without a session
    manager, enough to run JACK clients.
  - The maximum buffer size is now configurable and can be larger than
    the previously hardcoded limit of 8192 samples. When using high sample
    rates, the larger buffer size can avoid xruns.
  - The default maximum latency was reduced from 170ms to 42ms. This should
    improve overall latency for application that ask for a large latency,
    such as notifications.
  - Better JACK compatibility. Patchbays should now get less confused about
    ports appearing and disappearing.
  - Fix some bluetooth crashes.
  - Fix some races in ALSA device detection.
  - Many bug fixes and improvements all over the place.

## PipeWire
  - Bump the meson requirement to 0.59.0.
  - pw-top now reports correct times for filter-chain and loopback.
  - max-quantum is now also scaled with the rate. A new quantum-limit
    property was added as a hard limit for the quantum. This makes it
    possible to configure for larger than 8192 buffer sizes. Note
    than many JACK applications have a hardcoded 8192 limit. (#1931)
  - The max-quantum was reduced to 2048, This gives a 42ms default
    latency. (#1908)
  - pw-filter can now return a NULL buffer from _get_dsp_buffer().
  - Add a PIPEWIRE_RATE and PIPEWIRE_QUANTUM env variable to set the
    graph rate and the graph quantum and rate respectively.
  - Fix a potential file descriptor leak in the connection.
  - A new minimal.conf file was added to demonstrate a static setup
    of a daemon that doesn't require a session manager and is able to
    run JACK applicaions.
  - Nice levels are now only changed on the servers, not the clients.
  - Add an option to suspend nodes when idle.
  - Make it possible to avoid quantum and rate changes with
    pw-metadata. This is essential in a locked down system.
  - Handle mixer port errors better and fail to create the link instead
    of silently not working.
  - Nodes that are moved to a driver now have all the linked nodes moved
    as well. This makes it possible to run some graphs without a
    driver, such as paplay -> zita-j2n.
  - pw-cli and pw-dump can now also list objects by name, serial and
    object.path using glob style pattern matching.


## modules
  - filter-chain can now also configure parameters by index.
  - Fix the client name of module-protocol-simple. (#2017)
  - module-rtkit was merged into module-rt. This makes it easier to
    ship a default config that works on more systems by default.
  - module-adapter can now configure the adapter node from the config.
    Previously, this was a task only performed by the session manager.
  - module-metadata can now also create metadata object from the
    config file.
  - The ROC module should now work again. (#2045)
  - An X11-bell module was added to handle X11 bell events. (#1668)
  - filter-chain and loopback modules now have better unique default
    names for the streams, which makes it possible to save and restore
    their volumes independently. (#1983)
  - module-echo-cancel now has properties to control the delay and
    buffer size.

## ALSA
  - The monitor names are now correctly parsed.
  - The default period size for batch devices is limited now to avoid
    large latency.
  - The unused min/max-latency properties were removed.
  - Internal latency is now also configurable with params at runtime.
  - The udev rule for TI2902 was removed because it causes problems.
  - Fix a race where some devices would sometimes be missing. (#2046)
  - Add some more timeouts to work around a race in udev device
    permission changes when switching VTs.

## SPA
  - Fix potential infinite loop in audioconvert.
  - The spa-resample tools can now also use optimized implementations.
  - Fix a potential crash in resampler. (#1994)
  - audioconvert can now also handle F64 formats. (#1990)
  - The channelmixer now does normalization by default to avoid clipping
    when downmixing is active.
  - The channelmixer will now generate LFE channels when the lfe_cutoff
    frequency is set, even when upmix is disabled.
  - The channelmixer will now always generate FC when the target has it.
  - Adapter now reports latency correctly, even after linking the monitor
    ports.
  - Reduce memory usage and preallocated memory in some of the
    audioconvert nodes.
  - Many properties are now exposed in adapter, such as the resample
    quality.
  - The resampler and channelmixer can now be disabled.

## V4L2
  - pw-v4l2 now also works for ffplay. (#2029)
  - Take product names from udev now that the kernel returns a generic
    name.

## JACK
  - The jack pkgconfig file now has the `jack_implementation=pipewire`
    variable to be able to distinguish jack implementations. (#1666)
  - jconvolver now starts correctly again. (#1989)
  - The object.serial is now used for the port_id. This makes it easier
    to track old objects in the cache.
  - Add a dummy jacknet implementation. (#2043)
  - A bug in the port allocation was fixed that would make it impossible
    to allocate ports at some point. (#1714)

## Bluetooth
  - Bluetooth profiles are now saved properly by the session manager.
  - Improved profile detections, increased timeouts for slow devices.
  - Implement HFP call indicator for improved compatibility.
  - Handle the case where bluez does not set the adapter or address
    properties on the device instead of crashing.
  - Improved support for setting the profile from the session manager.

## pulse-server
  - Monitor sources now have the device.class=monitor for better
    compatibility.
  - Behaviour after seeking is improved. The algorithm for requesting
    bytes from the client was simplified and improved. (#1981)
  - module-ladspa-sink implements the control argument now. (#1987)
  - A potential memory leak in the message queue was fixed. (#1840)
  - Use the object.serial for the pulseaudio object index. The index is
    not supposed to be reused and this would cause problems with some
    clients.
  - Servers should now again be able to listen in IPv4. (#2047)
  - module-x11-bell was added. (#1668)
  - There is now support for per-application quirks and properties in
    the pipewire-pulse.conf file. Per-application latency and buffering
    properties can also be configured.
  - Fix a regression in telegram sounds not playing.

# PipeWire 0.3.43 (2022-01-05)

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

## Highlights
  - Flatpak apps such as Ardour can now remove links again.
  - Many fixes to pulse-server. Memory usage should be improved. Some
    crashes are fixed. Underrun handling should work better. Better
    compatibility with GStreamer based applications after seeking.
  - Many of the samplerate and quantum changes bugs in previous releases
    were fixed. This fixes some issues where the microphone would fail
    to work.
  - Many more small fixes and improvements all over the place.

## PipeWire
  - Quantum and rate changes are now applied immediately when the driver
    is idle. This avoids setting the driver in the previous samplerate.
    (#1913)
  - Object destruction now does not need write permissions anymore. This
    restriction needs some more work. (#1920)
  - When we reposition, start a sync operation. This fixes a problem
    in Ardour when seeking. (#1907)
  - Require meson 0.56.0
  - Make the align property in BUFFER_PARAM optional. We now only set this
    if the plugin has specific requirements and we default to the CPU
    largest alignment requirement.
  - pw-record will now also list monitors and streams as possible targets.

## modules
  - Improve LV2 plugin support in filter-chain. Add support for Worker and
    Options.
  - The loopback module now has a unique media.name to make it possible
    for the session manager to restore unique volume settings.

## SPA
  - Improve sample rate for EAC3 streams, some clients scale it while
    others don't so use some heuristics to make things work better.
    (#1902)
  - Allocate ports dynamically in audioconvert. This avoids using larger
    memory blocks of preallocated memory that confuses the allocator.
    (#1840)

## ALSA
  - Merge the latest pulseaudio UCM improvements. (#1849)
  - Fixes for selecting the sample rate. (#1892)
  - Improve latency on USB devices by scaling the period size based on
    the desired quantum when the device is opened.
  - Add api.alsa.period-num to configure the amount of periods to use
    in the device. Some devices have lower latency when a small value
    is forced. (#1473)
  - Allow multi-rate by default. In previous versions cards could only
    be opened in one samplerate to avoid bugs in pre 5.16 kernels. This
    however caused other problems so the default was removed.
  - Fix a bug where a card was not freed correctly.
  - Fix a bug in the alsa boundary check that could hang the alsa-plugin
    for a long time.
  - The ALSA plugin now has a parameter to configure the allowed
    samplerates.

## JACK
  - Improve handling of monitor nodes.

## Bluetooth
  - Codecs now have a priority. This should improve codec selection.

## pulse-server
  - The stream FIX_ flags are now implemented. (#1912)
  - Improve flushing and draining behaviour. Short samples will now
    play correctly. (#1549)
  - Fix a crash when enumerating the formats. (#1928)
  - Track quantum changes and update the amount of required buffering
    accordingly. This improves forced quantum handling. (#1930)
  - Improve handling of channels > 32.
  - Handle the case where a module is destroyed before it could be
    completely loaded.
  - Fixes some issues when samples were removed while they were playing.
    (#1953)
  - Fix some issues in module-zeroconf-publish.
  - Fix some memory leaks in module-roc.
  - Add command access control. This avoids execution of commands without
    proper authentication.

# PipeWire 0.3.42 (2021-12-16)

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

This is a quick emergency release to fix some severe
problems with the previous release.

## Highlights
  - Fixes a bug in pulse-server underrun handling that broke qemu
    and orca.
  - A fix was added to pulse-server to handle quantum changes
    gracefully.
  - Fix module-echo-cancel again.
  - Fix a bug where the bluetooth headset capture was producing
    noise.


# PipeWire 0.3.41 (2021-12-13)

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

## Highlights
  - Improved compatibility for flatpaks. Flatpaks with newer PipeWire
    version can connect to an older server in all cases.
  - A new RAOP module was added to stream to Apple Airplay devices.
  - OBS can now capture from the monitor devices again when using
    WirePlumber.
  - Improved JACK compatibility. Improved stability in Carla and Ardour
    when changing buffer size. Improved latency calculations and
    playback latency in Ardour.
  - Improved pulse-server handling of underruns and buffer size changes.
  - Many bugfixes and improvements.


## PipeWire
  - The systemd service files now have better names.
  - client.access permission checks are improved.
  - Fix some memory leaks in error paths.
  - Objects now have a global serial number that is unique for the
    lifetime of the server.
  - Make clock.rate, clock.allowed-rates and clock.quantum
    runtime tunable parameters with the settings metadata.
  - Add some additional memory checks in client-node to avoid
    sending invalid memory to clients. (#1859)
  - Improve buffer memory allocation. If one of the nodes is a
    remote node, ensure we only use memory that can be shared.
  - Version checks when binding to objects is removed. This means
    that newer clients can now bind to older servers, which is
    a typical case for a flatpak.
  - A bug in the latency calculations was fixed where it would in
    some cases report the wrong minumum latency.

## modules
  - module-echo-cancel has voice-detection enabled now.
  - module-raop-sink and module-raop-discover to stream audio to
    an Apple Airplay device.
  - module-filter-chain now has preliminary support for LV2
    plugins.

## SPA
  - The audio resampler now has improved buffer size calculations.
    In some cases it was too small and would cause distortions.
  - More checks are done when doing volume changes so that the
    channelmap is correct.
  - Audioadapter now exposes most config options with params so that
    they can be adjusted at runtime.
  - The resampler can now calculate the expected input buffer size
    before receiving the first buffer, which avoids some confusion
    when starting streams.
  - Support was added for some 10bit video formats.
  - MONO channel handling was improved.
  - Most plugins now set a clock name and this is configurable where
    it makes sense. The clock.system.monotonic clock name is used
    for most plugins that use the system clock for timing.

## pulse-server
  - implement module-raop-discover
  - Use STREAM_CAPTURE_SINK property when capturing from a monitor
    source to better inform the session manager. This fixes some
    issues where OBS would capture from the microphone instead of
    the output monitor.
  - Limit the amount of cache messages to 16MB and don't add large
    memory blocks to the cache. This should fix some excessive
    memory usage that people reported.
  - Fix a potential memory leak when cleaning up a client.
  - Do some additional checks to avoid buffer overruns.
  - Improve recovery from underruns better. (#1857) This improves
    seeking in gnome-music.
  - Improve recovery when the quantum is forced larger that the
    stream configured latency.
  - The prebuf state is now handled correctly.

## JACK
  - A per type object cache is now implemented. This ensures that
    port objects remain valid for a longer time because many
    JACK applications inspect objects after they are destroyed.
    This improves catia/carla compatibility.
  - Recompute the latencies when the buffer-size changes. Fix some
    cases where we would end up with negative latencies.
  - Handle regcomp errors to avoid some crashes later.
  - Latency calculations are improved a lot.
  - More care is taken to not call a process callback while a buffer
    size change is pending. This fixes some crashes in Carla, which
    expect that all clients are paused when one handles the buffersize
    callback.
  - Loopback links to a client are now handled correctly and without
    latency. This fixes playback latency in ardour6 (#1839)

## ALSA
  - ALSA devices now keep track of the samplerate of the card and
    ensure that all PCM use the same rate. This is a workaround for
    a kernel bug that is fixed in 5.16.
  - Refactor the ALSA plugin a little.
  - The ALSA plugin now reports correct delay for a capture PCM. (#1697)
  - The ALSA nodes now expose all config options with params that can be
    changed at runtime.
  - The ALSA node has a configurable clock name. Adaptive resampling to
    match clock rates is avoided when the driver has the same clock
    name as the ALSA node. This can be used to link alsa devices together
    with a word clock.

# PipeWire 0.3.40 (2021-11-11)

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

## Highlights
  - Producers and consumers can now incrementally negotiate a format
    by narrowing down the options. This can be used to select an optimal
    combination of format and modifiers.
  - Driver nodes such as the consumer of a headless compositor can now
    throttle the speed based on a new trigger_done event.
  - Headless compositors can now signal a damage event to consumers
    to start the processing of the graph.
  - Compatibility improvements in JACK.
  - Draining and resuming is now working correctly in pulse and alsa.
  - Many bugfixes and improvements.


## PipeWire
  - Many BSD fixes.
  - clang compilation fixes.
  - Fix map implementation on big-endian machines.
  - Improve tracking of param changes in pw-stream.
  - Add support for renegotiation. With this change, producer and
    consumer can incrementally renegotiate a format until it is fixed.
    This will be used to do complex negotiation of DRM modifiers.
    (#1732).
  - Add a trigger-done event in the stream. This can be used to know
    when processing of the complete graph has finished after issuing
    a trigger_process() and it can be used to throttle processing.
  - Add a RequestProcess node event and command. This can be used by
    non-driver nodes to suggest to a driver to start processing. One
    case is where a compositor can emit this event as a result of a
    screen update to let the headless compositor start an update.
  - Fix zeroconf sample format.
  - pw-mon outputs to stderr now and has colors.

## SPA
  - Fix compilation on ppc and armv7.
  - Fix port type check for ALSA seq midi ports so that they are not
    falsely listed as hardware.
  - Fix crash when running SSE code on unsupported HW. (#1775)
  - The libcamera plugin was rewritten. It now supports hotplug,
    format enumeration and an easier to read codebase.
  - Fix compatibility some more for cards with 64 channels.

## pulse-server
  - Flush data in pause in combine-sink to avoid stray audio fragments.
  - Fix a race where not all objects were removed correctly.
  - The latency calculations and setup was improved to more closely
    match pulseaudio behaviour. PULSE_LATENCY_MSEC should now resemble
    pulseaudio more closely. (#1769)
  - The drained reply is now sent only once and new data will be
    accepted once the drain completes.
  - Fix a potential crasher bug where the stream started processing
    before the setup was completed.
  - The server will now drop the client connections when the pipewire
    connection is lost.

## JACK
  - Rework the jack_port_get_buffer() method to return the same memory
    when called multiple times during the process() callback. This makes
    things work on a new Hydrogen. (#1748)
  - Add an option to disable showing the monitor ports.
  - JACK ports are now sorted per node/client and port_id. This should
    more closely match JACK behaviour and avoid random port order.
    (#1780)

## v4l2
  - Fix v4l2 LD_PRELOAD script.
  - Make sure we destroy the proxy when the global is destroyed.

## ALSA
  - _prepare should exit the draining state. (#1467)
  - Fix the precision of the _delay function by taking into account
    the amount of queued samples are the correct samplerate.


# PipeWire 0.3.39 (2021-10-21)

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

## Highlights
  - media-session is now moved into a separate module to speed up its
    deprecation in favour of WirePlumber.
  - There is now an LD_PRELOAD v4l2 emulation library to run some existing
    v4l2 applications on top of PipeWire.
  - Filter-chains should now flush out remaining samples when paused. There
    is now also the option to let a filter-chain drain so that long filters
    such as reverbs can fade out properly.
  - Stability and compatibility improvements in JACK apps.
  - Better Bluetooth compatibility with more devices.
  - libcamera plugin improvements.
  - Many bugfixes and improvements all over the map.


## PipeWire
  - Fix compilation on ARM.
  - Log topics are added to most modules.
  - Documentation updates. Many improvements to the layout. Reorganisation
    of the modules and groups.
  - Share a work queue for all links and nodes. This removes the need for
    a separate eventfd per link and per node.
  - Catch errors in the map implementation.
  - Add option to compile without dbus support.
  - Fix biquad frequency. It was using the wrong sample rate.
  - Fix a potential crash when destroying nodes, in some cases the node
    would not be deactivated properly.
  - Add some more helpers for dealing with properties and their values.
  - Implement flush and reset on virtual sinks/sources.
  - Make it possible to let virtual sinks/filter-chains run and drain
    after being idle.
  - Fix a bug where the quantum could exceed the maximum because it was
    scaled with the sample rate.
  - Fix channel_map parsing in module-zeroconf-discover so that the remote
    channel map is used.
  - pw-stream errors emitted on the proxy are reported but not fatal
    any more. They are usually used by the session manager to signal status
    to the client but otherwise does not really cause an error on the
    client.
  - Links now also store the output and input node id in the global
    properties so that applications can parse and use them regardless of
    how the link was made. (#1723)
  - pw-stream and pw-filter now have an event to notify commands.
  - The echo-cancel module can now operate on larger quantums.
  - pw-cat now uses the right metadata to find the default devices in
    --list-targets.

## media-session
  - Don't try to remix unpositioned streams when linking. This ensures
    that linking to Pro-Audio nodes does not remix the stream channels
    but links them as they are, one by one.
  - media-session is now moved to a separate module to accelerate its
    deprecation in favour of WirePlumber.

## SPA
  - Many libcamera improvements, handle MemFd buffers, handle errors
    gracefully.
  - Small improvements to make interface fall-backs easier to implement.
  - Add support to enable flush-to-zero and denormals-are-zero to avoid
    high CPU usage when dealing with denormals.
  - AUX13 channels are no longer reported as AUX12. (#1727)
  - Devices with more than 32 channels in Pro-Audio mode now only
    uses AUX channels.
  - Improve windowing function of the resampler to reduce aliasing and
    improve the quality.

## JACK
  - Port connect callbacks will not only be emitted after the port
    has negotiated buffers, which improves compatibility with
    applications that try to use the port right after the callback
    (jack_midi_latency_test).
  - Fix crash when midi ports were removed and being monitored, like
    in Ardour.

## pulse-server
  - The pulse tunnel will now use the specified format/rate/channels.
  - Improve lookup of default source and fall back to the monitors when
    no sources are available.
  - Mark some nodes as network nodes so that we can set the NETWORK flag
    correctly.

## GStreamer
  - The GStreamer element not releases the buffers in the stream again in
    all cases so that they can be reused by other streams.

## v4l2
  - Add a v4l2 LD_PRELOAD library to emulate v4l2 system calls on top of
    PipeWire. This is tested with firefox and GStreamer and is known to
    not work with Chrome.

## Bluetooth
  - AAC compatibility improvements.
  - Disable hardware volume for "Tribit MAXSound Plus" and
    "SoundCore mini".
  - Add quirk to disable faststream. Disable faststream on "FiiO BTR3".
  - Add a dummy AVRCP player to improve compatibility with some devices.


# PipeWire 0.3.38 (2021-09-30)

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

## Highlights
  - Topic based logging was added to improve debugging.
  - An off-by-one error was fixed in the audio resampler that could
    cause distortion when downsampling.
  - Various bluetooth compatibility improvements.
  - More fixes and improvements.

## PipeWire
  - module-pulse-tunnel now has better default latency to make it work
    better in more cases. There is also an option to configure the
    desired latency.
  - pw-cli now has readline support.
  - Topic based logging was added. Log lines can now be filtered by
    topic using wildcards. This should improve debugging.
  - The systemd service files should now have better descriptions.
  - Fix a crash in module-zeroconf-discover when unloading.
  - Fix a crash in filter-chain when using unaligned memory.

## ALSA
  - Sync the udev rules and profiles with pulseaudio.
  - Fix a memory leak.

## SPA plugins
  - An off-by-one error was fixed in the resampler that could cause
    distortion when downsampling. (#1646)

## Bluetooth
  - Avoid probing the native backend because it might block for DBus
    activation. This fixes some long startup times.
  - Fix the kernel version check, 5.14.x kernels should also support
    mSBC.
  - Fix FastStream microphone support in more cases.
  - Add workaround for Intel AX200.
  - SCO sink should now also work in follower mode.

## PulseAudio server
  - Make the service file require a session manager.


# PipeWire 0.3.37 (2021-09-23)

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

## Highlights
  - Capture and playback is now avoided even more on unavailable
    devices. This should fix some issues where an unusable microphone
    was selected by default. It should now also again be possible
    to select an unavailable device as the default.
  - Native DSD audio playback is now supported. pw-cat can now also
    play DSF files with the -d option.
  - JACK stability improvements with buffer-size and samplerate
    changes in some apps.
  - Many cleanups and bugfixes all over the place.

## PipeWire
  - pw-metadata -d does not cause an infinite loop anymore. (#1622)
  - Increase some plugin buffer sizes to fix some issues with many
    channels. (#1620)
  - Protect the global plugin list with a lock. Make sure pw_init()
    is locked. Fixes some issues with concurrent ALSA plugin usage.

## media-session
  - Unavailable devices can be set as the default again. (#1624)
  - Do a better check if a device has available routes and avoid
    selecting devices with unavailable routes as default.
  - Media-session was moved to its own directory. It used to live
    in examples but it is past the example stage and it interferes
