mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 20:51:13 +00:00
[856/906] context: document it
This commit is contained in:
parent
1e02438715
commit
d6bdcbe751
2 changed files with 132 additions and 7 deletions
|
@ -18,6 +18,17 @@
|
||||||
* Boston, MA 02110-1301, USA.
|
* Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:gstglcontext
|
||||||
|
* @short_description: OpenGL context abstraction
|
||||||
|
* @title: GstGLContext
|
||||||
|
* @see_also: #GstGLDisplay, #GstGLWindow
|
||||||
|
*
|
||||||
|
* #GstGLContext wraps an OpenGL context object in a uniform API. As a result
|
||||||
|
* of the limitation on OpenGL context, this object is not thread safe unless
|
||||||
|
* specified and must only be activated in a single thread.
|
||||||
|
*/
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -131,6 +142,14 @@ gst_gl_context_class_init (GstGLContextClass * klass)
|
||||||
G_OBJECT_CLASS (klass)->finalize = gst_gl_context_finalize;
|
G_OBJECT_CLASS (klass)->finalize = gst_gl_context_finalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_new:
|
||||||
|
* @display: a #GstGLDisplay
|
||||||
|
*
|
||||||
|
* Create a new #GstGLContext with the specified @display
|
||||||
|
*
|
||||||
|
* Returns: a new #GstGLContext
|
||||||
|
*/
|
||||||
GstGLContext *
|
GstGLContext *
|
||||||
gst_gl_context_new (GstGLDisplay * display)
|
gst_gl_context_new (GstGLDisplay * display)
|
||||||
{
|
{
|
||||||
|
@ -221,6 +240,18 @@ gst_gl_context_finalize (GObject * object)
|
||||||
G_OBJECT_CLASS (gst_gl_context_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gst_gl_context_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_activate:
|
||||||
|
* @context: a #GstGLContext
|
||||||
|
* @activate: %TRUE to activate, %FALSE to deactivate
|
||||||
|
*
|
||||||
|
* (De)activate the OpenGL context represented by this @context.
|
||||||
|
*
|
||||||
|
* In OpenGL terms, calls eglMakeCurrent or similar with this context and the
|
||||||
|
* currently set window. See gst_gl_context_set_window() for details.
|
||||||
|
*
|
||||||
|
* Returns: Whether the activation succeeded
|
||||||
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_gl_context_activate (GstGLContext * context, gboolean activate)
|
gst_gl_context_activate (GstGLContext * context, gboolean activate)
|
||||||
{
|
{
|
||||||
|
@ -236,6 +267,17 @@ gst_gl_context_activate (GstGLContext * context, gboolean activate)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_get_gl_api:
|
||||||
|
* @context: a #GstGLContext
|
||||||
|
*
|
||||||
|
* Get the currently enabled OpenGL api.
|
||||||
|
*
|
||||||
|
* The currently available API may be limited by the #GstGLDisplay in use and/or
|
||||||
|
* the #GstGLWindow chosen.
|
||||||
|
*
|
||||||
|
* Returns: the currently available OpenGL api
|
||||||
|
*/
|
||||||
GstGLAPI
|
GstGLAPI
|
||||||
gst_gl_context_get_gl_api (GstGLContext * context)
|
gst_gl_context_get_gl_api (GstGLContext * context)
|
||||||
{
|
{
|
||||||
|
@ -248,6 +290,19 @@ gst_gl_context_get_gl_api (GstGLContext * context)
|
||||||
return context_class->get_gl_api (context);
|
return context_class->get_gl_api (context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_get_proc_address:
|
||||||
|
* @context: a #GstGLContext
|
||||||
|
* @name: an opengl function name
|
||||||
|
*
|
||||||
|
* Get a function pointer to a specified opengl function, @name. If the the
|
||||||
|
* specific function does not exist, NULL is returned instead.
|
||||||
|
*
|
||||||
|
* Platform specfic functions (names starting 'egl', 'glX', 'wgl', etc) can also
|
||||||
|
* be retreived using this method.
|
||||||
|
*
|
||||||
|
* Returns: a function pointer or NULL
|
||||||
|
*/
|
||||||
gpointer
|
gpointer
|
||||||
gst_gl_context_get_proc_address (GstGLContext * context, const gchar * name)
|
gst_gl_context_get_proc_address (GstGLContext * context, const gchar * name)
|
||||||
{
|
{
|
||||||
|
@ -314,6 +369,17 @@ gst_gl_context_default_get_proc_address (GstGLContext * context,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_set_window:
|
||||||
|
* @context: a #GstGLContext
|
||||||
|
* @window: (transfer full): a #GstGLWindow
|
||||||
|
*
|
||||||
|
* Set's the current window on @context to @window. The window can only be
|
||||||
|
* changed before gst_gl_context_create() has been called and the @window is not
|
||||||
|
* already running.
|
||||||
|
*
|
||||||
|
* Returns: Whether the window was successfully updated
|
||||||
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_gl_context_set_window (GstGLContext * context, GstGLWindow * window)
|
gst_gl_context_set_window (GstGLContext * context, GstGLWindow * window)
|
||||||
{
|
{
|
||||||
|
@ -336,6 +402,12 @@ gst_gl_context_set_window (GstGLContext * context, GstGLWindow * window)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_get_window:
|
||||||
|
* @context: a #GstGLContext
|
||||||
|
*
|
||||||
|
* Returns: the currently set window
|
||||||
|
*/
|
||||||
GstGLWindow *
|
GstGLWindow *
|
||||||
gst_gl_context_get_window (GstGLContext * context)
|
gst_gl_context_get_window (GstGLContext * context)
|
||||||
{
|
{
|
||||||
|
@ -346,7 +418,23 @@ gst_gl_context_get_window (GstGLContext * context)
|
||||||
return gst_object_ref (context->window);
|
return gst_object_ref (context->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create an opengl context (one context for one GstGLDisplay) */
|
/**
|
||||||
|
* gst_gl_context_create:
|
||||||
|
* @context: a #GstGLContext:
|
||||||
|
* @other_context: (allow-none): a #GstGLContext to share OpenGL objects with
|
||||||
|
* @error: (allow-none): a #GError
|
||||||
|
*
|
||||||
|
* Creates an OpenGL context in the current thread with the specified
|
||||||
|
* @other_context as a context to share shareable OpenGL objects with. See the
|
||||||
|
* OpenGL specification for what is shared between contexts.
|
||||||
|
*
|
||||||
|
* If an error occurs, and @error is not %NULL, then error will contain details
|
||||||
|
* of the error and %FALSE will be returned.
|
||||||
|
*
|
||||||
|
* Should only be called once.
|
||||||
|
*
|
||||||
|
* Returns: whether the context could successfully be created
|
||||||
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_gl_context_create (GstGLContext * context,
|
gst_gl_context_create (GstGLContext * context,
|
||||||
GstGLContext * other_context, GError ** error)
|
GstGLContext * other_context, GError ** error)
|
||||||
|
@ -689,6 +777,14 @@ failure:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_get_gl_context:
|
||||||
|
* @context: a #GstGLContext:
|
||||||
|
*
|
||||||
|
* Gets the backing OpenGL context used by @context.
|
||||||
|
*
|
||||||
|
* Returns: The platform specific backing OpenGL context
|
||||||
|
*/
|
||||||
guintptr
|
guintptr
|
||||||
gst_gl_context_get_gl_context (GstGLContext * context)
|
gst_gl_context_get_gl_context (GstGLContext * context)
|
||||||
{
|
{
|
||||||
|
@ -704,6 +800,12 @@ gst_gl_context_get_gl_context (GstGLContext * context)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_get_display:
|
||||||
|
* @context: a #GstGLContext:
|
||||||
|
*
|
||||||
|
* Returns: the #GstGLDisplay associated with this @context
|
||||||
|
*/
|
||||||
GstGLDisplay *
|
GstGLDisplay *
|
||||||
gst_gl_context_get_display (GstGLContext * context)
|
gst_gl_context_get_display (GstGLContext * context)
|
||||||
{
|
{
|
||||||
|
@ -727,6 +829,16 @@ _gst_gl_context_thread_run_generic (RunGenericData * data)
|
||||||
data->func (data->context, data->data);
|
data->func (data->context, data->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_thread_add:
|
||||||
|
* @context: a #GstGLContext
|
||||||
|
* @func: a #GstGLContextThreadFunc
|
||||||
|
* @data: (closure): user data to call @func with
|
||||||
|
*
|
||||||
|
* Execute @func in the OpenGL thread of @context with @data
|
||||||
|
*
|
||||||
|
* MT-safe
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
gst_gl_context_thread_add (GstGLContext * context,
|
gst_gl_context_thread_add (GstGLContext * context,
|
||||||
GstGLContextThreadFunc func, gpointer data)
|
GstGLContextThreadFunc func, gpointer data)
|
||||||
|
|
|
@ -40,10 +40,10 @@ GQuark gst_gl_context_error_quark (void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstGLContextThreadFunc:
|
* GstGLContextThreadFunc:
|
||||||
* @display: a #GstGLDisplay
|
* @context: a #GstGLContext
|
||||||
* @data: user data
|
* @data: user data
|
||||||
*
|
*
|
||||||
* Represents a function to run in the GL thread
|
* Represents a function to run in the GL thread with @context and @data
|
||||||
*/
|
*/
|
||||||
typedef void (*GstGLContextThreadFunc) (GstGLContext * context, gpointer data);
|
typedef void (*GstGLContextThreadFunc) (GstGLContext * context, gpointer data);
|
||||||
|
|
||||||
|
@ -57,23 +57,36 @@ typedef enum
|
||||||
GST_GL_CONTEXT_ERROR_RESOURCE_UNAVAILABLE,
|
GST_GL_CONTEXT_ERROR_RESOURCE_UNAVAILABLE,
|
||||||
} GstGLContextError;
|
} GstGLContextError;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstGLContext:
|
||||||
|
*
|
||||||
|
* Opaque #GstGLContext object
|
||||||
|
*/
|
||||||
struct _GstGLContext {
|
struct _GstGLContext {
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GObject parent;
|
GObject parent;
|
||||||
|
|
||||||
/*< public >*/
|
|
||||||
GstGLWindow *window;
|
GstGLWindow *window;
|
||||||
|
|
||||||
GstGLFuncs *gl_vtable;
|
GstGLFuncs *gl_vtable;
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
gpointer _reserved[GST_PADDING];
|
gpointer _reserved[GST_PADDING];
|
||||||
|
|
||||||
GstGLContextPrivate *priv;
|
GstGLContextPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstGLContextClass:
|
||||||
|
* @get_gl_context: get the backing platform specific OpenGL context
|
||||||
|
* @get_gl_api: get the available OpenGL api's that this context can work with
|
||||||
|
* @get_proc_address: get an function pointer to an OpenGL function
|
||||||
|
* @activate: call eglMakeCurrent or similar
|
||||||
|
* @choose_format: choose a format for the framebuffer
|
||||||
|
* @create_context: create the OpenGL context
|
||||||
|
* @destroy_context: destroy the OpenGL context
|
||||||
|
* @swap_buffers: swap the default framebuffer's front/back buffers
|
||||||
|
*/
|
||||||
struct _GstGLContextClass {
|
struct _GstGLContextClass {
|
||||||
/*< private >*/
|
|
||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
|
|
||||||
guintptr (*get_gl_context) (GstGLContext *context);
|
guintptr (*get_gl_context) (GstGLContext *context);
|
||||||
|
@ -110,7 +123,7 @@ gboolean gst_gl_context_set_window (GstGLContext *context, GstGLWindow *win
|
||||||
GstGLWindow * gst_gl_context_get_window (GstGLContext *context);
|
GstGLWindow * gst_gl_context_get_window (GstGLContext *context);
|
||||||
|
|
||||||
/* FIXME: remove */
|
/* FIXME: remove */
|
||||||
void gst_gl_context_thread_add (GstGLContext * display,
|
void gst_gl_context_thread_add (GstGLContext * context,
|
||||||
GstGLContextThreadFunc func, gpointer data);
|
GstGLContextThreadFunc func, gpointer data);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
Loading…
Reference in a new issue