From 41a4a8fe0da1e1ad03449d36318ad0c3ccbe0c29 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Wed, 21 Mar 2018 14:53:27 +0530 Subject: [PATCH] wasapi: Don't derive device period from latency time This seems to cause glitches on devices with low CPU availability, such as virtual machines. Maybe even actual machines under high load. https://bugzilla.gnome.org/show_bug.cgi?id=794497 --- sys/wasapi/gstwasapiutil.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/sys/wasapi/gstwasapiutil.c b/sys/wasapi/gstwasapiutil.c index af3a864961..9507c25eef 100644 --- a/sys/wasapi/gstwasapiutil.c +++ b/sys/wasapi/gstwasapiutil.c @@ -917,12 +917,10 @@ gst_wasapi_util_initialize_audioclient3 (GstElement * self, { HRESULT hr; gint stream_flags; - guint rate, devicep_frames; + guint devicep_frames; guint defaultp_frames, fundp_frames, minp_frames, maxp_frames; WAVEFORMATEX *tmpf; - rate = GST_AUDIO_INFO_RATE (&spec->info); - hr = IAudioClient3_GetSharedModeEnginePeriod (client, format, &defaultp_frames, &fundp_frames, &minp_frames, &maxp_frames); HR_FAILED_RET (hr, IAudioClient3::GetSharedModeEnginePeriod, FALSE); @@ -931,16 +929,12 @@ gst_wasapi_util_initialize_audioclient3 (GstElement * self, "fundamental period %i frames, minimum period %i frames, maximum period " "%i frames", defaultp_frames, fundp_frames, minp_frames, maxp_frames); - if (low_latency) { + if (low_latency) devicep_frames = minp_frames; - } else { - /* rate is in Hz, latency_time is in usec */ - int tmp = (rate * spec->latency_time * GST_USECOND) / GST_SECOND; - devicep_frames = CLAMP (tmp, minp_frames, maxp_frames); - /* Ensure it's a multiple of the fundamental period */ - tmp = devicep_frames / fundp_frames; - devicep_frames = tmp * fundp_frames; - } + else + /* Just pick the max period, because lower values can cause glitches + * https://bugzilla.gnome.org/show_bug.cgi?id=794497 */ + devicep_frames = maxp_frames; stream_flags = AUDCLNT_STREAMFLAGS_EVENTCALLBACK; if (loopback)