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

Older versions:

# PipeWire 0.3.46 (2022-02-17)

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

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


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

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

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

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

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

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

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

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

# PipeWire 0.3.45 (2022-02-03)

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

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

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

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

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

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

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

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

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

# PipeWire 0.3.44 (2022-01-27)

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

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

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


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

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

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

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

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

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

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

# PipeWire 0.3.43 (2022-01-05)

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

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

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

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

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

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

## JACK
  - Improve handling of monitor nodes.

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

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

# PipeWire 0.3.42 (2021-12-16)

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

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

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


# PipeWire 0.3.41 (2021-12-13)

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

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


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

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

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

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

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

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

# PipeWire 0.3.40 (2021-11-11)

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

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


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

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

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

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

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

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


# PipeWire 0.3.39 (2021-10-21)

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

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


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

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

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

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

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

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

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

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


# PipeWire 0.3.38 (2021-09-30)

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

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

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

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

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

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

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


# PipeWire 0.3.37 (2021-09-23)

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

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

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

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

## Bluetooth
  - The hardware quirk database is now loaded by the plugin instead of
    the session manager. This makes it also work with wireplumber.

## ALSA
  - The ALSA mixer now handles device removal much better. (#1627)

## libcamera
  - Many fixes and improvement to the libcamera plugin. (#1513)

## pulse-server
  - Improve compatibility with pulseaudio module arguments.
  - Parse channel_map arguments in module-loopback. (#1486)

## JACK
  - Delay emitting the samplerate and buffersize callbacks until the
    client is active. This fixes some crashes with Carla and other
    JACK apps.

# PipeWire 0.3.36 (2021-09-16)

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

## Highlights
  - A quick update with mostly only bugfixes and small improvements.
  - Capture and playback is now avoided on unavailable devices. This
    should fix some issues where an unusable microphone was selected
    by default.
  - MIDI output should not stop randomly now.
  - The GStreamer elements are much improved, cheese should work
    a lot better now.
  - Virtual sinks and sources should now always show up immediately.
  - JACK processing is now delayed until buffersize and samplerate
    are emitted. This should improve stability of many JACK apps.
  - JACK transport sync is now implemented correctly so that preroll
    in bitwig works.

## PipeWire
  - The module dir environment variable can now contain multiple paths.
  - Documentation now contains dot graphs of dependencies. (#1585)
  - config min/max/default quantum values are now scaled with the
    samplerate.
  - A potential crash was fixed where destroyed memory was still used
    by a node. This could cause crashes in cheese.

## pipewire-media-session
  - Only allow passthrough for passthrough formats (S/PDIF) for
    now. (#1587)
  - Improve bluetooth profile autoswitch.
  - Don't try to route audio to nodes with unavailable routes.

## ALSA
  - Pass the right AES bits to the alsa device when opening an
    S/PDIF stream.
  - Fix a bug in the MIDI bridge port management logic. When a port
    was added and immediately removed, output would stop.

## GStreamer
  - The GStreamer source now handles the flushing state correctly.
  - All blocking operations now have a 30 seconds timeout, to avoid
    infinite locks.

## Plugins
  - V4l2 Device formats and controls are now passed on the node, just
    like with audio devices.
  - audioconvert now also exposes the softMute property.

## JACK
  - Improve stability when changing buffer size and sample rate
    dynamically by pausing the processing until the application has
    handled the callback.
  - Improve handling of timebase master. When the master was moved to
    another driver, it did not attempt to become a new timebase
    master on the new driver. (#1589)
  - Implement transport sync to make preroll in bitwig work. (#1589)

## pulse-server
  - Fix an issue where virtual sinks/sources would not show up
    immediately. (#1588)


# PipeWire 0.3.35 (2021-09-09)

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

## Highlights
  - S/PDIF passthrough over optical or HDMI is now implemented.
  - Some critical fixes to MIDI, draining of streams and various
    modules.
  - skypeforlinux should work better now after adding it to the
    quirks database.
  - Bluetooth codecs are now in separate plugins to make it easier
    to ship them.

## PipeWire
  - Drain was fixed in pw-stream. In some cases it would not clear
    the drain state correctly. Fixes the issue where speaker-test would
    only play one channel.
  - Loopback connections to a driver will now activate the driver. This
    fixes an issue where MIDI connections between devices or some
    applications (puredata) would not get any MIDI messages. (#1559)
  - The audiomixer can now mix more formats. Together with the passthrough
    improvements this can be used to avoid conversions to/from the DSP
    format in some cases.
  - Make sure we idle drivers when removing a node from it in all cases.
    JACK clients could keep a driver node busy.
  - Add new methods to accumulate object info. The old one was difficult
    to use when applications need to accumulate multiple changes.
  - A new interface to load modules has been added. Plugins can use this
    to ask the host (PipeWire) to load spa plugins.
  - Increase param buffer size to handle larger params. Nodes with a large
    number of channels would sometimes not have properties. (#1574)
  - Concurrent link negotiation that caused some links to not work,
    is now avoided. This fixes monitor ports in Ardour6.
  - Small tweaks to how the quantum and rate are handled when nodes move
    between drivers. Make node.lock-quantum work with node.latency

## PipeWire modules
  - The convolver plugin in filter-chain has been optimized some more.
  - The echo-cancel stream properties were improved so that it actually
    can remember the streams it links to. (#1557)
  - module-pulse-tunnel had the buffer attributes wrong and would cause
    high latency with older pulseaudio servers. (#1434)
  - module-roc had the properties configured wrongly, which would cause
    it to not work at all in most cases. (#1538)
  - There is now an example of a 7.1 virtual surround sink using the
    hesuvi impulse responses.
  - The convolver now supports dirac pulses as the IR.

## ALSA
  - UCM config is now cached per device, using up less memory. It also
    temporarily works around a problem in alsa-lib that is now being
    patched and rolled out. Should stop devices from disappearing when
    logging out and back in. (#1553)
  - Fix the MIDI clock rate matching. It was too sensitive to small
    changes and would spiral out of control and break MIDI rather
    quickly.

## pipewire-media-session
  - The media session can now save and restore IEC958 (S/PDIF) codecs
    for the sinks.
  - Passthrough of IEC958 (S/PDIF) content is now possible. If the client
    and the sink contain a compatible set of codecs, an exclusive
    connection can be made between client and sink to pass the encoded
    S/PDIF content directly to the device.
  - Use new introspection info update methods to suspend nodes in all
    cases. Sometimes, nodes would fail to suspend because the state info
    was not evaluated.
  - The media session can now work in non-DSP mode, which will try to
    avoid any audio conversions between client and device when possible.
    But, this will also disable compatibility with JACK applications.

## Bluetooth
  - Bluetooth codecs are now compiled into separate plugins which are
    dynamically loaded. This makes it possible to change the plugin
    implementation or ship plugins separately without having to recompile
    the bluetooth module.

## PulseAudio server
  - Delay stream create reply until the stream is linked to a sink/source.
  - The device-restore extension is now implemented. This makes it possible
    to configure the IEC958 (S/PDIF) codecs supported by the sink with
    pavucontrol.
  - skypeforlinux now uses the same quirks as teams to make the sinks
    show up in all cases. This fixes the issue of not being able to hear
    the remote end in skypeforlinux.

## JACK
  - Improve catia and carla compatibility by caching objects a little longer
    after being removed. (#1531)
  - JACK ports now notify the negotiated format correctly.
  - A potential deadlock was fixed when multiple threads would perform a
    call that would require a roundtrip.
  - Improve bufsize callback, it should not be called right after doing
    activate() but only when the buffersize changes later.
  - Add tweak to disable the process lock. Some older apps might not
    expect it. (#1576)

## Docs
  - man pages are now generated with rst2man.
  - DMA-BUF docs were updated.
  - Documentation updates.


# PipeWire 0.3.34 (2021-08-26)

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


## Highlights
  - Fixes some critical issues with previous release. Such as
    devices not showing up and default devices being lost.
  - Support for consumer driver streams to make the producer v-sync
    to the consumer monitor in a headless compositor setup.
  - Improvements to routing of streams.
  - Bluetooth battery status support for head-set profile and
    using Apple extensions. aptX-LL and FastStream codec support
    was added.
  - Internal latency of ALSA devices can now be configured.
  - A fast convolver was added to the filter-chain to implement
    virtual surround sinks or reverbs.

## PipeWire
  - Add support for streams that are driver nodes for the graph.
    This was already possible for source streams but it is now
    also possible for playback streams. This can be used to let
    a producer v-sync to the consumer monitor in a headless
    compositor setup. (#1484)
  - State files are now stored in XDG_STATE_HOME instead of
    XDG_CONFIG_HOME. They will still be loaded from the config home
    if they are not in the new state home, to ease migration.
  - Set a driver on inactive nodes to make transport work in xjadeo.
    (#1491)
  - Fix parsing of filter-chain controls.
  - A new FFT based convolver was added to module-filter-chain. It
    uses a 0-latency 2 stage convolver with small FFT for the head
    and a large FFT for the tail of the convolution. A convolution
    can be used to implement IR based reverbs, HRIR surround sound
    or other convolution based operations. An example HRIR
    virtual surround sound sink has been added as well.
  - module-filter-chain was reworked a bit to support more config
    options for the plugins.
  - Endian conversion and alaw/ulaw formats are now supported for
    streams.
  - pw-cat will now suggest a samplerate for the graph.
  - SPA_PLUGIN_DIR can now search in multiple paths separated with
    a ':'.
  - Passthrough mode has been worked on and has been partially
    merged. S/PDIF definitions have been added and ALSA devices
    updated to report and configure S/PDIF formats. The session
