static void gst_gl_display_context_query (GstElement * element, GstGLDisplay ** display_ptr) { _gst_context_query (element, GST_GL_DISPLAY_CONTEXT_TYPE); if (*display_ptr) return; #if GST_GL_HAVE_WINDOW_X11 _gst_context_query (element, "gst.x11.display.handle"); if (*display_ptr) return; #endif #if GST_GL_HAVE_WINDOW_WAYLAND _gst_context_query (element, "GstWaylandDisplayHandleContextType"); if (*display_ptr) return; #endif }
static void gst_gl_display_context_query (GstElement * element, GstGLDisplay ** display_ptr) { GstContext *ctxt; GstQuery *query; #ifndef GST_DISABLE_GST_DEBUG if (!GST_CAT_CONTEXT) GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT"); #endif query = _gst_context_query (element, display_ptr, GST_GL_DISPLAY_CONTEXT_TYPE); gst_query_parse_context (query, &ctxt); if (ctxt && gst_context_has_context_type (ctxt, GST_GL_DISPLAY_CONTEXT_TYPE)) gst_context_get_gl_display (ctxt, display_ptr); if (*display_ptr) goto out; #if GST_GL_HAVE_WINDOW_X11 gst_query_unref (query); query = _gst_context_query (element, display_ptr, "gst.x11.display.handle"); gst_query_parse_context (query, &ctxt); if (ctxt && gst_context_has_context_type (ctxt, "gst.x11.display.handle")) { const GstStructure *s; Display *display; s = gst_context_get_structure (ctxt); if (gst_structure_get (s, "display", G_TYPE_POINTER, &display, NULL) && display) { *display_ptr = (GstGLDisplay *) gst_gl_display_x11_new_with_display (display); } } if (*display_ptr) goto out; #endif out: gst_query_unref (query); }
static void gst_gl_context_query (GstElement * element, GstGLContext ** context_ptr) { GstContext *ctxt; GstQuery *query; #ifndef GST_DISABLE_GST_DEBUG if (!GST_CAT_CONTEXT) GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT"); #endif query = _gst_context_query (element, context_ptr, "gst.gl.app_context"); gst_query_parse_context (query, &ctxt); if (ctxt && gst_context_has_context_type (ctxt, "gst.gl.app_context")) { const GstStructure *s = gst_context_get_structure (ctxt); gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, context_ptr, NULL); } gst_query_unref (query); }
gboolean gst_vaapi_video_context_prepare (GstElement * element, GstVaapiDisplay ** display_ptr) { g_return_val_if_fail (element != NULL, FALSE); g_return_val_if_fail (display_ptr != NULL, FALSE); /* 1) Check if the element already has a context of the specific * type. */ if (*display_ptr) { GST_LOG_OBJECT (element, "already have a display (%p)", *display_ptr); return TRUE; } _gst_context_query (element, GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME); if (*display_ptr) GST_LOG_OBJECT (element, "found a display (%p)", *display_ptr); return *display_ptr != NULL; }
static void gst_gl_context_query (GstElement * element) { _gst_context_query (element, "gst.gl.app_context"); }