diff options
author | He Junyan <junyan.he@hotmail.com> | 2020-06-11 18:15:17 +0800 |
---|---|---|
committer | He Junyan <junyan.he@hotmail.com> | 2020-06-11 18:32:58 +0800 |
commit | 72c4a161c09eef669b8f493790a4c991b6c46e8e (patch) | |
tree | c8dcee4dbd35bd28204b95ec195d6af3e1e57b83 | |
parent | 1c5f32b5cd0ba48f12201565f76aa550733e544a (diff) |
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/343>
-rw-r--r-- | gst/vaapi/gstvaapipluginbase.c | 3 |
1 files changed, 2 insertions, 1 deletions
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); |