gboolean gst_gl_ensure_display (gpointer element, GstGLDisplay ** display_ptr) { GstGLDisplay *display; 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. */ display = *display_ptr; if (gst_gl_display_found (element, display)) return TRUE; gst_gl_display_context_prepare (element, display_ptr); /* Neighbour found and it updated the display */ if (gst_gl_display_found (element, *display_ptr)) return TRUE; /* If no neighboor, or application not interested, use system default */ display = gst_gl_display_new (); *display_ptr = display; gst_gl_display_context_propagate (element, display); return display != NULL; }
gboolean gst_gl_ensure_element_data (gpointer element, GstGLDisplay ** display_ptr, GstGLContext ** context_ptr) { GstGLDisplay *display; g_return_val_if_fail (element != NULL, FALSE); g_return_val_if_fail (display_ptr != NULL, FALSE); g_return_val_if_fail (context_ptr != NULL, FALSE); /* 1) Check if the element already has a context of the specific * type. */ display = *display_ptr; if (gst_gl_display_found (element, display)) goto done; gst_gl_display_context_query (element, display_ptr); /* Neighbour found and it updated the display */ if (gst_gl_display_found (element, *display_ptr)) goto get_gl_context; /* If no neighboor, or application not interested, use system default */ display = gst_gl_display_new (); *display_ptr = display; gst_gl_display_context_propagate (element, display); get_gl_context: if (*context_ptr) goto done; gst_gl_context_query (element); done: return *display_ptr != NULL; }