# PipeWire 0.3.68 (2023-04-06)

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

This release contains a huge number of changes, some of which might cause
regressions. Please report anything that seems to fail after the upgrade.
UCM devices in particular might have changed names, profiles and ports that
might require changes in custom scripts.

## Highlights
  - Symbolic links to the pipewire binary are now used instead of recompiling
    the same binary multiple times.
  - Changes to the graph scheduler related to quantum/rate updates and
    calculation of the node states. Things should start and switch between
    quantums and rates more smoothly now and especially virtual devices should
    now only run when required.
  - A new RTP session module was added. This uses the Apple MIDI protocol
    to configure low-latency bidirectional MIDI (and with a PipeWire specific
    extension, also audio) between machines. OPUS encoding was added to the
    RTP formats. The SAP module was separated from the rtp-sink/source module
    to make it more usable.
  - A new runtime debug property was added to all streams and nodes to trigger
    a save of the raw samples to a wav file. Support for this has also been
    added to the echo-canceler to debug potential issues.
  - Module pulse-tunnel has improved rate matching and synchronization
    support. It should also not drift anymore for capture devices.
  - The link-factory now ignores by default the link.passive property. This means
    that tools like pw-link or jack clients and wireplumber can't make passive
    links anymore. The reason is that there is now much more advanced logic in
    PipeWire itself to handle passive links based on node and port properties.
  - The RAOP sink was ported to new OpenSSL functions. Digest passwords are
    handled correctly now and support for more devices was added.
  - The ACP code was updated with new PulseAudio UCM code: "Create multiple
    profiles per verb for conflicting devices". This might change the names
    of devices, profiles and ports so scripts might need to be updated.
  - Upmixing is disabled again by default. We now ship config files that
    distros can install to enable upmixing again. The reason being that PipeWire
    should not apply fancy DSP processing to audio by default.
  - Many cleanups and bugfixes, including some crashes and memory corruption
    bugs.

