[Spice-devel] [PATCH spice-gtk v3] gst: check pulsesrc version >= 1.14.5

marcandre.lureau at redhat.com marcandre.lureau at redhat.com
Fri Jan 11 11:03:18 UTC 2019


From: Marc-André Lureau <marcandre.lureau at redhat.com>

There is a racy bug in pulsesrc that we can't easily workaround:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/merge_requests/69

It is fixed with 1.15, and will be backported to upcoming 1.14.5.

PulseAudio may not be picked by autoaudiosrc, but looking up the
actual source or mimicking GstAutoDetect is unnecessarily complicated.

When pulsesrc < 1.14.5 is detected, let's drop its rank, so it won't be picked.

Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
---
 src/spice-gstaudio.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/spice-gstaudio.c b/src/spice-gstaudio.c
index d0cfbc6..49e9ae6 100644
--- a/src/spice-gstaudio.c
+++ b/src/spice-gstaudio.c
@@ -527,7 +527,35 @@ SpiceGstaudio *spice_gstaudio_new(SpiceSession *session, GMainContext *context,
                                   const char *name)
 {
     GError *err = NULL;
+
     if (gst_init_check(NULL, NULL, &err)) {
+        GstPluginFeature *pulsesrc;
+
+        pulsesrc = gst_registry_lookup_feature(gst_registry_get(), "pulsesrc");
+        if (pulsesrc) {
+            unsigned major, minor, micro;
+            GstPlugin *plugin = gst_plugin_feature_get_plugin(pulsesrc);
+
+            if (sscanf(gst_plugin_get_version(plugin), "%u.%u.%u",
+                       &major, &minor, &micro) != 3) {
+                g_warn_if_reached();
+                gst_object_unref(plugin);
+                gst_object_unref(pulsesrc);
+                return NULL;
+            }
+
+            if (major < 1 ||
+                (major == 1 && minor < 14) ||
+                (major == 1 && minor == 14 && micro < 5)) {
+                g_warning("Bad pulsesrc version %s, lowering its rank",
+                          gst_plugin_get_version(plugin));
+                gst_plugin_feature_set_rank(pulsesrc, GST_RANK_NONE);
+            }
+
+            gst_object_unref(plugin);
+            gst_object_unref(pulsesrc);
+        }
+
         return g_object_new(SPICE_TYPE_GSTAUDIO,
                             "session", session,
                             "main-context", context,
-- 
2.20.1.98.gecbdaf0899



More information about the Spice-devel mailing list