From 4a2c23db4eddd827ac81513af43bc92475ad7d3a Mon Sep 17 00:00:00 2001 From: Sebastian 'gonX' Jensen Date: Sun, 20 Jun 2021 17:02:15 +0200 Subject: [PATCH 2/4] 5.14 Latency Fix --- dlls/winepulse.drv/mmdevdrv.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 07407089ac5af65eb13d6e00b6d0969a61ec5589..3ed47e38c830987e4bcc2e9f5c59c7773fe686f1 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -68,9 +68,6 @@ enum DriverPriority { Priority_Preferred }; -static const REFERENCE_TIME MinimumPeriod = 30000; -static const REFERENCE_TIME DefaultPeriod = 100000; - static pa_context *pulse_ctx; static pa_mainloop *pulse_ml; @@ -510,11 +507,12 @@ static void pulse_probe_settings(int render, WAVEFORMATEXTENSIBLE *fmt) { if (length) pulse_def_period[!render] = pulse_min_period[!render] = pa_bytes_to_usec(10 * length, &ss); - if (pulse_min_period[!render] < MinimumPeriod) - pulse_min_period[!render] = MinimumPeriod; - - if (pulse_def_period[!render] < DefaultPeriod) - pulse_def_period[!render] = DefaultPeriod; + const char* penv = getenv("STAGING_AUDIO_PERIOD"); + if (penv) { + int val = atoi(penv); + pulse_def_period[!render] = pulse_min_period[!render] = val; + printf("Staging audio period set to %d.\n", val); + } wfx->wFormatTag = WAVE_FORMAT_EXTENSIBLE; wfx->cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX); @@ -1640,6 +1638,14 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient2 *iface, if (duration <= 2 * period) period /= 2; } + + const char* denv = getenv("STAGING_AUDIO_DURATION"); + if (denv) { + int val = atoi(denv); + duration = val; + printf("Staging audio duration set to %d.\n", val); + } + period_bytes = pa_frame_size(&This->ss) * MulDiv(period, This->ss.rate, 10000000); if (duration < 20000000) -- 2.32.0