From b7653925db56cadbf7224e2310ab4408ade00f3d Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Fri, 6 Apr 2018 23:01:36 +0530 Subject: [PATCH] wasapi: Only use audioclient3 when low-latency Causes glitches on very slow CPU machines or VMs, and our out-of-the-box experience should be good. https://bugzilla.gnome.org/show_bug.cgi?id=794497 --- sys/wasapi/gstwasapisink.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/sys/wasapi/gstwasapisink.c b/sys/wasapi/gstwasapisink.c index 1b86f23ec3..5d4a0a679a 100644 --- a/sys/wasapi/gstwasapisink.c +++ b/sys/wasapi/gstwasapisink.c @@ -141,7 +141,8 @@ gst_wasapi_sink_class_init (GstWasapiSinkClass * klass) g_object_class_install_property (gobject_class, PROP_AUDIOCLIENT3, g_param_spec_boolean ("use-audioclient3", "Use the AudioClient3 API", - "Use the Windows 10 AudioClient3 API when available", + "Use the Windows 10 AudioClient3 API when available and if the " + "low-latency property is set to TRUE", DEFAULT_AUDIOCLIENT3, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_add_static_pad_template (gstelement_class, &sink_template); @@ -295,10 +296,30 @@ gst_wasapi_sink_get_property (GObject * object, guint prop_id, static gboolean gst_wasapi_sink_can_audioclient3 (GstWasapiSink * self) { - if (self->sharemode == AUDCLNT_SHAREMODE_SHARED && - self->try_audioclient3 && gst_wasapi_util_have_audioclient3 ()) - return TRUE; - return FALSE; + /* AudioClient3 API only makes sense in shared mode */ + if (self->sharemode != AUDCLNT_SHAREMODE_SHARED) + return FALSE; + + if (!self->try_audioclient3) { + GST_INFO_OBJECT (self, "AudioClient3 disabled by user"); + return FALSE; + } + + if (!gst_wasapi_util_have_audioclient3 ()) { + GST_INFO_OBJECT (self, "AudioClient3 not available on this OS"); + return FALSE; + } + + /* Only use audioclient3 when low-latency is requested because otherwise + * very slow machines and VMs with 1 CPU allocated will get glitches: + * https://bugzilla.gnome.org/show_bug.cgi?id=794497 */ + if (!self->low_latency) { + GST_INFO_OBJECT (self, "AudioClient3 disabled because low-latency mode " + "was not requested"); + return FALSE; + } + + return TRUE; } static GstCaps * -- 2.34.1