diff options
author | Matthew Waters <matthew@centricular.com> | 2016-02-22 20:49:52 +1100 |
---|---|---|
committer | Matthew Waters <matthew@centricular.com> | 2016-02-22 20:52:54 +1100 |
commit | 2d2878125ef17f140d15a5b44359cd2929901608 (patch) | |
tree | 1efa4db3ca32c69a0517fbd71cef9ac5e73ab077 /gst-libs/gst | |
parent | 0d80be0ce0fe523fad59a74d431767322161cb7b (diff) | |
download | gstreamer-plugins-bad-2d2878125ef17f140d15a5b44359cd2929901608.tar.gz |
gl: error out if the configured GL API is unsupported by our element
https://bugzilla.gnome.org/show_bug.cgi?id=759801
Diffstat (limited to 'gst-libs/gst')
-rw-r--r-- | gst-libs/gst/gl/gstglbasefilter.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/gst-libs/gst/gl/gstglbasefilter.c b/gst-libs/gst/gl/gstglbasefilter.c index a4e97b929..2fcea266b 100644 --- a/gst-libs/gst/gl/gstglbasefilter.c +++ b/gst-libs/gst/gl/gstglbasefilter.c @@ -50,7 +50,8 @@ enum #define gst_gl_base_filter_parent_class parent_class G_DEFINE_TYPE_WITH_CODE (GstGLBaseFilter, gst_gl_base_filter, GST_TYPE_BASE_TRANSFORM, GST_DEBUG_CATEGORY_INIT (gst_gl_base_filter_debug, - "glbasefilter", 0, "glbasefilter element");); + "glbasefilter", 0, "glbasefilter element"); + ); static void gst_gl_base_filter_finalize (GObject * object); static void gst_gl_base_filter_set_property (GObject * object, guint prop_id, @@ -357,6 +358,7 @@ gst_gl_base_filter_decide_allocation (GstBaseTransform * trans, GstQuery * query) { GstGLBaseFilter *filter = GST_GL_BASE_FILTER (trans); + GstGLBaseFilterClass *filter_class = GST_GL_BASE_FILTER_GET_CLASS (filter); GError *error = NULL; gboolean new_context = FALSE; @@ -389,6 +391,12 @@ gst_gl_base_filter_decide_allocation (GstBaseTransform * trans, gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_stop, filter); + { + GstGLAPI current_gl_api = gst_gl_context_get_gl_api (mix->context); + if ((current_gl_api & filter_class->supported_gl_api) == 0) + goto unsupported_gl_api; + } + gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_start, filter); @@ -404,6 +412,21 @@ gst_gl_base_filter_decide_allocation (GstBaseTransform * trans, return GST_BASE_TRANSFORM_CLASS (parent_class)->decide_allocation (trans, query); + +unsupported_gl_api: + { + GstGLAPI gl_api = gst_gl_context_get_gl_api (filter->context); + gchar *gl_api_str = gst_gl_api_to_string (gl_api); + gchar *supported_gl_api_str = + gst_gl_api_to_string (filter_class->supported_gl_api); + GST_ELEMENT_ERROR (filter, RESOURCE, BUSY, + ("GL API's not compatible context: %s supported: %s", gl_api_str, + supported_gl_api_str), (NULL)); + + g_free (supported_gl_api_str); + g_free (gl_api_str); + return FALSE; + } context_error: { GST_ELEMENT_ERROR (trans, RESOURCE, NOT_FOUND, ("%s", error->message), |