summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2016-02-22 20:49:52 +1100
committerMatthew Waters <matthew@centricular.com>2016-02-22 20:52:54 +1100
commit2d2878125ef17f140d15a5b44359cd2929901608 (patch)
tree1efa4db3ca32c69a0517fbd71cef9ac5e73ab077 /gst-libs
parent0d80be0ce0fe523fad59a74d431767322161cb7b (diff)
downloadgstreamer-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')
-rw-r--r--gst-libs/gst/gl/gstglbasefilter.c25
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),