diff --git a/subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidisplay.c b/subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidisplay.c index 878761af83..5bf4b13786 100644 --- a/subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidisplay.c +++ b/subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidisplay.c @@ -557,6 +557,13 @@ ensure_profiles (GstVaapiDisplay * display) } success = TRUE; + if (priv->encoders->len == 0) + g_clear_pointer (&priv->encoders, g_ptr_array_unref); + if (priv->decoders->len == 0) + g_clear_pointer (&priv->decoders, g_ptr_array_unref); + if (priv->codecs->len == 0) + g_clear_pointer (&priv->codecs, g_array_unref); + cleanup: g_free (profiles); g_free (entrypoints); diff --git a/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapi.c b/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapi.c index 3532624839..c45fd0afa9 100644 --- a/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapi.c +++ b/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapi.c @@ -200,17 +200,17 @@ plugin_init (GstPlugin * plugin) decoders = display_get_decoder_codecs (display); if (decoders) { gst_vaapidecode_register (plugin, decoders); + gst_element_register (plugin, "vaapidecodebin", + GST_RANK_PRIMARY + 2, GST_TYPE_VAAPI_DECODE_BIN); g_array_unref (decoders); } - if (_gst_vaapi_has_video_processing) + if (_gst_vaapi_has_video_processing) { gst_vaapioverlay_register (plugin, display); - gst_element_register (plugin, "vaapipostproc", - GST_RANK_NONE, GST_TYPE_VAAPIPOSTPROC); - - gst_element_register (plugin, "vaapidecodebin", - GST_RANK_PRIMARY + 2, GST_TYPE_VAAPI_DECODE_BIN); + gst_element_register (plugin, "vaapipostproc", + GST_RANK_NONE, GST_TYPE_VAAPIPOSTPROC); + } rank = GST_RANK_SECONDARY; if (g_getenv ("WAYLAND_DISPLAY")) diff --git a/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapidecode.c b/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapidecode.c index 2ce31d9930..578e68bdf1 100644 --- a/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapidecode.c +++ b/subprojects/gstreamer-vaapi/gst/vaapi/gstvaapidecode.c @@ -1614,6 +1614,8 @@ gst_vaapidecode_register (GstPlugin * plugin, GArray * decoders) sink_caps_str = g_strconcat (gst_vaapidecode_sink_caps_str, "; ", vaapi_decode_map[i].caps_str, NULL); g_clear_pointer (&gst_vaapidecode_sink_caps_str, g_free); + if (!sink_caps_str) + break; gst_vaapidecode_sink_caps_str = sink_caps_str; }