summaryrefslogtreecommitdiff
path: root/sys/wasapi
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2018-04-06 23:01:36 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2018-04-06 23:11:18 +0530
commitb7653925db56cadbf7224e2310ab4408ade00f3d (patch)
tree475eb607be260518d6351e8a470584946b358d7e /sys/wasapi
parent41a4a8fe0da1e1ad03449d36318ad0c3ccbe0c29 (diff)
downloadgstreamer-plugins-bad-b7653925db56cadbf7224e2310ab4408ade00f3d.tar.gz
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
Diffstat (limited to 'sys/wasapi')
-rw-r--r--sys/wasapi/gstwasapisink.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/sys/wasapi/gstwasapisink.c b/sys/wasapi/gstwasapisink.c
index 1b86f23ec..5d4a0a679 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 *