[client] audio: adapt buffer to network jitter
Some checks failed
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled

This commit is contained in:
Geoffrey McRae
2026-08-12 14:36:57 +10:00
parent 173316a5a9
commit 52f7c3a896

View File

@@ -2367,18 +2367,14 @@ static PlaybackDataResult playbackData(const void * data, size_t frameCount,
sourceData->sourcePacketDurationSec * audio.playback.sampleRate); sourceData->sourcePacketDurationSec * audio.playback.sampleRate);
/* The device period, delivery jitter, packet phase, and resampler delay /* The device period, delivery jitter, packet phase, and resampler delay
* define the minimum viable latency. Provider feedback directly controls * define the minimum viable latency. Provider feedback directly controls
* the source rate, so latencyOffset only applies to local rate control. * the source rate, so latencyOffset only applies to local rate control. */
* Provider delivery reserve is bounded because late USB packets must be
* skipped rather than allowed to become persistent playback latency. */
const double latencyOffsetFrames = providerRateControl ? 0.0 : const double latencyOffsetFrames = providerRateControl ? 0.0 :
max(g_params.audioLatencyOffset, 0) * max(g_params.audioLatencyOffset, 0) *
audio.playback.sampleRate / 1000.0; audio.playback.sampleRate / 1000.0;
const double arrivalJitterFrames = const double arrivalJitterFrames =
sourceData->arrivalJitterSec * audio.playback.sampleRate; sourceData->arrivalJitterSec * audio.playback.sampleRate;
const double arrivalReserveFrames = const double arrivalReserveFrames =
(providerRateControl ? arrivalJitterFrames + 0.001 * audio.playback.sampleRate;
min(arrivalJitterFrames, backlogGuardFrames) :
arrivalJitterFrames) + 0.001 * audio.playback.sampleRate;
const double minimumLowWaterReserveFrames = const double minimumLowWaterReserveFrames =
maxPeriodFrames * 0.1 + arrivalReserveFrames; maxPeriodFrames * 0.1 + arrivalReserveFrames;
const double minimumLowWaterFrames = const double minimumLowWaterFrames =