switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_CONTEXT:
{
- gboolean ret =
- gst_gl_handle_context_query ((GstElement *) glimage_sink, query,
+ const gchar *context_type;
+ GstContext *context, *old_context;
+
+ res = gst_gl_handle_context_query ((GstElement *) glimage_sink, query,
&glimage_sink->display, &glimage_sink->other_context);
if (glimage_sink->display)
gst_gl_display_filter_gl_api (glimage_sink->display, SUPPORTED_GL_APIS);
- return ret;
+
+ gst_query_parse_context_type (query, &context_type);
+
+ if (g_strcmp0 (context_type, "gst.gl.local_context") == 0) {
+ GstStructure *s;
+
+ gst_query_parse_context (query, &old_context);
+
+ if (old_context)
+ context = gst_context_copy (old_context);
+ else
+ context = gst_context_new ("gst.gl.local_context", FALSE);
+
+ s = gst_context_writable_structure (context);
+ gst_structure_set (s, "context", GST_GL_TYPE_CONTEXT,
+ glimage_sink->context, NULL);
+ gst_query_set_context (query, context);
+ gst_context_unref (context);
+
+ res = glimage_sink->context != NULL;
+ }
+ GST_LOG_OBJECT (glimage_sink, "context query of type %s %i", context_type,
+ res);
+
+ if (res)
+ return res;
+ break;
}
case GST_QUERY_DRAIN:
{