gboolean gst_vaapi_handle_context_query (GstQuery * query, GstVaapiDisplay * display) { const gchar *type = NULL; GstContext *context, *old_context; g_return_val_if_fail (query != NULL, FALSE); if (!display) return FALSE; if (!gst_query_parse_context_type (query, &type)) return FALSE; if (g_strcmp0 (type, GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME)) return FALSE; gst_query_parse_context (query, &old_context); if (old_context) { context = gst_context_copy (old_context); gst_vaapi_video_context_set_display (context, display); } else { context = gst_vaapi_video_context_new_with_display (display, FALSE); } gst_query_set_context (query, context); gst_context_unref (context); return TRUE; }
GstContext * gst_vaapi_video_context_new_with_display (GstVaapiDisplay * display, gboolean persistent) { GstContext *context; context = gst_context_new (GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME, persistent); gst_vaapi_video_context_set_display (context, display); return context; }
gboolean gst_vaapi_handle_context_query (GstElement * element, GstQuery * query) { GstVaapiPluginBase *const plugin = GST_VAAPI_PLUGIN_BASE (element); const gchar *type = NULL; GstContext *context, *old_context; g_return_val_if_fail (query != NULL, FALSE); #if USE_GST_GL_HELPERS if (plugin->gl_display && plugin->gl_context && plugin->gl_other_context) { if (gst_gl_handle_context_query (element, query, (GstGLDisplay *) plugin->gl_display, (GstGLContext *) plugin->gl_context, (GstGLContext *) plugin->gl_other_context)) return TRUE; } #endif if (!plugin->display) return FALSE; if (!gst_query_parse_context_type (query, &type)) return FALSE; if (g_strcmp0 (type, GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME)) return FALSE; gst_query_parse_context (query, &old_context); if (old_context) { context = gst_context_copy (old_context); gst_vaapi_video_context_set_display (context, plugin->display); } else { context = gst_vaapi_video_context_new_with_display (plugin->display, FALSE); } gst_query_set_context (query, context); gst_context_unref (context); return TRUE; }