[pulseaudio-discuss] [PATCH 00/22] Optimize latency handling in module-loopback

Georg Chini georg at chini.tk
Mon Feb 13 12:01:57 UTC 2017


This is version 7 of the loopback patch series. It includes many fixes
based on Tanu's review as well as two new features. The main changes
compared to the original loopback module are:

- Reduce latency jitter by a factor 100 from around 30 ms to 300 usec
- Implement modified P-controller and optimize adaptive re-sampling
- Underrun protection
- Latency initialisation to avoid underruns
- Adjust to specified latency if possible, else use minimum possible latency
- Allow smooth switching between different sources and sinks
- Wait for source and sink to start up (new in v7)
- Gracefully handle changes of port latency offsets (new in v7)
- some new parameters

Results achieved with the new code and theoretical background can be
found at
https://www.freedesktop.org/software/pulseaudio/misc/rate_estimator.odt

Georg Chini (22):
  loopback: Rename sink_input_buffer to loopback_memblockq_length
  loopback: correct comments about the thread calling a function
  loopback: Initialize latency at startup and during source/sink changes
  loopback: Do not skip audio at startup
  loopback: Calculate and track minimum possible latency
  loopback: Add hooks to track port latency offsets
  loopback: Reset sink input rate when source or sink changes
  loopback: Implement underrun protection
  sample.c: Allow module-loopback to exceed PA_RATE_MAX
  source/sink: Allow pa_{source,sink}_get_latency_within_thread() to
    return negative values
  source/sink: Don't let pa_{sink, source}_getLatency_within_thread()
    return -1 if process_msg() fails
  loopback: Use new feature of
    pa_{source,sink}_get_latency_within_thread()
  loopback: Track and use average adjust time
  loopback: Limit controller step size to 2.01‰
  loopback: Optimize adaptive re-sampling
  loopback: Add latency prediction and Kalman filter
  loopback: Track prediction error; debug and cosmetic changes
  loopback: Add adjust_threshold_usec parameter
  loopback: Only use controller weight after target latency has been
    crossed twice
  loopback: Add low_device_latency parameter
  loopback: Add adjust_time_msec parameter to allow adjust times below
    1s
  loopback: Add log_interval and log_interval_msec parameter

 src/modules/alsa/alsa-sink.c                 |   13 +-
 src/modules/alsa/alsa-source.c               |    8 +-
 src/modules/bluetooth/module-bluez4-device.c |   16 +-
 src/modules/bluetooth/module-bluez5-device.c |   10 +-
 src/modules/echo-cancel/module-echo-cancel.c |   16 +-
 src/modules/jack/module-jack-sink.c          |   12 +-
 src/modules/jack/module-jack-source.c        |    2 +-
 src/modules/macosx/module-coreaudio-device.c |    4 +-
 src/modules/module-combine-sink.c            |    5 +-
 src/modules/module-equalizer-sink.c          |    6 +-
 src/modules/module-esound-sink.c             |    2 +-
 src/modules/module-ladspa-sink.c             |    6 +-
 src/modules/module-loopback.c                | 1072 +++++++++++++++++++++++---
 src/modules/module-null-sink.c               |    2 +-
 src/modules/module-null-source.c             |    2 +-
 src/modules/module-pipe-sink.c               |    2 +-
 src/modules/module-pipe-source.c             |    2 +-
 src/modules/module-remap-sink.c              |    6 +-
 src/modules/module-remap-source.c            |    6 +-
 src/modules/module-sine-source.c             |    2 +-
 src/modules/module-solaris.c                 |    2 +-
 src/modules/module-tunnel-sink-new.c         |   10 +-
 src/modules/module-tunnel-source-new.c       |   12 +-
 src/modules/module-tunnel.c                  |    4 +-
 src/modules/module-virtual-sink.c            |    8 +-
 src/modules/module-virtual-source.c          |    6 +-
 src/modules/module-virtual-surround-sink.c   |    6 +-
 src/modules/module-waveout.c                 |    2 +-
 src/modules/oss/module-oss.c                 |    2 +-
 src/modules/raop/raop-sink.c                 |   11 +-
 src/modules/rtp/module-rtp-recv.c            |    2 +-
 src/pulse/sample.c                           |    5 +-
 src/pulsecore/core.h                         |    2 +
 src/pulsecore/protocol-native.c              |    6 +-
 src/pulsecore/sink-input.c                   |    2 +-
 src/pulsecore/sink.c                         |   31 +-
 src/pulsecore/sink.h                         |    2 +-
 src/pulsecore/source-output.c                |    4 +-
 src/pulsecore/source.c                       |   27 +-
 src/pulsecore/source.h                       |    2 +-
 40 files changed, 1086 insertions(+), 254 deletions(-)

-- 
2.10.1



More information about the pulseaudio-discuss mailing list