From: Victor Toso <m...@victortoso.com>

Instead of creating the whole pipeline and check for errors (which
would create and destroy the SpiceGstDecoder), let's use
gst_element_factory_find() function.

Signed-off-by: Victor Toso <victort...@redhat.com>
---
 src/channel-display-gst.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
index 68ebd1f..c0f0a1e 100644
--- a/src/channel-display-gst.c
+++ b/src/channel-display-gst.c
@@ -484,13 +484,24 @@ VideoDecoder* create_gstreamer_decoder(int codec_type, 
display_stream *stream)
 G_GNUC_INTERNAL
 gboolean gstvideo_has_codec(int codec_type)
 {
-    gboolean has_codec = FALSE;
+    gint i;
+    gchar **elements;
 
-    VideoDecoder *decoder = create_gstreamer_decoder(codec_type, NULL);
-    if (decoder) {
-        has_codec = TRUE;
-        decoder->destroy(decoder);
-    }
+    g_return_val_if_fail(gstvideo_init(), FALSE);
+    g_return_val_if_fail(VALID_VIDEO_CODEC_TYPE(codec_type), FALSE);
+
+    elements = g_strsplit(gst_opts[codec_type].dec_name, "!", 0);
+    for (i = 0; elements[i] != NULL; i++) {
+        GstElementFactory *factory;
 
-    return has_codec;
+        factory = gst_element_factory_find(g_strstrip(elements[i]));
+        if (factory == NULL) {
+            SPICE_DEBUG("no element %s", elements[i]);
+            g_strfreev(elements);
+            return FALSE;
+        }
+        gst_object_unref(factory);
+    }
+    g_strfreev(elements);
+    return TRUE;
 }
-- 
2.9.3

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

Reply via email to