From 188d8fe44261555c77b92169710d6400ca118be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Thu, 30 Apr 2015 13:21:08 +0200 Subject: [PATCH] plugins: check if the pool config is already set In commit 97b768, a regression for GStreamer 1.2 was introduced: GStreamer 1.2 doesn't check, in gst_buffer_pool_set_config() if the config option is already set. This patch adds an inline function to first verify if the option is not in the pool config berfore add it. --- gst/vaapi/gstvaapipluginbase.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/gst/vaapi/gstvaapipluginbase.c b/gst/vaapi/gstvaapipluginbase.c index 206848d541..d29e817c69 100644 --- a/gst/vaapi/gstvaapipluginbase.c +++ b/gst/vaapi/gstvaapipluginbase.c @@ -587,6 +587,22 @@ error_pool_config: } } +/* XXXX: GStreamer 1.2 doesn't check, in gst_buffer_pool_set_config() + if the config option is already set */ +static inline gboolean +gst_vaapi_plugin_base_set_pool_config (GstBufferPool * pool, + const gchar * option) +{ + GstStructure *config; + + config = gst_buffer_pool_get_config (pool); + if (!gst_buffer_pool_config_has_option (config, option)) { + gst_buffer_pool_config_add_option (config, option); + return gst_buffer_pool_set_config (pool, config); + } + return TRUE; +} + /** * gst_vaapi_plugin_base_decide_allocation: * @plugin: a #GstVaapiPluginBase @@ -706,26 +722,20 @@ gst_vaapi_plugin_base_decide_allocation (GstVaapiPluginBase * plugin, /* Check whether GstVideoMeta, or GstVideoAlignment, is needed (raw video) */ if (has_video_meta) { - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_add_option (config, - GST_BUFFER_POOL_OPTION_VIDEO_META); - if (!gst_buffer_pool_set_config (pool, config)) + if (!gst_vaapi_plugin_base_set_pool_config (pool, + GST_BUFFER_POOL_OPTION_VIDEO_META)) goto config_failed; } else if (has_video_alignment) { - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_add_option (config, - GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT); - if (!gst_buffer_pool_set_config (pool, config)) + if (!gst_vaapi_plugin_base_set_pool_config (pool, + GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)) goto config_failed; } /* GstVideoGLTextureUploadMeta (OpenGL) */ #if (USE_GLX || USE_EGL) if (has_texture_upload_meta) { - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_add_option (config, - GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META); - if (!gst_buffer_pool_set_config (pool, config)) + if (!gst_vaapi_plugin_base_set_pool_config (pool, + GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META)) goto config_failed; } #endif