On 14.07.2016 00:18, Tanu Kaskinen wrote:
On Sun, 2016-06-05 at 21:05 +0200, Georg Chini wrote:
Hi,

finally I got around to split the loopback patches. The current version has
a lot of improvements over the last version and hopefully incorporates the
comments from Tanu's previous review. Main features of the new code are:

- Reduce latency jitter by a factor 100 from around 30 ms to 300 usec
- Implement modified P-controller and 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
- 3 new parameters

The intermediate results are tested to compile but not for functionality.

More details can be found in the individual commit messages. The theoretical
background of the controller is covered in the document "rate_estimator.odt"
which I will send in a separate mail. The document also contains some results
achieved with the new code.

Georg Chini (25):
   loopback: Save time stamps during latency snapshots
   loopback: Improve latency estimation in snapshots
   loopback: Improve latency estimation
   loopback: Change memblockq length
   loopback: Move timer restart and snapshots to time callback
   loopback: Restart timer after 1/3 second
   loopback: Adjust rate based on latency difference
   loopback: Stop tracking max_request and min_memblockq_length
   loopback: Refactor latency initialization
   loopback: Do not skip audio at startup
   loopback: Calculate and track minimum possible latency
   loopback: Implement underrun protection
   sample.c: Allow module-loopback to exceed PA_RATE_MAX
   source.c, sink.c: Implement
     pa_{source,sink}_get_raw_latency_within_thread() calls
   alsa-{source,sink}.c: Handle PA_{SOURCE,SINK}_MESSAGE_GET_RAW_LATENCY
   loopback: Reset sink input rate when source or sink changes
   loopback: Track and use average adjust time
   loopback: Limit controller step size to 2.01‰
   loopback: Implement adaptive re-sampling
   loopback: Add latency prediction and Kalman filter
   loopback: Track prediction error; debug and cosmetic changes
   loopback: Allow shorter adjust_time
   loopback: Add low_device_latency parameter
   loopback: Add adjust_threshold_usec parameter
   loopback: Add log_interval parameter

  src/modules/alsa/alsa-sink.c   |  25 +-
  src/modules/alsa/alsa-source.c |  20 +-
  src/modules/module-loopback.c  | 786 +++++++++++++++++++++++++++++++++--------
  src/pulse/sample.c             |   5 +-
  src/pulsecore/sink.c           |  30 ++
  src/pulsecore/sink.h           |   2 +
  src/pulsecore/source.c         |  30 ++
  src/pulsecore/source.h         |   2 +
  8 files changed, 732 insertions(+), 168 deletions(-)
I pushed the first 8 patches now, since they're fine and I don't need
them to be resubmitted. (I complained about a variable name in patch 2,
but the variable can be renamed in a separate commit.) The 9th patch
had some issues, so patches from that onwards probably need to be
resubmitted. You can resubmit at any time you like, or you can wait
until I've commented on the rest of the patches.
Thanks for review and pushing the first patches. I'll wait until your
review is complete before I re-submit, otherwise I will probably have
to change things too often.

_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to