## PipeWire
  - Various FreeBSD compilation fixes.
  - Don't crash when calling _connect twice in stream/filter. (#3091)
  - Links are now installed instead of compiling the pipewire binary
    multiple times.
  - There is now a new core event bound_props that augments the bound_id event
    with the global properties. This can be used to get the global.serial among
    other global properties. It also makes it possible in the future to let the
    server allocate unique names or uuids.
  - Fix a bug where the server could go into an infinite reconfigure loop when
    the samplerate of a driver would change.
  - When a samplerate was forced, restore the previous best samplerate when the
    samplerate is no longer forced. (#2133)
  - Rework how the states of the nodes in the graph are calculated. A more
    refined algorithm is now used that only runs nodes that need to run.
  - Rework how the quantum change is applied to the graph. Drivers are now
    responsible for using the new updated rate/quantum before starting a new
    cycle. This avoids starting a cycle with an old quantum first.
  - pw-stream and pw-filter will now ensure that the Trigger event is called
    from the main thread.
  - node.force-rate=0 will now force the node.rate on the graph, forcefully
    switching the hardware into the new rate if possible. (#3026)
  - Additional checks were added to the thread-loop to check locking order.
  - Additional checks were added to pw-stream and pw-filter to check if methods
    are called from the right thread context.

## modules
  - A new RTP session module was added. This uses the Apple MIDI protocol
    to configure bidirectional MIDI (or audio) between machines.
  - SAP support was removed from module-rtp-source and module-rtp-sink and
    moved to a separate module. This makes it possible to use the RTP modules
    without SAP support as well.
  - The echo-cancel module now has support to save the signals to a wav
    file for debugging purposes.
  - The RTP modules now have support for the OPUS codec.
  - The RAOP module was ported to new openssl encryption functions and handles
    digest passwords correctly now.
  - module-raop-discover now has match rules to be able to select the streams
    and set properties.
  - Module pulse-tunnel has improved rate matching and synchronization
    support. (#3093)
  - Fix potential memory corruption and infinite loops because
    module-pulse-tunnel was unloaded from the wrong thread. 
  - The link-factory now ignores by default the link.passive property. This means
    that tools like pw-link or jack clients and wireplumber can't make passive
    links anymore. The reason is that there is now much more advanced logic in
    PipeWire itself to handle passive links based on node and port properties.
  - module-echo-cancel will now clear its buffers after a suspend to avoid
    playing stray samples.
  - module-raop-sink will now handle 0 timing_port replies. (#3133)

## SPA
  - The adapter module now has support for saving the raw audio to a wav
    file for debugging purposes.
  - The ACP code was updated with new PulseAudio UCM code: "Create multiple
    profiles per verb for conflicting devices". This might change the names
    of devices, profiles and ports so scripts might need to be updated.
  - Upmixing was disabled again by default. We now ship config files that
    distros can install to enable upmixing again. (#3081)
  - audioadapter and audioconvert have seen improvements in the experimental
    non-DSP/passthrough mode.
  - Fix a potential race where the dummy drivers could fail to stop a timer
    and cause endless warnings in the logs.
  - The ALSA plugin has experimental support for IRQ based scheduling. This
    should decrease latency for some (mostly USB) drivers. This should bring
    latency within JACK latency. More work on this will be done before the
    1.0 release later this year.
  - Audioconvert now has support for volume ramping. (#3046)
  - A new loop method was added the check if a thread is currently running the
    loop.
  - channelmix.disable and resample.disable now generate an error when true
    and channelmixing or resampling is required in the converter.

## Bluetooth
  - Fix a crash in some cases when a device was disconnected.
  - Support async transport state changes. This avoids some lockups when the
    bluetooth backend is having issues. (#3023)
  - Align BAP sinks. This improves synchronization between earpieces.

## ALSA
  - Improve properties in pw-top and pavucontrol.

## pulse-server
  - Improve error handling from pulse-tunnel.
  - Generate silence correctly for unsigned formats as well.
  - Review buffer params. The streams should now just work with 1 or 2
    buffers.
  - module-rtp-send and module-rtp-recv now have support for the OPUS codec.

# JACK
  - Make sure we don't call any callbacks anymore when deactivating. (#2781)

## GStreamer
  - Sort the device by priority in deviceprovider. (#3072)


Older versions:

# PipeWire 0.3.67 (2023-03-09)

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

## Highlights
  - The loopback module and other couples streams will now not randomly
    fail in some cases. (#3028)
  - The RTP module now has support for sending and receiving MIDI as
    well.
  - The compress offload sink has seen many improvements. It now uses
    ioctls directly to bypass limitations of tinycompress (to be able
    to detect the available codecs, for example).
  - Pulse server compatibility was improved for some apps by improving
    the format parsing and FIX_ stream flag handling.
  - The min quantum in the pulse server was changed from 256/48000 to
    128/48000 to fix some issues with games that expect 5ms or less of
    latency.
  - The Bluetooth plugin has seen many improvements in packet scheduling
    to attempt to reduce stuttering on some devices.
  - The ALSA plugin now handles some impossible cases better. This fixes
    recording in QEMU again. (#2971)

## PipeWire
  - SPDX tags were added to the code for copyright information.
  - The random number functions were made more usable.
  - The port property code was moved from the adapter to the port
    implementation itself to make it more useful and unified for the
    cases where no adapter is used (midi and video).
  - Fix a potential overflow in mixer areas.
  - Improve runnable state calculations of nodes. This is part of
    ongoing work to avoid running nodes that should not need to run.
  - The stream will now always call the process function when using
    trigger, even if there are no buffers. This avoids stalls of the
    processing graph in some cases. (#3028)
  - Links are now marked as passive by PipeWire itself so that
    the right thing happens in all cases.
  - Implement the in/out/true values for the node.passive property.
    Place a passive state on ports to make passive links on a port
    by port basis.

## Tools
  - pw-cat has seen improvements in the encoded file playback case.

## Modules
  - The rtp module has support for MIDI now.
  - DSCP is now configurable in the RTP module.
  - The loopback module doesn't randomly fail to work anymore. (#3028)

## SPA
  - The null-audio sink can now be given a format and it will return this
    instead of the default float ones. This makes it possible to make a
    null-sink that has a given format.
  - The compress offload sink has seen many improvements. It now no longer
    uses tinycompress to be able to detect the available codecs.
  - The ALSA plugin now handles some impossible cases better. (#2971)
  - Fix compilation on older compilers. (#3050)

## Pulse-server
  - The FIX_ flags are now implemented more correctly by fixating the
    stream to the format of the sink/source they ask to be connected to.
    There is now also an option to override the fixation based on rules.
  - Format parsing was improved and should now support all format strings
    supported by pulseaudio including upper and lower case variants
    and shortcuts.
  - Channelmap parsing was improved and should now reject invalid
    channelmaps as well as support the shortcuts supported by pulseaudio.
  - Escape codes in module arguments now work as it does in pulseaudio. (#3071)
  - The min quantum was changed from 256/48000 to 128/48000 to fix some
    issues with games that expect 5ms or less of latency.

## JACK
  - jack.passive-links can now be used to have a JACK client make passive
    links and the node.passive property is no longer used for this because
    it has a different function.
  - The qsynth rule was updated to the new node.passive features. It is now
    only passive on the output side.

## Bluetooth
  - BAP delay and transport latency are handled now.
  - A2DP and SCO can now use bigger buffers to improve quality when the
    reception is jittery.
  - The AT+BCC command is now implemented.
  - Packet encoding now happens ahead of time when possible to avoid delays
    before sending it.
  - Source should now always produce complete (padded) buffers to avoid sync
    problems.
  - Don't set unnecessary socket options.

## GStreamer
  - The pipewiresrc now has an autoconnect argument.
  - The metadata plane count is now handled correctly in more cases.
  - Stream errors are now handled correctly to stop the GStreamer elements.

# PipeWire 0.3.66 (2023-02-16)

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

## Highlights
  - Fix a regression in the pulseaudio module-combine-stream because the new
    module-combine-stream was not installed.
  - PipeWire can now generate a limits.d config file with our recommended
    settings for priorities and memlock.
  - Modules, exec and objects can now be loaded depending on conditions. One
    example is the X11-bell module that can now be disabled with a custom
    property override.
  - Filter-chain has a new mysofa based spacializer plugin.
  - Suport was added for different clocks that allow the RTP modules to work
    with a PTP clock, for example.
  - Many bugfixes and improvements.


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

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

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

## Bluetooth
  - Many BAP support fixes.

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

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

# PipeWire 0.3.65 (2023-01-26)

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

## Highlights
  - Add back the deprecated symbols but make sure a deprecated warning is
    emitted for them. This fixes compilation issues in bindings.
  - Fix an error in the AVX code that could cause crackling in filter-chain
    when using the mixer.
  - The convolver in filter-chain can now select an IR from a list of IRs
    that best matches the current samplerate. Also resampling of the IR
    has been improved.
  - A new native module-combine-stream was added. You can use this to create
    a 5.1 device from 3 stereo soundcards, for example, or direct the output
    to multiple sinks at once.
  - Support for Bluetooth MIDI was added. This requires a wireplumber
    addition as well.
  - An ALSA plugin rule was added to tweak the buffer settings in Davinci
    Resolve so that it now runs with acceptable latency. (#1697)
  - Support for compress offload was added using tinycompress. This allows
    compressed formats to be decoded in hardware using ALSA on some devices.
  - Many more buffixes and improvements.


## PipeWire
  - Add back the deprecated symbols but make sure a deprecated warning is
    emitted for them. (#2952)
  - Fix a regression when running older servers and newer clients (such as
    flatpaks on older server) where the server would run clients too soon,
    causing crashes. (#2964)
  - Ensure that environment variables override any config values.

## Tools
  - pw-cli has received some improvements in the output.
  - pw-cat can now use ffmpeg to demux streams for compress offload.

## modules
  - The convolver IR volume is now preserved after resampling.
  - Adapter ports can now have a custom prefix.
  - module-rt now clamps the realtime priority to the user allowed one if
    it is within an acceptable range. Before it would fall back to RTKit
    immediately.
  - The module-echo-cancel can now have per stream channel layouts which
    makes it possible to link to specific audio ports on a device. (#2939)
  - Fix an error in the AVX code that could cause crackling in filter-chain
    when using the mixer. (#2965)
  - The convolver in filter-chain can now select an IR from a list of IRs
    that best matches the current sample-rate.
  - module-pipe-* now better matches the pulseaudio properties. (#2973)
  - A new combine-stream module was added to combine multiple sinks into
    one sink. It is also possible to merge multiple sources into one.
  - module-rtp-source now has match rules to select what SAP sessions
    to stream from. There were also improvements to the buffering and
    latency handling.
  - module-rtp-sink now handles multicast loopback correctly.
  - module-rtp-sink implements min-ptime and max-ptime to control the
    send packet latency.

## SPA
  - A new modifier flag was added to the video format parser helper to
    allow 0 (linear) as a valid modifier. (#2943)
  - Params includes were reorganized to make it more scalable. Many compressed
    audio formats were added.
  - The alsa pcm plugin now handles invalid values from the driver
    gracefully. (#2953)
  - Fix some potential stuttering cause by wrong scaling and overflow
    of the output buffers in audioconvert. (#2680)
  - Debug output is now also sent to the log instead of stdout. (#2923)
  - A debug context was added to debug macros to implement custom debug
    handling. This is used to redirect the debug of pods to the debug log
    instead of using some custom duplicated code.
  - Fix some warnings for potentially undefined shifts in format
    conversion.
  - Support for compress offload was added using tinycompress. This is mostly
    used on some embedded hardware where decoding of audio formats can be
    done in hardware.

## Bluetooth
  - Some fixes for LE audio were added.
  - Support for Bluetooth MIDI was added. This requires a wireplumber
    addition as well.
  - Reply OK to empty commands.
  - Improve compatibility with some devices that send stray \n such as
    the Sennheiser HD 350BT. (#2991)

## pulse-server
  - Devices with unsupported formats (by the pulseaudio API) are now also
    listed in the pulseaudio API (with invalid formats).
  - The native module-combine-stream is used for module-combine-sink.

## JACK
  - Make jack.merge-monitor default to true to better match the jack1/2
    behaviour. Add an exception for mixxx, which is more usable with
    unmerged monitors. (#1760)

## ALSA
  - The property handling in the ALSA plugin was improved. alsa.properties
    and alsa.rules can now be added to the config file.
  - A rule was added to tweak the buffer settings in Davinci Resolve so that
    it can run with acceptable latency. (#1697)
  - ALSA volume will now also use cubic volumes, like pulseaudio.
  - The ALSA ctl plugin now also uses the client-rt.conf file.
  - A new alsa.volume-method was added to configure cubic or linear volume.
    This can be set per application using the rules.

## GStreamer
  - pipewiresrc will now advertize DMABUF support if the pipeline suports
    this.
  - pipewiresrc will now always be a live source unless told otherwise.

# PipeWire 0.3.64 (2023-01-12)

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

## Highlights
  - Clear old buffer memory on ports to fix some SIGBUS errors.
  - It is now possible to assign custom port names to the ports from an
    adapter. This feature is helpful to those who use a multichannel
    interface with long-term connections. This way they can label each
    port with its designation, such as an instrument name or anything else
    to be displayed in a patchbay or DAW.
  - Fix some issues with node suspend and quantum and rate calculations.
  - Fix some regressions in pulse-tunnel and RTP-source adaptive resampling
    that could cause synchronization problems.
  - UCM devices now also have a Pro Audio profile.
  - NODE_TARGET (with the object.id) is now deprecated, use TARGET_OBJECT
    (with the object.serial, which is not reused and can avoid races).


## PipeWire
  - Clear all peer input port buffers when suspending. This fixes some
    SIGBUS errors when some plugins were using old memory. (#2914)
  - Fix a case where nodes that were not supposed to be suspended, were
    kept suspended on a rate change. (#2929)
  - Fix an error in the quantum and rate calculations that could cause
    nodes to run with wrong quantum and rates when multiple rates were
    allowed. (#2925)

## Tools
  - pw-dump will now sort dictionaries to make it easier to compare
    different outputs.
  - Improve output of pw-reserve.
  - pw-loopback uses TARGET_OBJECT so you will need to use the serial
    id (or better the name) as the target instead of the object id.

## modules
  - The filter-chain modules has seen some cleanups, refactoring and
    optimizations in the various DSP functions.
  - The ROC module now supports setting a custom samplerate.
  - ROC 0.2.X is now required.
  - The pulse tunnel and RTP source were not updating the rate field
    correctly which could cause synchronization problems. (#2891)
  - The filter-chain now supports an arbitrary number of control
    properties. (#2933)
  - It is now possible to assign custom port names to the ports from an
    adapter with the PW_KEY_NODE_CHANNELNAMES.
  - Support was added for capture and playback props in echo-cancel.
    (#2939)

## SPA
  - The ACP code now has an option to set the probe samplerate. (#1599)
  - UCM devices now also have a Pro Audio profile.
  - Filtering of Step ranges is now implemented.

## Pulse-Server
  - The channel-map is now set correctly on the echo-cancel module.
  - source_master and sink_master are now correctly handled in module
    echo-cancel.
  - Fix a regression in DRAIN where resuming after a DRAIN would fail.
    This caused problems for espeak. (#2928)
  - TARGET_OBJECT is now used to make it possible to use the indexes
    as a target.
  - ladspa-source and remap-source can now also link to monitors.

## ALSA
  - The ALSA plugin now handles the target.object correctly when set to
    -1. (#2893)

## V4L2
  - The v4l2 replacement library now also follows symlinks.
  - Support for getting and setting controls was added.
  - Support for G_PARM was added.
  - The environment variable PIPEWIRE_V4L2_TARGET can be used to force
    an application onto a specific camera.

## Bluetooth
  - Fix compilation without ldac_abr.
  - Fix a missing brace in CIND reply. This could cause some devices to
    fail.
  - Fix configuration of the initial latency.

## GStreamer
  - The device provider now supports setting an fd so that it can connect
    to PipeWire sessions from the portal.
  - DMABuf support was re-enabled in gstpipewiresrc.

# PipeWire 0.3.63 (2022-12-15)

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

## Highlights
  - Fix a critical bug that causes audio distortion in some cases when using
    AVX2.
  - Fix a crash in mpv caused by deinit of PipeWire.
  - Resample the convolver IR to match the graph samplerate for better
    results.
  - Many more small bugfixes and improvements.


## PipeWire
  - Fix a segfault in the PipeWire deinit code triggered by mpv in some
    cases. (#2881)
  - Fix docs about SPA_PLUGIN_DIR.
  - Always dlclose by default (even under valgrind). Add an option with
    PIPEWIRE_DLCLOSE to select alternative behaviour.
  - Improve PIPEWIRE_DEBUG category handling.

## modules
  - Resample the IR for the convolver when the IR samplerate and graph rate
    don't match.

## SPA
  - Handle spurious reads from timerfd gracefully.
  - Fix potential stack-use-after-scope when starting Audacity.
  - Fix distorted audio when using AVX2. (#2885)
  - Remove fallback to default channel map in channelmix.
  - Improve sorting of MIDI events, use the same order as Ardour. (#1816)
  - Enable LFE downmixing by default. (#2425)
  - Make IEC958/AC3 and IEC958/DTS work better by enforcing a fixed minimal
    buffering for the encoder to avoid stuttering. (#2650)

## Pulse-Server
  - Add a new pulse.cmd config section to execute pulse commands, currently
    only for loading modules. This removes the dependency on pactl.
  - Improve debug of messages.

# PipeWire 0.3.62 (2022-12-09)

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

## Highlights
  - A regression in screensharing was fixed. It was caused by a race when
    activating links and driver nodes.
  - Video transform metadata was added so that cameras and screen sharing
    can report the video orientation and transformations.
  - Support for the PulseAudio module-gsettings was added to make paprefs
    work.
  - Support for bluetooth offloading was added. This allows for the bluetooth
    reception, decoding and playback to happen completely in hardware.
    This also requires some support in WirePlumber.
  - Many bugfixes and improvements.


## PipeWire
  - More work on stopping nodes in a more controlled way.
  - Fix a race in starting nodes and drivers. In some cases the driver
    node would already be started while the link to the peer node was not
    ready yet. This caused regressions in screen sharing. The driver is
    now only started after all the followers and links completed.
  - Fix a case where a slow capture stream would not recycle buffers
    anymore and stall. (#2874)
  - Fix a subtle bug in pw_loop_invoke that could cause callbacks to be
    delayed and cause crashes in some cases.
  - Fix a case where IPC was done from the data-thread and could cause
    crashes.

## Tools
  - Silence some expected errors in the pw-top output.

## modules
  - The filter-chain has seen some optimizations in the copy plugin and
    the convolver.
  - The zeroconf plugin will now only unpublish services from the server
    that was removed.
  - Fix a potential crash when stopping pw-loopback.
  - Some harmless errors were turned into info messages.
  - Fix some cases where pw_stream methods were called from the data-thread
    that could cause segfaults. (#2633)

## SPA
  - There is now a video transform metadata that indicates how a video
    frame was transformed (rotated/flipped). libcamera and the GStreamer
    elements now have support for this metadata.
  - The SPA volume plugin is now disabled from the default build.
  - Handle missing control info in libcamera.
  - Handle errors from loop better, don't call the callbacks on errors.
  - Somewhat improve performance in some audioconvert AVX2 code for format
    conversion.
  - Fix PortConfig and EnumPortConfig params in audioconvert and
    audioadapter to reflect what is actually going on instead of using
    hardcoded values.
  - Pass ignore-dB property correctly in all cases.
  - Probing is now done in 48KHz again. (#2857)

## Pulse-server
  - IPv4 addresses are now added first to the list and exposed first with
    zeroconf discover.
  - module-gsettings was added to make paprefs work.
  - The pulse.idle.timeout option was disabled by default and only enabled
    for selected apps (speech-dispatcher) because it caused some problems
    for other apps. (#2880)

## JACK
  - Only process valid ports. Could fix some crashes. (#2863)

## Bluetooth
  - Support was added for offloading bluetooth handling. Some hardware can
    receive, decode and play the bluetooth audio directly in hardware.

# PipeWire 0.3.61 (2022-11-24)

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

## Highlights
  - Fix a bug in audioadapter that could cause crashes when switching
    bluetooth profiles.
  - Fix sound in QEMU, deadbeef and openal again.
  - libcamera plugin fixes, dynamic add and remove should now work with
    the next wireplumber version.
  - Fix a regression in pw-midiplay where the first buffer would not
    play and some events would be missing.
  - The network module now doesn't export other network sources
    anymore.
  - pulse-server now detects clients that keep underrunning for a long time
    and will pause them to save power.
  - Many more bugfixes and improvements.


## PipeWire
  - Optimize away some useless graph recalculations.
  - Increase alternative sample rates from 16 to 32.
  - FreeBSD and musl build fixes.
  - Silence some module loading errors when the error can be ignored.
  - Fix initial buffer requested size for pw-stream when operating in
    async mode. This also indirectly fixes the first buffer in
    pw-midiplay. (#2843)

## Modules
  - Set the network property on pulse-tunnel streams so that they are
    not exported anymore. (#2384)
  - Filter-chain has optimized mix functions now.

## SPA
  - Handle some errors in libcamera better.
  - Fix libcamera remove events. Fix the id allocation for devices.
  - Fix a bug in audioadapter where it would not renegotiate after
    a port reconfiguration, leading to crashes, especially when
    automatically switching profiles in bluetooth. (#2764)
  - Do ALSA probing in 44100Hz again. Some devices seem to fail
    otherwise for some unknown reason. (#2718)
  - Force playback start when the ALSA buffer is full. This fixes sound
    in QEMU. (#2830)
  - Support Digital 5.1 AC3 for Asus Xonar SE.
  - Improve format renegotiation in audioadapter. This makes the ALSA
    plugin work again for deadbeef. (#2832)
  - Fix latency reporting on adapter DSP ports.

## pulse-server
  - Fix a bug where openal based applications would hang. (#2821)
  - Improve zeroconf publish. Only publish on the address of the first
    running server. This avoids duplicate entries for IPv4 and IPv6.
    Add support for republish entries when new servers are started.
  - Add a pulse.idle.timeout option (default to 5 seconds) to pause
    streams that have been underrunning for this amount of time. Badly
    behaving clients will then not keep the graph and device busy so
    that devices can be suspended to save battery. This should give
    better default behaviour with speech-dispatcher. (#2839)

## JACK
  - Add an option to configure the filter character.
  - Fix connect_callbacks. It was only called once for output ports.
    (#2841)
  - Add option to set node.passive on jack clients. Make some quirks
    for qsynth to make it suspend and fade out better.

# PipeWire 0.3.60 (2022-11-10)

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

## Highlights
  - The filter-chain now handles errors better and has fixes for many
    crasher bugs.
  - A new RTP module was added with a sender and receiver. It uses SAP
    to announce and consume RTP streams and is compatible with the
    PulseAudio RTP modules.
  - Many small bluetooth improvements and fixes.
  - The alsa plugin will now only start playback when there is data. This
    results in better sync and lower latency between capture and playback.
  - The v4l2 and libcamera plugins have seen a lot of improvements. They
    support control properties now. Also pw-v4l2 has seen many improvements
    and mostly passes the v4l2-compliance test now.
  - Many more bugfixes and improvements.


## PipeWire
  - Code cleanups, compiler warning fixes.
  - Add some extra checks to avoid scheduling an inactive node.
  - Rework the sequence of events to start and stop nodes.
  - Improve param enumeration.
  - An option was added to give priority to the Buffer params of the
    consumer. This makes it possible to use the default values of the
    consumer (instead of the producer) when capturing from a source.
  - The graph rate selection was improved to pick a rate closest to the
    requested one (instead of picking the default).

## Modules
  - Fix some crashes in filter-chain. (#2737)
  - X11 Bell module will now be loaded by default when available.
  - A new RTP module was added with a sender and receiver. It uses SAP
    to announce and consume RTP streams and is compatible with the
    PulseAudio RTP modules.
  - Improve RAOP compatibility.
  - The echo-cancel module now uses the resampler prefill option to align
    input and output samples without buffering. Better latency control
    when starting and stopping has been implemented.
  - The pulse tunnel will now write aligned samples to pulseaudio even
    when the ringbuffer wraps around. This fixes playback issues with
    multichannel sinks.
  - Add a delay option to module-loopback using a ringbuffer.
  - Implement echo-cancel params.
  - The filter-chain module has better error reporting.
  - The LADSPA search path was extended with some more common paths.
  - The echo-canceler input can now also be a monitor of a sink. This
    improves compatibility with some proton games that expect a real
    sink instead of a virtual one.

## Tools
  - Better error reporting in pw-link.
  - pw-top now also shows IEC958 passthrough formats and JPEG/H264 video
    formats.
  - pw-top refreshes the screen faster.
  - pw-top now prints the state of the node and shows less info for
    inactive nodes.
  - pw-dump now uses the new seq field in the spa_param_info to discard
    old param updates and avoid duplicate params in the output.

## Bluetooth
  - Add ModemManager support in the native backend.
  - Clean up GetManagedObjects handling.
  - Handle QoS from the endpoints in the codec.
  - Increase the socket buffer to have more control over the rate and QoS.
  - Simplify the packet flushing code.
  - Stop processing nodes before destroying them.
  - Fix timers when a source switches drivers.
  - Codecs can now share endpoints. This reduces the amount of endpoints and
    avoids problems with devices that can't handle a large amount of
    codec endpoints.
  - Report batery status to UPower for HFP AG.
  - Fix bitpool increase.

## SPA
  - The audioresampler now avoids clicks and pops between activating and
    deactivating the adaptive resampler when used by the stream API.
  - Use default locale to parse float parameters.
  - The upmix functions now have SSE optimizations.
  - Avoid recalculating the complete channelmix setup when only the
    volume changes.
  - The alsa plugin will now only start playback when there is data. This
    results in better sync and lower latency between capture and playback.
  - The ALSA MIDI sequencer will now pull data from the graph even when it
    did not output anything. Fixes some graph stalls with the sequencer in
    some cases. (#2775)
  - v4l2 and libcamera sources now recycle buffers when nothing is consuming
    them. This avoids stalling the graph.
  - libcamera now suggests a more appropriate frame size than the smallest
    poster frame.
  - Improve state changes in audioconvert. (#2764)
  - A new seq field was added to spa_param_info to keep track of pending
    param updates.
  - Support speaker output only on RealTek ALC4080. (#2744)
  - The v4l2 source now supports setting controls.
  - The libcamera plugin now supports enumerating and setting controls.
  - A new unit test for 6.1 channel mapping was added. (#2809) More debug
    info was added to audioconvert for the channel matrix.
  - Audioconvert will now also upmix a rear-center channel when needed.

## pulse-server
  - Add support for the RTP send and recv modules with the new native
    RTP module.
  - Add option to set latency for pulse-tunnel streams and
    module-zeroconf-discover.
  - The socket will now be given the same permissions as what pulseaudio
    did (0777).
  - Implement module-loopback latency_msec correctly with the new delay
    parameter.
  - sysfs.path is now filled with the same data as pulseaudio.
  - The manager now uses the new seq field in the spa_param_info.
  - Fix a bug where in some cases the read pointer would get out of sync
    and cause too large requests. (#2799)

## ALSA
  - The alsa plugin now reuses the stream in prepare which results in
    better performance.
  - Some deadlocks have been fixed in the ALSA plugin.
  - The ALSA plugin reports more accurate timing information in some cases.

## V4l2
  - The v4l2 compatibility layer has received a lot of updates.
  - Improved node names and format enumeration.
  - Support for multiple /dev/videoX devices, each mapped to a unique
    PipeWire node.
  - Passes the v4l2-compliance test now with both the v4l2 and libcamera
    backend in PipeWire.
  - Improved mmap support for inline buffer memory. This makes it possible to
    consume PipeWire streams.
  - Negotiation works more reliably now.

## JACK
  - Implement jack_acquire_real_time_scheduling() and
    jack_drop_real_time_scheduling() by keeping the thread utils in a global
    state.
  - Fix jack_client_thread_id() to return NULL when the client is not active,
    just like jack1 and jack2.
  - An option was added to let the jack_set_buffer_size() function update the
    global metadata. A quirk was added so that jack_bufsize uses this new feature
    to make the buffer size settings persistent and global, just like jack.
  - jack_port_register() and jack_port_unregister() can be called on an
    active client so make this thread safe. (#2652)

# PipeWire 0.3.59 (2022-09-30)

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

## Highlights
  - Fix possible wrong samplerate in loopback streams after suspend and
    rate switch.
  - module-filter-chain can now adapt to the graph samplerate.
  - Fix some potential stuttering and crackling in pulse-server.
  - Add Bluetooth LE support. This requires experimental kernel and bluez
    support.
  - The ALSA plugin has more options to control the buffer size. This can
    be used to work around high latency in davinci resolve.
  - Many bugfixes and improvements.


## PipeWire
  - Add audio capture example with volume meter.
  - Fix a case where a rate switch would not suspend all the nodes of the
    driver first. This could cause wrong samplerates in streams.
  - Fix a case where a node would be Paused while still added to the
    graph, causing potential crashes. (#2701)

## Modules
  - module-filter-chain and module-loopback now use the resample.prefill
    option to avoid buffering extra samples and causing unwanted latency
    when resampling is activated.
  - module-filter-chain can now adapt to the graph samplerate.
  - Improve module-raop to support the ALAC codec as raw PCM.
  - Improve RTSP parsing to improve compatibility.

## Tools
  - Fix 100% CPU in pw-cli monitor mode. (#2709)
  - spa-acp-tool can now be exited with ctrl-D.

## SPA
  - Various libcamera fixes and improvements.
  - Set stride on audioconvert output buffers.
  - Make sure we always place the last requested size from the resampler
    on the buffers in pw-stream.
  - Add resample.prefill option in the resampler to fill the history with
    0 so that we don't have smaller buffers at the start.
  - Make sure that when an overflow corrupts a POD, that it will always
    stay corrupted.
  - Rate limit some ALSA warnings and reduce some unwanted warnings.
  - Don't recalculate the audioconverter state for each pause/play. (#2701)
  - Fix some POD parsing inconsistencies and potential overflows.
  - Add support for Asus Xonar SE.
  - Fix Flush command handling. It should not stop playback. (#2726)
  - Refactor the peaks function and add some unit tests and optimizations.
  - The channelmix has an optimized nXm converter and new unit tests.
  - Normalization in the channelmixer was fixed.

## pulse-server
  - The requested latency of record streams was reduced to fix some
    stuttering in Teamspeak. (#2702)
  - Tweak the max amount of bytes sent to a client. (#2711) (#2715)
  - Improve maxlength calculations, this fixes some crackling noise with
    high samplerate and channel counts in some players (audacious).

## Bluetooth
  - Merge Bluetooth LE support.
  - Make sure we are backward compatible with WirePlumber.
  - Fix some HFP and HSP AT command parsing. (#2463)
  - Use HFP by default over HSP.

## ALSA
  - Increase max number of periods.
  - The parameters handling was improved. There is now an option to set the
    buffer-bytes of the ALSA plugin.
  - PIPEWIRE_ALSA can now be used as an environment variable to restrict the
    plugin formats and buffer size.

# PipeWire 0.3.58 (2022-09-15)

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

## Highlights
  - Fix a regression that could cause audio crackling.
  - Fix a regression in RTKit because rlimit was not set correctly.
  - JAVA sound applications will now alsa work with the pulseaudio-alsa plugin.
  - pw-top will now show the negotiated formats of devices and streams.
  - Fix some potential crashes when starting streams.
  - The ALSA plugin has had improved timing reporting and poll descriptor
    handling that should improve compatibility.
  - Many more improvements and bugfixes.


## PipeWire
  - Avoid scheduling nodes before they are added to the graph. This could
    avoid some crashes when scheduling nodes that were not completely
    started yet. (#2677)

## Tools
  - pw-top now also shows the negotiated formats of streams and devices.
    (#2566)
  - pw-top prints microseconds as "us" now to avoid unicode problems.

## Modules
  - Fix compilation with newer lv2.
  - Fix setting realtime priority with RTKit, it was not setting rlimit
    correctly and RTKit would refuse to change the priority.
  - Fix some playback problems with RAOP sink. (#2673)
  - Filter chain will now warn when a non-existing control property is
    used in the config file. (#2685)
  - Filter chain can now handle control port names with ":" in the name.
    (#2685)
  - The echo-cancel module and interface now has activate/deactivate
    functions to make it possible for plugins to reset their state.

## SPA
  - Make sure audioconvert uses the given channelmap and channels for the
    volumes, even when not negotiated yet. This makes it possible to change
    the volume before the node has been negotiated.
  - Refactor the peaks resampler. Fix an error in the SSE code.
  - Fix DSD min/max rates, avoid exposing impossible rates.
  - Set monitor port buffer size correctly. This could cause some crackling
    and hickups. (#2677)
  - Make ALSA sequencer port names unique.

## Pulse-server
  - Rework the capture buffer attributes to better match pulseaudio. This
    fixes a regression where opening pavucontrol could cause crackling.
    (#2671)
  - Implement TRIGGER and PREBUF methods.
  - Handle clients that send more than the requested amount of data.
    PipeWire will now also keep this as extra buffered data like PulseAudio.
    This fixes JAVA sound applications when they are running on top of the
    PulseAudio ALSA plugin. (#2626,#2674)
  - Update the requested amount of bytes more like PulseAudio. Fixes
    stuttering after resume with the GStreamer pulseaudio sink. (#2680)

## ALSA Plugin
  - More debug info was added. The time reporting was improved.
  - The poll descriptor handling was improved, avoiding some spurious
    wakeups. (#1697)


# PipeWire 0.3.57 (2022-09-02)

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

## Highlights
  - Support masking of conf.d/ files. (#2629)
  - Use org.freedesktop.portal.Realtime when available. This does the
    correct PID/TID mappings to make realtime also work from flatpaks.
  - Fix rate adjustement logic in pulse-tunnel. This would cause
    increasing delays and hickups when using tunnels. (#2548)
  - Add OPUS as a new vendor codec. Add OPUS-A2DP spec. PipeWire can now
    send and reveive OPUS data over bluetooth.
  - An AAC decoder was added so that PipeWire can now also function as
    an A2DP AAC receiver.
  - Fix some issues where the wrong samplerate was used. (#2614)
  - Fix rate match for sources. This fixes an error where follower sources
    would generate many resync warnings.
  - Many more bugfixes and improvements.

