[vlc-devel] [vlc-commits] vlc_opengl: refactor vlc_gl_t creation
Thomas Guillem
thomas at gllm.fr
Mon Dec 19 16:41:26 CET 2016
On Mon, Dec 19, 2016, at 15:59, Rémi Denis-Courmont wrote:
> On December 19, 2016 4:04:07 PM GMT+02:00, git at videolan.org wrote:
> >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;
> >
> >_______________________________________________
> >vlc-commits mailing list
> >vlc-commits at videolan.org
> >https://mailman.videolan.org/listinfo/vlc-commits
>
> This API makes no sense whatsoever, please revert.
Why does it make no sense ? Do you have an other solution in mind ?
> --
> Rémi Denis-Courmont
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list