From: Victor Toso <me@xxxxxxxxxxxxxx> 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 <victortoso@xxxxxxxxxx> --- 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@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel