pipewire/spa/plugins
Pauli Virtanen de34ce606f bluez5: media-source: fix off-by-one cycle in rate matching
The rate matching filter assumes buffer level for cycle j+1 is

    buffer(j+1) = buffer(j) + recv(j) - corr(j+1) * duration

but what we are actually doing is instead

    buffer(j+1) = buffer(j) + recv(j) - corr(j-1) * duration

because the correction factor that is computed is not used for the next
cycle, but the one following that. Although the filter is still stable
in theory the extra lag causes oscillations to be damped less.

Fix by using the computed correction factor for the next cycle, as
there's no reason why we'd like to have more lag in rate matching.

This then changes c(j-1) -> c(j) in the assumptions, which turns out to
fix the situation. Fix the filter derivation to match.  The filter
coefficients stay as they were, and they are actually exactly correct
also for short averaging times.

In practice, it is observed that ISO RX with quantum 4096 converges to
stable rate, whereas previously the matching retained small
oscillations.
2026-01-05 15:34:06 +00:00
..
aec spa: aec: webrtc: Expose echo canceller mobile_mode 2025-07-09 13:02:18 -04:00
alsa spa: alsa: Fix off-by-one check in ELD channel position parsing 2025-12-17 11:08:44 -08:00
audioconvert Adds explanation to reduce chance of regressing the fix 2025-12-15 08:20:24 +00:00
audiomixer audiomixer: only passthrough on dynamic data 2025-12-01 16:33:50 +01:00
audiotestsrc audiotestsrc: Operate as follower too 2025-12-16 13:15:00 +01:00
avb modules: support audio.layout where we can 2025-10-30 12:29:31 +01:00
bluez5 bluez5: media-source: fix off-by-one cycle in rate matching 2026-01-05 15:34:06 +00:00
control control: unit test for event sort 2025-09-17 13:42:12 +02:00
ffmpeg spa: use log topics everywhere 2024-03-11 18:45:21 +02:00
filter-graph filter-graph: add feedback and feedforward to delay 2025-11-28 17:10:55 +01:00
jack *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
libcamera spa: libcamera: source: ignore frame rate 2025-11-21 08:20:30 +00:00
support support: return NULL instead of FALSE 2026-01-03 22:54:25 +01:00
test spa: make the wave, pattern and ditherType Int 2025-06-13 10:06:09 +02:00
v4l2 spa: ensure enum always has 2 values 2025-11-04 09:23:26 +01:00
videoconvert spa: add Capability and PeerCapability 2025-11-21 10:08:46 +01:00
videotestsrc loop: spa_loop_invoke -> spa_loop_locked where possible 2025-05-30 11:59:35 +02:00
volume treewide: access the position information using helpers 2025-10-21 13:06:25 +02:00
vulkan spa: vulkan: map VK_INCOMPLETE to ENOSPC 2025-07-12 19:54:14 +00:00
meson.build filter-chain: move the filter-graph to plugins 2024-11-13 11:12:06 +01:00