[PATCH v2 2/2] display-gst: change compile to runtime check of vaapisink element

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Victor Toso <me@xxxxxxxxxxxxxx>

Runtime check is better fit to enable/disable vaapisink. For that, use
spice_check_gst_plugin_version() from previous commit.

Signed-off-by: Victor Toso <victortoso@xxxxxxxxxx>
---
 src/channel-display-gst.c | 37 +++++++++++++++++--------------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
index 4272ade..c5add40 100644
--- a/src/channel-display-gst.c
+++ b/src/channel-display-gst.c
@@ -19,6 +19,7 @@
 
 #include "spice-client.h"
 #include "spice-common.h"
+#include "spice-util-priv.h"
 #include "spice-channel-priv.h"
 
 #include "channel-display-priv.h"
@@ -431,6 +432,8 @@ static gboolean create_pipeline(SpiceGstDecoder *decoder)
     GstElement *playbin, *sink;
     SpiceGstPlayFlags flags;
     GstCaps *caps;
+    GError *err = NULL;
+    GstPluginFeature *vaapisink;
 
     playbin = gst_element_factory_make("playbin", "playbin");
     if (playbin == NULL) {
@@ -461,29 +464,23 @@ static gboolean create_pipeline(SpiceGstDecoder *decoder)
                  NULL);
 
         decoder->appsink = GST_APP_SINK(sink);
-    } else {
-        /* handle has received, it means playbin will render directly into
-         * widget using the gstvideooverlay interface instead of app-sink.
-         */
-        SPICE_DEBUG("Video is presented using gstreamer's GstVideoOverlay interface");
-
-#if !GST_CHECK_VERSION(1,14,0)
-        /* Avoid using vaapisink if exist since vaapisink could be
-         * buggy when it is combined with playbin. changing its rank to
-         * none will make playbin to avoid of using it.
-         */
-        GstRegistry *registry = NULL;
-        GstPluginFeature *vaapisink = NULL;
+    } else if (!spice_check_gst_plugin_version("vaapisink", 1, 14, 0, &vaapisink, &err)) {
+        if (err == NULL) {
+            /* handle has received, it means playbin will render directly into
+             * widget using the gstvideooverlay interface instead of app-sink.
+             */
+            SPICE_DEBUG("Video is presented using gstreamer's GstVideoOverlay interface");
 
-        registry = gst_registry_get();
-        if (registry) {
-            vaapisink = gst_registry_lookup_feature(registry, "vaapisink");
-        }
-        if (vaapisink) {
+            /* Avoid using vaapisink if exist since vaapisink could be
+             * buggy when it is combined with playbin. changing its rank to
+             * none will make playbin to avoid of using it.
+             */
             gst_plugin_feature_set_rank(vaapisink, GST_RANK_NONE);
-            gst_object_unref(vaapisink);
+            g_clear_object(&vaapisink);
+        } else {
+            g_warning("Failure while checking vaapisink version: %s", err->message);
+            g_clear_error(&err);
         }
-#endif
     }
 
     g_signal_connect(playbin, "deep-element-added", G_CALLBACK(deep_element_added_cb), decoder);
-- 
2.20.1

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux Virtualization]     [Linux Virtualization]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]