From 72c4a161c09eef669b8f493790a4c991b6c46e8e Mon Sep 17 00:00:00 2001 From: He Junyan Date: Thu, 11 Jun 2020 18:15:17 +0800 Subject: plugins: pluginbase: Do not destroy display when _close() When the element's state changes to NULL, it can still receive queries, such as the image formats. The display is needed in such queries but not well protected for MT safe. For example, ensure_allowed_raw_caps() may still use the display while it is disposed by gst_vaapi_plugin_base_close() because of the state change. We can keep the display until the element is destroyed. When the state changes to NULL, and then changes to PAUSED again, the display can be correctly set(if type changes), or leave untouched. Fix: #260 Part-of: --- gst/vaapi/gstvaapipluginbase.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gst') diff --git a/gst/vaapi/gstvaapipluginbase.c b/gst/vaapi/gstvaapipluginbase.c index e0c1189e..7a06493a 100644 --- a/gst/vaapi/gstvaapipluginbase.c +++ b/gst/vaapi/gstvaapipluginbase.c @@ -314,6 +314,7 @@ void gst_vaapi_plugin_base_finalize (GstVaapiPluginBase * plugin) { gst_vaapi_plugin_base_close (plugin); + gst_vaapi_display_replace (&plugin->display, NULL); g_free (plugin->display_name); if (plugin->sinkpriv) @@ -339,6 +340,7 @@ gst_vaapi_plugin_base_finalize (GstVaapiPluginBase * plugin) gboolean gst_vaapi_plugin_base_open (GstVaapiPluginBase * plugin) { + gst_caps_replace (&plugin->allowed_raw_caps, NULL); return TRUE; } @@ -355,7 +357,6 @@ gst_vaapi_plugin_base_close (GstVaapiPluginBase * plugin) /* Release vaapi textures first if exist, which refs display object */ plugin_reset_texture_map (plugin); - gst_vaapi_display_replace (&plugin->display, NULL); gst_object_replace (&plugin->gl_context, NULL); gst_object_replace (&plugin->gl_display, NULL); gst_object_replace (&plugin->gl_other_context, NULL); -- cgit v1.2.3