[vlc-commits] vlc_opengl: refactor vlc_gl_t creation
Filip Roséen
git at videolan.org
Mon Dec 19 15:04:07 CET 2016
vlc | branch: master | Filip Roséen <filip at atch.se> | Mon Dec 19 03:07:43 2016 +0100| [79b2187631f2786f46a8225b538f3ec7ae7d1c9e] | committer: Thomas Guillem
vlc_opengl: refactor vlc_gl_t creation
Given that there are places in the codebase that just require a
created object of type vlc_gl_t ("gl"), these changes split the object
creation into two functions:
- vlc_gl_Create: a simple wrapper around vlc_custom_create
- vlc_gl_ModuleCreate: creates a vlc_gl_t with an associated
module/surface.
refs #17795
Signed-off-by: Thomas Guillem <thomas at gllm.fr>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=79b2187631f2786f46a8225b538f3ec7ae7d1c9e
---
include/vlc_opengl.h | 22 ++++++++++++++-
modules/video_output/opengl/display.c | 2 +-
src/libvlccore.sym | 1 +
src/video_output/opengl.c | 51 ++++++++++++++++-------------------
4 files changed, 46 insertions(+), 30 deletions(-)
diff --git a/include/vlc_opengl.h b/include/vlc_opengl.h
index 53d73d0..f7704bc 100644
--- a/include/vlc_opengl.h
+++ b/include/vlc_opengl.h
@@ -58,7 +58,27 @@ enum {
VLC_OPENGL_ES2,
};
-VLC_API vlc_gl_t *vlc_gl_Create(struct vout_window_t *, unsigned, const char *) VLC_USED;
+/**
+ * Create a VLC OpenGL object
+ *
+ * @note The allocated resource, if any, shall be released
+ * with a call to \ref vlc_gl_Destroy.
+ * @return a created object on success, NULL on failure.
+ **/
+VLC_API vlc_gl_t *vlc_gl_Create(vlc_object_t* parent);
+
+/**
+ * Creates a VLC OpenGL object with associated surface and module
+ *
+ * @note In most cases, you should vlc_gl_MakeCurrent() afterward.
+ *
+ * @param wnd window to use as OpenGL surface
+ * @param flags OpenGL context type
+ * @param name module name (or NULL for auto)
+ * @return a new context, or NULL on failure
+ */
+VLC_API vlc_gl_t *vlc_gl_ModuleCreate(struct vout_window_t *wnd, unsigned flags,
+ const char *name) VLC_USED;
VLC_API void vlc_gl_Destroy(vlc_gl_t *);
static inline int vlc_gl_MakeCurrent(vlc_gl_t *gl)
diff --git a/modules/video_output/opengl/display.c b/modules/video_output/opengl/display.c
index eefb5cf..68418b3 100644
--- a/modules/video_output/opengl/display.c
+++ b/modules/video_output/opengl/display.c
@@ -107,7 +107,7 @@ static int Open (vlc_object_t *obj)
goto error;
}
- sys->gl = vlc_gl_Create (surface, API, "$" MODULE_VARNAME);
+ sys->gl = vlc_gl_ModuleCreate (surface, API, "$" MODULE_VARNAME);
if (sys->gl == NULL)
goto error;
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 7b9657a..b65f538 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -691,6 +691,7 @@ vlc_fifo_GetCount
vlc_fifo_GetBytes
vlc_gl_Create
vlc_gl_Destroy
+vlc_gl_ModuleCreate
vlc_gl_surface_Create
vlc_gl_surface_CheckSize
vlc_gl_surface_Destroy
diff --git a/src/video_output/opengl.c b/src/video_output/opengl.c
index ac16c3f..6459cbf 100644
--- a/src/video_output/opengl.c
+++ b/src/video_output/opengl.c
@@ -29,47 +29,43 @@
#include <vlc_opengl.h>
#include "libvlc.h"
#include <vlc_modules.h>
+#include <vlc_vout_window.h>
-#undef vlc_gl_Create
-/**
- * Creates an OpenGL context (and its underlying surface).
- *
- * @note In most cases, you should vlc_gl_MakeCurrent() afterward.
- *
- * @param wnd window to use as OpenGL surface
- * @param flags OpenGL context type
- * @param name module name (or NULL for auto)
- * @return a new context, or NULL on failure
- */
-vlc_gl_t *vlc_gl_Create(struct vout_window_t *wnd, unsigned flags,
- const char *name)
+vlc_gl_t *vlc_gl_Create(vlc_object_t* parent)
{
- vlc_object_t *parent = (vlc_object_t *)wnd;
- vlc_gl_t *gl;
- const char *type;
+ return vlc_custom_create(parent, sizeof(vlc_gl_t), "gl");
+}
- switch (flags /*& VLC_OPENGL_API_MASK*/)
+vlc_gl_t *vlc_gl_ModuleCreate(struct vout_window_t *wnd, unsigned flags,
+ const char *module_name)
+{
+ const char *module_type;
+
+ switch (flags)
{
case VLC_OPENGL:
- type = "opengl";
+ module_type = "opengl";
break;
case VLC_OPENGL_ES:
- type = "opengl es";
+ module_type = "opengl es";
break;
case VLC_OPENGL_ES2:
- type = "opengl es2";
+ module_type = "opengl es2";
break;
+
default:
return NULL;
}
- gl = vlc_custom_create(parent, sizeof (*gl), "gl");
- if (unlikely(gl == NULL))
+ vlc_gl_t *gl = vlc_gl_Create(VLC_OBJECT(wnd));
+
+ if( unlikely( !gl ) )
return NULL;
gl->surface = wnd;
- gl->module = module_need(gl, type, name, true);
- if (gl->module == NULL)
+ gl->module = module_need(gl, module_type, module_name, true);
+
+ if (gl->module == NULL )
{
vlc_object_release(gl);
return NULL;
@@ -80,12 +76,11 @@ vlc_gl_t *vlc_gl_Create(struct vout_window_t *wnd, unsigned flags,
void vlc_gl_Destroy(vlc_gl_t *gl)
{
- module_unneed(gl, gl->module);
+ if(gl->module)
+ module_unneed(gl, gl->module);
vlc_object_release(gl);
}
-#include <vlc_vout_window.h>
-
typedef struct vlc_gl_surface
{
int width;
@@ -130,7 +125,7 @@ vlc_gl_t *vlc_gl_surface_Create(vlc_object_t *obj,
*wp = surface;
/* TODO: support ES? */
- vlc_gl_t *gl = vlc_gl_Create(surface, VLC_OPENGL, NULL);
+ vlc_gl_t *gl = vlc_gl_ModuleCreate(surface, VLC_OPENGL, NULL);
if (gl == NULL) {
vout_window_Delete(surface);
return NULL;
More information about the vlc-commits
mailing list