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


Older versions:


# 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
    manager changes to fully configure and enable passthrough mode
    will hopefully be merged next time.
  - Fix a race in pw-stream where it would not always emit the
    right events.

## ALSA
  - Fix volume changed check. It was checking against the wrong
    value and this could cause rounding errors.
  - The ALSA plugin now also uses RT scheduling.
  - Fix the behringer UMC202 usb device id, it was using a generic
    TI chip ID that caused problems.
  - Fix USB devices that don't show up anymore. Use an ALSA
    workaround to fix this. (#1478)
  - Add a rule for the new firmware of Sennheiser GSX 1200.
  - ALSA sink and source can now use ProcessLatency param to configure
    the internal latency. The latencyOffsetNsec property is also
    exposed so that the latency can be adjusted in pavucontrol as
    well.

## media-session
  - Fix a critical issue where the default device was not remembered
    anymore when it was removed.
  - Fix the issue where some apps need to be restarted when nodes go
    away and reappear.
  - Improve routing of streams. Streams that have a specific target
    set will now be moved to the target when it appears instead of
    staying on the fallback.
  - Small memory leak fixes.
  - Try to switch back to the user selected profile after finishing a
    Bluetooth recording.

## Bluetooth
  - Add support for HF indicator 2 battery status.
  - Add support for XAPL battery status.
  - Set the Communication intended role for HFP profile.
  - Enable SBC-XQ by default if not disabled by quirks.
  - Fix some potential crashes due to excessive polling.
  - Add aptx-LL codec and enable duplex for aptx-LL devices.
  - Add FastStream codec. This is a codec that can use a
    duplex SBC channel.

## PulseAudio server
  - Suggests a samplerate for the graph.
  - Support for handling S/PDIF (IEC958) formats was added. This will
    start working when the session manager supports configuring streams
    and nodes in passthrough mode.
  - Be smarter when handling devices without a negotiated format
    yet so that they are visible as well. This makes virtual
    devices show up immediately.

## ALSA plugin
  - Now suggests a samplerate for the graph.

## JACK
  - The jack.pc file can only be generated with meson >= 0.59.0. When
    the jack-devel option is enabled, it will generate an error with
    older meson.
  - Small stability improvements when connecting/disconnecting in
    Ardour.


# PipeWire 0.3.33 (2021-08-05)

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

## Highlights
  - Better support for virtual sinks/sources for Pro Audio
    profile.
  - Better DMA-BUF format modifier negotiation.
  - Support multiple sample rates in the graph. Not enabled
    by default yet.
  - Bluetooth can now automatically switch between headset
    and audio profile.
  - Documentation updates.
  - Many improvements and crasher fixes.

## PipeWire
  - Make AUX channels an official channel map, use this for the
    PRO audio profile so that we can name the channels. This
    make it possible to define virtual sources and sinks for
    Pro Audio devices in a more reliable way.
  - Fix scheduling of some virtual sinks/sources. (#1407)
  - Fix potential corruption of ringbuffer because of multiple
    concurrent writers. This might be the cause for many reported
    crashes. (#1451)
  - Don't place sockets in $HOME. (#1443)
  - Improve DMA-BUF negotiation. Add a flag to avoid fixation
    of a property so that producers can negotiate more
    efficiently. This is used to negotiate DMA-BUF modifiers,
    which should make more efficient use of the GPU. (#1084)
  - Add support for multiple sample rates. The graph can switch
    when IDLE to one of the supported rates. Add an option to
    lock the rate as well. This is not enabled by default yet
    because of driver bugs that need to be worked around first.
  - Add node.lock-quantum property that can be used to lock the
    quantum in place.
  - Improve latency reporting in the loopback module.
  - Make new client-node method to send the peer port id to the
    mixer. This can be used to know where the buffers entering the
    mixer are coming from. (#1471)

## Tools
  - pw-top should now also correctly show bluetooth devices. (#1540)

## media-session
  - Handle unset of the default node.
  - Added a module that can switch the bluetooth profile to headset
    profile when a stream wants to record from it.

## JACK
  - Only call the jack callbacks when the client is active. Some
    JACK applications don't expect callbacks before the client is
    active and crash (x42-dpl). (#1461)
  - Emit client unregister event.
  - Add per-client match rules in the config file to set app
    specific configuration and tweaks. (#1456)
  - Use peer_id to implement jack_port_get_buffer() from one of
    our peer ports to get the data before it enters the mixer.
    Makes the capture monitors work in Ardour6.8. (#1471)

## Bluetooth
  - Add some broken kernel versions to the mSBC blocklist
  - Avoid looping and consuming CPU when we can't write to the
    BT socket.
  - Use libfreeaptx instead of libopenaptx.
  - Fix rounding errors in HW volume conversion.

## PulseAudio server
  - implement module-switch-on-connect to emulate pulseaudio
    behaviour of new devices. Some desktop environments expect
    this behaviour and break otherwise.
  - Fix stream cleanup, make sure the stream is stopped before
    destroying it. Might be cause for some of the reported
    crashes.
  - Update message API to use the JSON format.

## Other
  - Many documentation updates.
  - Many cleanups and small improvements.
  - Support the latest libcamera version. (#1435)


# PipeWire 0.3.32 (2021-07-20)

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

## Highlights
  - Real-time priority handling for threads was reworked. Freewheeling
    will now drop RT priorities to avoid being killed.
  - Problems with filter chains and echo-cancel being linked in a loop
    was fixed.
  - alsamixer should now be able to see the mixer controls again.
  - JACK has seen some latency reporting improvements that make Ardour
    report latencies correctly.
  - Many bugfixes and improvements.


## PipeWire
  - Fix a bug in the neon audio resampler code.
  - There is now a node.link-group property to relate linked streams.
    this can be used to track the dataflow with coupled streams.
  - Fix a crash when recalculating latency on a destroyed port. (#1371)
  - Filter chains and other modules that create streams can now also
    be added to the daemon config itself. (#1309)
  - Fix some potential deadlocks in timerfd. (#1377)
  - Feedback links are skipped when recalculating latency to avoid
    loops.
  - The dummy driver and null-sink now stop the timerfd when following
    another driver instead of generating useless graph wakeups.
  - rt.limit was increased to 2 seconds. Some applications got killed
    because they run lengthy code in the Real-Time thread. (#1344)
  - Fix s24_32 to float, it was not sign extending properly. (#1393)
  - The performance of the feedback loop check algorithm was improved
    a lot, making complex graphs start much much faster.
  - The zeroconf publish module now doesn't republish nodes every time
    the volume changes. (#1406)
  - A potential memory corruption error has been fixed in the loop
    that could cause random crashes.
  - Mempools can now be created from multiple threads at the same
    time.

## media-session
  - Loops in coupled streams are now avoided. (#1394)
  - Port changes for inactive profiles are ignored now by the
    default-route module. (#1403)

## ALSA
  - Make sure that alibpref is not part of the device node name because
    it is random. (#1362)
  - Fixed an off-by-one that could cause midi events to end up with a
    wrong timestamp and thus being discarded by some apps. (#1395)
  - Fix some memory leaks when destroying a card object.

## JACK
  - Fix some invalid cycle wakeups that could cause JACK application to
    run with a 0 buffer size. (#1386)
  - JACK can now use rtkit to manage realtime priorities on threads.
  - The Real-time priority is dropped when entering freewheel mode to
    make sure we don't get killed when using too much CPU.
  - jack_recompute_total_latencies() is now implemented, fixing the
    latency reporting in Ardour. (#1388)
  - Fix some overflows in time calculations.
  - Ensure frame_rate in position is never 0.
  - Graph callbacks are now emitted as well.

## Bluetooth
  - RTP payload type is now set correctly for aptX, LDAC and SBC, which
    should improve compatibility with devices that care about this.

## PulseAudio server
  - There is now a quirks database to deal with bad clients. The database
    is builtin but can be made external later.
    - Teams is now lied to and told all sink/sources use s16 samples to make
      it show all sinks/sources.
    - Firefox is forced to remove the DONT_MOVE flag on capture streams so
      that you can move firefox streams with other tools.
  - The UNDERFLOW warnings are now made into info log messages to not
    spam the log too much. Many application just let things underrun
    and PulseAudio did not warn about this either. (#910)

## ALSA plugin
  - The alsa plugin now uses the right metadata for finding the default
    source and sink, which makes the volume controls reappear. (#1384)

## Other
  - Cleanups in pulse-server and pipewire.
  - Documentation additions.

# PipeWire 0.3.31 (2021-06-28)

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

## Highlights
  - Fixes for alsa-lib 1.2.5
  - New pulseaudio modules: module-avahi-zeroconf,
    module-pipe-source, module-roc-sink, module-roc-source.
  - JACK has seen massive stability improvements. Locking
    and correctness wrt to callbacks has been reworked. Also
    thread priorities have improved.
  - Handle various crashes and lockups when running out of file
    descriptors.
  - Bluetooth now uses a hardware database to disable
    non-working features on listed devices.
  - Scheduling quantum and rate can now be changed dynamically
    with pw-metadata.
  - Many bugfixes and improvements.


## PipeWire
  - Improve cleanup of context in error cases.
  - There is now a pw-test framework for improved unit tests.
  - Improve property serialization to valid JSON.
  - Fix some macros to work with better with coverity.
  - Metadata permissions are checked now. Clients need the
    M permission on an object to be able to set metadata for
    it.
  - The core metadata object will now remove metadata for
    removed objects, the implementor does not need to worry
    about that anymore.
  - Audioadapter will now follow the rate of the graph with
    the resampler adjusting itself dynamically.
  - Core now has a metadata implementation helper. A context
    will expose a metadata with settings that can be changed
    at runtime. This can be used to change the loglevel or
    graph quantum and samplerate on the fly.
  - An infinite loop was fixed in the audio converter.
  - Handle out-of-fds more gracefully. Handle truncated
    control data by dropping the client connection.
  - Fix profiler crash with many streams.
  - Improve latency handling in pw-filter. There is now a
    default handler and a ProcessLatency parameter to simplify
    latency reporting.
  - Latency reporting was improved in devices and streams.
  - And example sink/source was added.

## ALSA
  - hardware mute and volume are now properties on the
    Route param to make things easier.
  - More fixes for alsa-ucm 1.2.5.

## Tools
  - spa-json-dump now properly encodes string and keys.
  - pw-dump now shows the correct subject of the metadata.


## PulseAudio server
  - Ensure the node.description is set, some applications
    crash otherwise (TeamSpeak).
  - Module loading and unloading was improved.
  - module-avahi-zeroconf was implemented.
  - module-pipe-source was implemented
  - module-roc-sink and module-roc-source was implemented.
  - The maximum amount of connections has been limited to 64,
    like pulseaudio.
  - Handle out-of-fds more gracefully.
  - Fix overflow of read/write pointers.
  - Source and sink state are now decoupled from the monitor
    state and will report IDLE when not playing anything.

## media-session
  - Port switching should now happen to/from the port that
    actually changed.

## JACK
  - The locking was reviewed. All callbacks are now emitted
    from the PipeWire thread with the lock released and
    the process function will be disabled for the duration
    of the callback. This ensures that no two callbacks are
    called at the same time.
  - Improve internal consistency and try to never call callbacks
    with invalid objects.
  - Monitor port can now be accessed with system:monitor_%d
  - client threads are now created with SCHED_FIFO and module-rt
    is used to create the other RT threads. This should avoid
    SIGKILL from RTKit in some cases.

## Bluetooth
  - Various bugfixes to improve connections to devices.
  - Handle delayed UUID connection.
  - There is now a hardware database that can disable features
    in listed devices.
  - Use libusb to detect availability of mSBC.

## ALSA
  - The virtual device name can now also contain a media role.


# PipeWire 0.3.30

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
  - Recording from a monitor port should work again.
  - JACK applications should now be more stable again.
  - Freewheeling should not lock up anymore.
  - Fix lockups in many pulseaudio apps.
  - module-echo-cancel was implemented in pipewire-pulse
  - Many other stability fixes.

## PipeWire
  - Improve module path logic.
  - Improve logger formatting

## PulseAudio server
  - Make sure to pass 64 bits values for time on ARM 32 bits to
    avoid protocol errors.
  - Avoid a crash when unloading module-combine-sink.
  - Avoid overflow in requested bytes, resulting in stalled
    audio.
  - Implement module-echo-cancel.

## Bluetooth
  - Handle latency parameters instead of failing.

## JACK
  - Fix locking in many places to avoid deadlocks and crashes.
  - Fix port rename.
  - Stop freewheeling correctly instead of deadlocking.

# PipeWire 0.3.29

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

## Highlights
  - Latency reporting is now implemented.
  - Many documentation updates and cleanups.
  - module-combine-sink was added to PulseAudio server.
  - Better handling of multichannel input profiles.
  - Fix 100% volume issue when monitor suspends or profile
    changes in some cases.
  - Bugfixes and crashes


## PipeWire
  - A new module-rt was added to acquire real-time scheduling
    privileges without using RTKit.
  - Documentation fixes and updates. Docs are now using a
    custom theme.
