# PipeWire 0.3.80 (2023-09-14)

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

## Highlights
  - A new Tag param was added that allows arbitrary metadata to be transported
    out-of-band in the graph.
  - Vulkan DMA buf support was merged.
  - The echo-canceller was ported to webrtc-audio-processing-1.
  - Fix a regression in locating monitor sources by id in pulse-server.
  - Mixer io areas updates are now synchronized correctly with the data
    thread to avoid potential crashes.
  - Many more bugfixes and improvements.


## PipeWire
  - Handle driver nodes that refuse to change the quantum or rate.
  - A new Tag param was added that allows arbitrary metadata to be transported
    out-of-band in the graph.

## Modules
  - The pipe-tunnel source has been reworked to use a ringbuffer and rate
    adaption to keep the latency constant. It can now also function as a
    driver to reduce resampling. (#3478)

## Tools
  - pw-cat will now place media properties in Tag params.
  - pw-mon can now filter props and params.

## SPA
  - ALSA refuses to change quantum and rate when in IRQ mode.
  - ALSA will now be smarter in selecting the period size for batch devices
    and will make it depend on the samplerate. (#3444)
  - Vulkan DMA buf support was merged.
  - ALSA latency will now be reported in the time domain of the graph.
  - Add udev based autodetection for compress-offload devices.
  - The echo-canceller was ported to webrtc-audio-processing-1.
  - The v4l2 inotify code was rewritten to avoid a use-after-free and by
    using a separate watch (but same fd) for each device. (#3439)
  - The tag and latency handling was improved in audioadpter.
  - Don't use -Ofast on alpha because it can crash on denormalized
    values. (#3489)
  - The mixers now synchronize spa_io_buffers updates with the data
    thread to avoid crashes.
  - Handle NULL param updates. (#3504)

## Pulse-server
  - Fix a regression in locating monitor sources by id. (#3476)
  - Add support for use_system_clock_for_timing in module-pipe-sink.
  - Add support for checking module arguments.
  - Avoid some useless change events.

## Bluetooth
  - Ports are now marked as physical, which makes the bluetooth devices show
    up as hardware devices in Ardour and other JACK apps. (#3418)
  - Some fixes for LE audio support (#3479)

## JACK
  - Also emit unregister notify even when supressed when creating the
    client.
  - The notify callbacks now match JACK2 behaviour more.
  - The mixer io areas are updated and handled safely now to avoid
    crashes. (#3506)

Older versions:


# PipeWire 0.3.79 (2023-08-29)

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

## Highlights
  - Fix a regression in suspend that could cause silence.
  - Fix a regression in JACK port registration that could cause all kinds of
    JACK problems. (#3485)
  - Fix a typo in the neon sample conversion functions that could cause
    distortion.
  - Add BAP broadcast source and sink support.
  - pw-top now has a batch mode to dump the output to stdout.
  - Many more bugfixes and improvements.


## PipeWire
  - Fix a regression in shutdown where a node might not first suspend
    properly. This cause loss of sound in some cases. (#3378)
  - Failure to compile a regular expression in the config file will now
    be reported and ! can be used to negate the match. (#3460)
  - Fix a regression where some nodes might not set running in some
    cases.
  - Nodes are now suspended before the format is cleared, which might
    fix some crashes.

## Tools
  - pw-top now has a batch mode to dump the output to stdout.

## SPA
  - The queued samples in audioconvert are now correctly reported in the
    delay. (#3454)
  - Make it easier to add a custom profile in ACP.
  - Fix a typo in the neon sample conversion functions that could cause
    distortion. (#3463)
  - device.profile.pro=true is added for pro audio nodes.
  - An xrun counter was added to spa_io_clock to detect and track skipped
    data because of xruns.

## Pulse-server
  - Add alsa-sink and alsa-source modules. (#3456)

## Bluetooth
  - Fix a regression where only the BAP off profile is shown.
  - Add BAP broadcast source and sink support.

## JACK
  - Also emit a latency notify when the buffer size changes.
  - Fix a regression in JACK port registration. (#3485)
  - jack_port_tie() is now supported.

## ALSA
  - Improve property handling, support lists and ranges in addition to
    fixed values. (#3451)

# PipeWire 0.3.78 (2023-08-22)

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

## Highlights
  - An old regression was fixed with where some nodes would not run.
  - A regression was fixed where removed events would not be shown in some
    cases. This would result in duplicate entries in audio clients.
  - Fix an off-by-one in the vban audio receiver. Tweak the rate adaption
    a little.
  - ACP will now set a UCM verb before probing the pro-audio devices.
  - More bugfixes and improvements.


## PipeWire
  - An old regression was fixed with where some nodes would not run. (#3405)
  - Suspend was improved a little to avoid races when the session manager would
    suspend right when a driver was starting.

## Modules
  - module-rtp-sap does not use the deprecated inet_aton anymore.
  - Fix an off-by-one in the vban audio receiver. Tweak the rate adaption
    a little. (#3380)

## SPA
  - ACP will now set a UCM verb before probing the pro-audio devices. (#3407)
  - The mandatory flag will be set now on the video modifiers.
  - EVL was updated to Xenomai4 r46 and xbuf creation was improved.
  - An option was added to force colors in the log even when logging to !tty.
  - The return type of spa_pod_builder_control() was fixed.
  - inotify errors are handled better now. (#3439)

## pulse-server
  - A regression was fixed where removed events would not be shown in some
    cases. (#3414)

## Bluetooth
  - Improve compatibility with more devices, avoid reusing the same transport
    for different media-sink instances to avoid encoder resets.
  - Improve enumeration of codec profiles for BAP and A2DP.

## JACK
  - Ensure we can't iterate ports from a deactivated client. Also make sure
    the JACK clients with the node.always-process=false always show their
    ports. (#3416)

## GStreamer
  - A potential crash was fixed in the device provider when stopping.

# PipeWire 0.3.77 (2023-08-04)

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

## Highlights
  - Fix a bug in ALSA source where the available number of samples was miscaluclated
    and resulted in xruns in some cases.
  - A new L permission was added to make it possible to force a link between
    nodes even when the nodes can't see eachother.
  - The VBAN module now supports midi send and receive as well.
  - Many cleanups and small fixes.


## PipeWire
  - Global objects now only show permissions that apply to them. The permissions
    required to perform various API calls are documented.
  - A new L permission was added to make it possible to force a link between
    nodes even when the nodes can't see eachother.
  - Config files need to end with .conf.
  - The client.api is added the to global properties of a node.

## modules
  - The VBAN module now supports midi send and receive as well.
  - Fix module-profiler alignment and make sure we don't overrun our buffers with
    many nodes.
  - Protect libcanberra calls with a mutex because it is not thread safe. (#2834)

## SPA
  - Support older compilers for spa_clear_ptr().
  - Fix a bug in ALSA source where the available number of samples was miscaluclated
    and resulted in xruns. (#3395)
  - Don't set inotify on /dev but on the videoX devices directly. Setting inotify
    on /dev would cause a lot of spurious wakeups and lock contention in the
    fsnotify subsystem on some benchmarks.
  - Audioconvert now rate limits the warnings when it runs out of buffers. (#3384)

## pulse-server
  - Some bugs and inconsistencies were fixed in device lookup.
  - Improve subscribe event emission, detect changes to the sink or the monitor
    and send the right sink/source event. (#3388)

## JACK
  - The libjack.so now has a minor version of 3 and a micro version of the pipewire
    version.
  - JACK clients will now see portregistration from other jack clients when they
    activate/deactivate like real JACK. (#3260)

## bluetooth
  - Use some more autoptr cleanups, fix some leaks.

# PipeWire 0.3.76 (2023-07-28)

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

## Highlights
  - Fix a regression that would cause the MPV pipewire backend to fail because
    of a spurious thread-loop signal.
  - Fix a crash when DBus is not found.
  - ALSA hires timestamps are now disabled by default.
  - Some more fixes and improvements.

## PipeWire
  - A new option was added to pw-thread-loop to signal when the thread starts.
    This is only used in module-rt to avoid regressions in mpv. (#3374)
  - Fix a compilation problem.
  - Stream flags now only set the properties when not already set. This fixes
    a regression with node autoconnect. (#3382)

## Tools
  - pw-cat will now stop when the stream is disconnected. (#2731)
  - Improve the pw-cat man page, mention that stdin/stdout handling is only
    on raw data.

## modules
  - module-rt will now not crash when dbus is not available but error out as
    before.
  - A new VBAN (vb-audio.com) sender and receiver was added. (#3380)

## SPA
  - Add an option in audioconvert to disable volume updates. (#3361)
  - ALSA hires timestamps are disabled by default because many drivers seem to
    give wrong timestamps and cause extra delay.

## bluetooth
  - LE Audio support is now enabled by default when liblc3 is available now that
    bluez has support for detecting the hardware features.

# PipeWire 0.3.75 (2023-07-21)

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

## Highlights
  - Link permissions between nodes are now enforced. This avoids potential portal
    managed screencast nodes to link to the camera even though it was not assigned
    permissions to do so by the session manager.
  - Libcamera and v4l2 devices now have properties so that duplicates can be
    filtered out by the session manager.
  - A bug with draining was fixed where a buffer would be marked EMPTY and would not
    play when it contained drained samples. (#3365)
  - Many fixes and improvements.


## PipeWire
  - Permissions for links between nodes are now enforced. The link will now check
    that the owner clients of the nodes can see eachother before allowing the link.
    This avoids screensharing clients to accidentally being linked to the camera
    nodes by the session manager. A side effect is that patchbay tools will no longer
    be able to link portal managed screencast nodes to the camera, for this we need
    a new permission for those patchbay clients. (wireplumber#218)
  - The stream.rules/filter.rules are now evaluated when connecting the stream/filter
    so that more properties can be matched. (#3355)
  - Move some internal events from the context to the nodes to better handle per-node
    threads in the future.
  - The thread-loop will now signal when the thread is started.

## modules
  - A timestamp workaround in module-raop was reverted because it does not work
    in all cases. Instead latency was increased to 1.5 seconds, which also makes
    the problematic device in question work. (#3247)
  - The profiler module was reworked a bit to use the new node realtime events. It
    should now also handle dynamically added and removed drivers.
  - The module-rt now does the rtkit calls from a separate thread so that it does
    not block the main thread. This could cause deadlocks during startup in some
    cases. (#3357)

## SPA
  - Atomic operation macros were move from internal pipewire API to public API.
  - The video-info structure now has a new SPA_VIDEO_FLAG_MODIFIER_FIXATION_REQUIRED
    flag to instruct the application to fixate the modifiers. This simplifies some
    logic in applications a lot.
  - The libcamera and v4l2 nodes now have properties to enumerate the device id
    they are using. This can be used to match v4l2 devices and libcamera devices
    and filter out duplicates.
  - A bug with draining was fixed where a buffer would be marked EMPTY and would not
    play when it contained drained samples. (#3365)

# PipeWire 0.3.74 (2023-07-12)

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

## Highlights
  - Fix a critical bug where audio to bluetooth devices would cut out
    randomly. (#3316)
  - Improve RAOP compatibility.
  - Avoid crashes after an update.
  - Small fixes and improvements.


## PipeWire
  - Mix info on port is now created explicitly.
  - Remove the node as a driver peer when stopping. This caused some problem
    with playback on and other remote bluetooth devices. (#3316)
  - Work on avoiding crashes when loading new modules that use internal API
    with old libpipewire. This is typical after an update where the old library is
    still loaded by an application but when a new stream is created, updated
    modules are loaded. (#3243)

## Modules
  - The RTP source module now has an option to ignore the SSRC, which is
    useful to continue to receive the stream when the sender is restarted.
  - The native protocol will refuse to load twice now instead of silently
    ignoring the error.
  - module-raop is compatible with more devices. (#3247)

## SPA
  - plugins will now warn when running out of buffers. This is always a bad
    thing.
  - Merge scope based cleanup macros.
  - Add ratelimit function.

# PipeWire 0.3.73 (2023-07-06)

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

## Highlights
  - Fixes an ALSA resume after suspend error.
  - Handle and disable seemingly wrong hires timestamps from ALSA.
  - Filter-chain now has loadable plugin modules. The LV2 and sofa plugins are
    moved to a separate .so file to make things more modular.
  - Rate changes in the graph should now be handled more gracefully by loopback
    and filter-chain.
  - A regression in the rtp-sap module was fixed where it would in some cases
    fail to start.
  - A potential crash in the peaks resampler was fixed.
  - Many cleanups and other small bug fixes.


## PipeWire
  - Fix a potential segfault when no fallback driver was set in the config.
  - Improve OPUS detection.
  - Add ASYNC flag to pw-filter and pw-stream when queue/dequeue is not called
    from the process function. This ensure we allocate an extra buffer.
  - Discard pending process callbacks when disconnecting. (#3314)
  - Cleanups and improvements to the debug environment variable parsing.
  - The graph rate was tweaked to better handle very low rates such as those
    requested by pavucontrol when it does the signal monitoring.

## Modules
  - An example filter module was added.
  - Filter-chain and loopback now disable the resamplers if no rate is specified
    and will always follow the graph rate.
  - Improve setup of filter-chain. The graph is now created when starting
    because this ensure the target graph rate is known.
  - Filter-chain can now link notify ports to control ports in the graph.
  - Filter-chain now has loadable plugin modules. The LV2 and sofa plugins are
    moved to a separate .so file.
  - A regression in the rtp-sap module was fixed where it would in some cases
    fail to start.
  - Module-rt now has options to disable rlimits, portal and rtkit.
  - module-raop-discover now has an options to set the latency. (#3247)

## Tools
  - pw-cat now supports overriding all stream properties.

## SPA
  - Disable rate negotiation when the resampler is disabled. We will always
    follow the graph rate. 
  - Set device.icon property for UCM ports as well.
  - Improve ALSA recover when using hires timestamps. This fixes some problems
    after resume from suspend. (#3315)
  - ALSA will now warn and disable hires timestamp when they seem wrong.
    They can also be disabled manually with a property.
  - V4l2 will now gracefully handle ENOTTY when enumerating frame sizes and
    frame rates. (#3325)
  - A potential crash in the peaks resampler was fixed. (#3320)

## pulse-server
  - A client crash in pavucontrol is avoided by always setting a card name.
  - The graph rate is now taken correctly when using the FIX flags. (#3317)
  - An option was added to ignore the FIX flags of a stream. Also the
    documentation for those options was updated. (#3317)
  - module-raop-discover now support latency_msec. (#3247)

## Bluetooth
  - Remove an assert and issue a warning/recover instead when a buffer is too
    small.

## GStreamer
  - The device provider does locking when destroying the registry.

# PipeWire 0.3.72 (2023-06-26)

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

## Highlights
  - Fix a critical bug that would refuse to update the samplerate or
    buffersize in JACK clients. (#3226)
  - A new module-netjack2-driver and module-netjack2-manager were added
    that are compatible with NETJACK2. This allows PipeWire to become
    a NETJACK2 manager or a driver between JACK2 or PipeWire servers.
  - Support was added for firewire devices with FFADO. This is untested
    for now and MIDI is not implemented yet.
  - The node scheduling was optimized some more. External drivers are now
    as efficient as in-server ones. This should improve performance of
    various drivers such as bluetooth and JACK based drivers.
  - Many, many bug fixes and a ton of improvements.


## PipeWire
  - pw-filter can now be used to write sinks and sources.
  - The node activation for drivers was changed. The driver now does not
    need to go to the server to start the processing cycle. This makes
    out-of-server drivers as efficient as in-server drivers.
  - Don't try to use drivers with 0 priority as fallback drivers. This
    avoids making the screencast driver a driver for audio. (#3219)
  - Improve xrun count reporting in pw-top and the profiler. Now each
    node has their own xrun counter updated when it fails to complete
    processing during the cycle.
  - pw-filter now also has support for TRIGGER.
  - A potential fd leak was found when fds were send to a zombie client.
    (#1840)
  - Fix a bug where monitor or capture streams were logged twice in the
    profiler. (#3278)
  - Remove stream hooks safely. (#3251)
  - A bug in serialization of container properties was fixed. This could
    result in truncated property values. (#3290)
  - The PIPEWIRE_AUTOCONNECT environment variable now always overrides the
    autoconnect settings of streams. (#3299)
  - Node, port and link destroy now avoids some useless work.
  - Port will now try to renegotiate a new format when idle. (#3266)

## Modules
  - The module-sap now is more compatible with AES67.
  - A new FFADO driver module was added. This is completely untested because
    of lack of hardware. Please test and report issues.
  - A new NETJACK2 driver and a NETJACK2 manager module were added. These
    should be drop in replacements for the JACK2 parts.
  - The RAOP discover module now tries harder to only list devices once.
  - The zeroconf discover module now tries harder to only list devices once.
  - The RAOP sink module now handles latency better and is compatible with
    some more devices. (#3247, #3282)
  - The loopback and filter-chain modules now always dequeue the last input
    buffer to avoid stuttering in some cases. (#3276)
  - The SPA node factory module can now also export nodes. This is used to
    export the PTP clock from the AES67 config file.
  - A bug in module-jack-tunnel was fixed that would cause stuttering and
    corrupted output in some cases. (#3255)
  - The resampler is now disabled in module-loopback and filter-chain when
    the samplerate is set to follow the graph rate. (#2969)
  - The way the mixer peer is sent to clients was improved. It is now also
    possible to let a remote node know about mixer port removes, which
    can avoid memory leaks and some code simplifications.

## SPA
  - Monitor ports now report latency correctly.
  - The ALSA plugin now uses htimestamp to get a more accurate ringbuffer
    position to estimate the clock skew.
  - The channelmixer now has min/max-volume settings to limit or fix the
    volume.
  - The ALSA plugin can now control the playback and capture rate of USB
    gadgets. This can avoid resampling and instead use the USB feedback
    to control the rate.
  - The ALSA output to multiple devices has been improved, some lockups
    are avoided when the device ringbuffer is full.
  - The compress-offload sink has improved negotiation.

## pulse-server
  - Only try to use GSettings when the schema exists.
  - @DEFAULT_SOURCE@, @DEFAULT_SINK@ and @DEFAULT_MONITOR@ are now correctly
    handled as targets in playback and capture streams. (#3284)
  - 2 new quirks are added to disable volume updates on sinks/sources.
    (#1517)
  - The virtual-sink and virtual-source modules were added. These are really
    example modules but actually also work and are useful on PulseAudio so
    implement them as well.
  - Fix initial stream volumes. (#3306)

## Bluetooth
  - Only register A2DP or BAP when we have codecs.
  - Include codec into the media.name

## JACK
  - Fix a critical bug that would refuse to update the samplerate or
    buffersize. (#3226)
  - Improve updates of samplerate/buffersize, delay the updates until the
    client is activated. (#3297)
  - Use the new mix-info updates to simplify the mixer setup and peer
    detection.

## GStreamer
  - Fill default strides instead of 0 on pipewire video buffers. (#3236)

# PipeWire 0.3.71 (2023-05-17)

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

## Highlights
  - A new zero-latency jackdbus bridge was added. This works similar to what
    PulseAudio has to offer and creates a sink/source when jackdbus is
    started. It is however much more efficient and runs the complete PipeWire
    graph as a synchronous JACK client with no added latency.
  - Many performance improvements. Activation of remote nodes is more
    efficient, fewer eventfds are required on the clients, less callback
    overhead in performence critical paths and an optimized poll function
    was added. This was mainly driven by the jackdbus module to get the lowest
    possible overhead when running the graph.
  - The JACK notify callback implementation was reworked to emulate better what
    JACK does, improving compatibility with ardour7 and the JACK stress test.
  - More work on BAP devices. Device latency is now passed on to
    applications also for multi-device headsets, and channel allocation
    is handled better.
  - Many more improvements and bugfixes.


## PipeWire
  - Remove the hardcoded limit on io_areas. This is used to link nodes together
    and exchange buffers, it was limited to 2048 but now dynamically scales
    based on requirements.
  - Rate and quantum changes are now applied correctly in more cases. (#3159)
  - Updates to client-node to more efficiently process the driver.
  - The profiler information was improved to be more accurate. It should
    now work better for remote drivers.
  - Some potential memory map errors were fixed in the protocol because in some
    case with large messages, some fds were closed too soon.
  - pw-filter now implements the pw_filter_set_active() method.
  - A potential out-of-buffers case was fixed in capture pw-streams where buffers
    were not moved to the recycle queue when the node suspended.
  - Nodes are now always woken up with the eventfd. Previously there were
    some optimiztions in the server to directly call into the node process
    function but that optimization is not necessary. Without this optimization
    it is now possible to run nodes in different threads.
  - pw-stream trigger is now implemented correctly in all cases.
  - Remote nodes now use one eventfd less because they get triggered with the
    node eventfd directly.
  - Monitor ports are now ignored in latency updates.
  - A potential race when reporting an error to a client was fixed. (#3192)
  - Fix a bug where always_process nodes would sometimes IDLE. (#3189)
  - Optimize peer activation. Nodes are now activated more efficiently and
    independent of the number of links. It also reduces the number of eventfds
    and memory in remote clients.
  - A bug in property serialization was fixed. Values with spaces would only
    serialize the first part of the value.

## Modules
  - Correctly handle the echo-canceler plugin init method fallback. The
    samplerate was not correctly configured. This is only a regression for people
    that have external echo-canceler plugins.
  - RAOP sink now only sets the volume on the remote end when the stream is
    recording. (#3175)
  - RAOP discover now tries to deduplicate entries from the same host.
  - A new zero-latency jackdbus bridge was added. This works similar to what
    pulseaudio has to offer and creates a sink/source when jackdbus is
    started. It is however much more efficient and runs the complete PipeWire
    graph as a synchronous JACK client.
  - The access module uses a more secure way to check the application
    executable.
  - module-combine-stream now has configurable delay and latency for each
    stream. This can be used to align sinks/sources with different latencies.
  - A potential crash in module-pulse-tunnel was fixed when shutting down.
    (#3199)
  - Module-rt will now clamp the nice value to the min allowed value to avoid
    errors from rtkit. (#3186)
  - Fix a bug with the session counters in module-rtp-sap. Also use the right
    format for L24. Improve the AES67 example config.
  - Improve some warning and info messages in module-rt. (#3194)
  - module-rtp-session should now do something when started without arguments.
  - A potential crash in module-rtp-session was fixed. (#3217)
  - module-filter-chain has better error reporting when a convolver fails to
    load. (#3223)

## SPA
  - Move some things around to avoid compiler warnings. (#3171)
  - Increase mixer ports. Reorganize some things and bump mixer input ports
    from 128 to 512.
  - Fix a potential crash when a node is scheduled before it completes
    the setup.
  - The JACK sink and source SPA plugins have seen some improvements.
  - Allow the peaks resampler still if we disabled resampling.
  - Perform more cleanup in audioadapter when in error.
  - An optimized non-cancellable loop implementation was added.
  - Callbacks were optimized with a _fast() varsion that doesn't check the
    version and method. When this check is performed earlier, it can
    be skipped in performance critical places.
  - Some of the callbacks and system methods are now using the fast function
    calls in critical paths.
  - A potential division by zero was fixed in the ALSA plugins.
  - Improve rate and quantum when starting audioconvert.
  - Make it possible to override node.driver in the SPA null-audio-driver.
    (#3220)

## pulse-server
  - The audio info parameter parsing was refactored and improved.
  - Fix some races with clients exiting when playing samples.
  - An option was added to change or disable the dbus name registration.
    (#2987)

## Bluetooth
  - Implement battery reporting using AT+XEVENT.
  - Disable hardware volume for 3M WorkTunes.
  - Implement BAP audio locations (channel positions) by using the new
    bluez properties.

## JACK
  - Fix some errors reported by JACK test.cpp. (#2638)
  - Add jack.show-midi option to show/hide midi ports.
  - Add jack.max-client-ports option. JACK also has a port limit and so
    PipeWire needs it as well to make the tests happy.
  - Call the shutdown callback only when the server stopped, not when there
    is a random error. (#3070)
  - Avoid registering the same port name twice.
  - Call port registration callbacks in activate/deactivate.
  - Improve jack_port_connected().
  - Improve some error reporting.
  - The JACK headers were updated to a newer version.
  - JACK callbacks are now managed with an event queue to simulate
    more what JACK does. This avoids emiting callbacks when a method is blocking
    for a reply and causing deadlocks. (#3183)
  - Assign unique names to JACK clients. (#2833)
  - Fix a potential crash when the thread_utils was used after free.
  - Aliases are now not filled in by default to improve JACK compatibility.
    (#3154)

# ALSA
  - The ALSA plugin will now wait for negotiation to complete or an error
    before _prepare() completes. This makes more applications deal correctly
    with the potential errors.

# Docs
  - A new document about how scheduling is implemented was added.
  - Update the pw-cli man page. (#2988)
  - Document the SPA Pod serialization.
  - Document the PipeWire native protocol.

# PipeWire 0.3.70 (2023-04-20)

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

## Highlights
  - Fix a regression in the scheduler that could keep some nodes IDLE.
  - Fix a regression in the biquad filters in filter-chain.
  - Fix a regression and potential crash in the ALSA mixer probing.
  - Fix a regression in pipewiresrc with timestamps that could cause cheese
    to record video with wrong timestamps.
  - Beamforming support was enabled in the echo-canceler.
  - pulse-tunnel and raop-sink will now proxy local volume changes to the
    remote end.
  - More bugfixes and improvements.


## PipeWire
  - Fix a bug in the graph scheduler where some nodes might stay IDLE in
    some cases (like when connecting the source of the echo-canceler to the
    sink).
  - pw-metadata can now be created from the factory with initial values for
    the metadata. (#3076)
  - Conditions were added to the pipewire config file to make it possible to
    configure the access module and the exec sections.
  - Support was added in pw-stream to intercept and override properties for
    the adapter. This can be used to implement custom volume control, for
    example.

## Tools
  - pw-metadata can now list all available metadata objects with the -l
    option.
  - A new pw-config tool was added to debug configuration file loading and
    parsing.

## Modules
  - The webrtc echo canceler now supports beamforming. You can provide the
    coordinates of the microphones and let webrtc perform beamforming on
    the captured samples to improve quality and remove noise.
  - Fix a regression in the filter-chain with biquad filters. (#3161) and
    improve error reporting.
  - The pulse-tunnel will now proxy the volume changes to the remote end.
  - The RAOP sink will now send volume parameters to control the volume
    remotely. (#2061)

## SPA
  - One ALSA commit was not correctly reverted and might cause crashes.
  - The ALSA sink and source now calculate the ALSA ringbuffer memory
    location more correctly wich might improve compatibility with some
    hardware.
  - v4l2 now sets the values of the controls in the Props param.

## Pulse-server
  - The echo-canceler aec_args are now parsed like they would be under
    pulseaudio.

## Bluetooth
  - More work on synchronizing BAP devices.

## GStreamer
  - The GStreamer source can now renegotiate the format when it changes.
  - The GStreamer source now uses the BaseSrc clocking code to implement
    the clock and timing code.

# PipeWire 0.3.69 (2023-04-13)

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

## Highlights
  - Reverted the UCM changes, they seem to cause regressions causing audio
    to be muted in some cases.
  - Fix a regression in the scheduler where a driver node might not be marked
    runnable in some cases, like when echo-cancel is used. (#3145)
  - Handle links from the driver to itself. This makes the midi bridge work
    again. (#3153)
  - ALSA rate matching for sources was fixed. It would previously wait too
    long for rate matching and then cause drift. This should reduce
    crackling and stuttering whan capturing in low latency.
  - Fix the GStreamer clock to make cheese video recording work again. (#3149)
  - More fixes and improvements.

## PipeWire
  - Fix a regression in the scheduler where a driver node might not be marked
    runnable in some cases, like when echo-cancel is used. (#3145)
  - Handle links from the driver to itself. This makes the midi bridge work
    again. (#3153)
  - Some man pages were improved.
  - Fix a potential crash when thread-loop is destroyed before the loop.
    (#3150)

## Modules
  - A new raw biquad filter was added to filter-chain. You can manually set the
    6 parameters and you can use this to create custom filters per sample rate.
    (#3139)
  - The echo-canceler now supports different channels for the capture and playback
    streams.

## SPA
  - A SB Audigy specific profile set was added to make better use of the
    controls. (#2934)
  - More ALSA IRQ based scheduling improvements.
  - ALSA rate matching for sources was fixed. It would previously wait too
    long for rate matching and then cause drift. This should reduce
    crackling and stuttering whan capturing in low latency.
  - The echo-cancel plugin API has a new method to make it possible to have
    different channels for capture, source and playback.
  - Reverted the UCM changes, they seem to cause regressions causing audio
    to be muted in some cases.

## Bluetooth
  - Many more BAP fixes and improvements. Devices are now created as a set
    and can be combined into one device by the session manager.

## GStreamer
  - Fix the GStreamer clock to make cheese video recording work again. (#3149)

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

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