[vlc-commits] egl: revector
Rémi Denis-Courmont
git at videolan.org
Wed Aug 27 22:36:56 CEST 2014
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Aug 27 22:57:58 2014 +0300| [4a91b3aee04f24f69cc6c784fad56a603d0213c5] | committer: Rémi Denis-Courmont
egl: revector
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4a91b3aee04f24f69cc6c784fad56a603d0213c5
---
modules/video_output/egl.c | 91 ++++++++++++++++++++++----------------------
1 file changed, 45 insertions(+), 46 deletions(-)
diff --git a/modules/video_output/egl.c b/modules/video_output/egl.c
index 6d46c6f..3db9b20 100644
--- a/modules/video_output/egl.c
+++ b/modules/video_output/egl.c
@@ -118,34 +118,43 @@ struct gl_api
EGLint attr[3];
};
-/* See http://www.khronos.org/registry/egl/api/EGL/eglplatform.h *
- * for list and order of default EGL platforms. */
-#if defined (_WIN32) || defined (__VC32__) \
- && !defined (__CYGWIN__) && !defined (__SCITECH_SNAP__) /* Win32 and WinCE */
-# define USE_DEFAULT_PLATFORM USE_PLATFORM_WIN32
-#elif defined (__WINSCW__) || defined (__SYMBIAN32__) /* Symbian */
-# define USE_DEFAULT_PLATFORM USE_PLATFORM_SYMBIAN
-#elif defined (__ANDROID__) || defined (ANDROID)
-# define USE_DEFAULT_PLATFORM USE_PLATFORM_ANDROID
-#elif defined (__unix__) /* X11 (tentative) */
-# define USE_DEFAULT_PLATFORM USE_PLATFORM_X11
+#ifdef EGL_EXT_platform_base
+static EGLDisplay GetDisplayEXT(EGLenum plat, void *dpy, const EGLint *attrs)
+{
+ PFNEGLGETPLATFORMDISPLAYEXTPROC getDisplay =
+ (PFNEGLGETPLATFORMDISPLAYEXTPROC)
+ eglGetProcAddress("eglGetPlatformDisplayEXT");
+
+ assert(getDisplay != NULL);
+ return getDisplay(plat, dpy, attrs);
+}
+
+static EGLSurface CreateWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config,
+ void *window, const EGLint *attrs)
+{
+ PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createSurface =
+ (PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)
+ eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
+
+ assert(createSurface != NULL);
+ return createSurface(dpy, config, window, attrs);
+}
#endif
+static EGLSurface CreateWindowSurface(EGLDisplay dpy, EGLConfig config,
+ void *window, const EGLint *attrs)
+{
+ EGLNativeWindowType *native = window;
+
+ return eglCreateWindowSurface(dpy, config, *native, attrs);
+}
+
/**
* Probe EGL display availability
*/
static int Open (vlc_object_t *obj, const struct gl_api *api)
{
vlc_gl_t *gl = (vlc_gl_t *)obj;
- vout_window_t *wnd = gl->surface;
- union {
- void *ext_platform;
- EGLNativeWindowType native;
- } window;
-#ifdef EGL_EXT_platform_base
- PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createSurface = NULL;
-#endif
-
vlc_gl_sys_t *sys = malloc(sizeof (*sys));
if (unlikely(sys == NULL))
return VLC_ENOMEM;
@@ -154,12 +163,18 @@ static int Open (vlc_object_t *obj, const struct gl_api *api)
sys->display = EGL_NO_DISPLAY;
sys->surface = EGL_NO_SURFACE;
+ vout_window_t *wnd = gl->surface;
+ EGLSurface (*createSurface)(EGLDisplay, EGLConfig, void *, const EGLint *)
+ = CreateWindowSurface;
+ void *window;
+
#ifdef USE_PLATFORM_X11
sys->x11 = NULL;
if (wnd->type != VOUT_WINDOW_TYPE_XID || !vlc_xlib_init(obj))
goto error;
+ window = &wnd->handle.xid;
sys->x11 = XOpenDisplay(wnd->display.x11);
if (sys->x11 == NULL)
goto error;
@@ -175,47 +190,39 @@ static int Open (vlc_object_t *obj, const struct gl_api *api)
# ifdef EGL_EXT_platform_x11
if (CheckClientExt("EGL_EXT_platform_x11"))
{
- PFNEGLGETPLATFORMDISPLAYEXTPROC getDisplay;
const EGLint attrs[] = {
EGL_PLATFORM_X11_SCREEN_EXT, snum,
EGL_NONE
};
-
- getDisplay = (PFNEGLGETPLATFORMDISPLAYEXTPROC)
- eglGetProcAddress("eglGetPlatformDisplayEXT");
- createSurface = (PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)
- eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
- sys->display = getDisplay(EGL_PLATFORM_X11_EXT, sys->x11, attrs);
- window.ext_platform = &wnd->handle.xid;
+ sys->display = GetDisplayEXT(EGL_PLATFORM_X11_EXT, sys->x11, attrs);
+ createSurface = CreateWindowSurfaceEXT;
}
else
# endif
{
-# if USE_DEFAULT_PLATFORM
+# ifdef __unix__
if (snum == XDefaultScreen(sys->x11))
- {
sys->display = eglGetDisplay(sys->x11);
- window.native = wnd->handle.xid;
- }
-# endif
}
+# endif
#elif defined (USE_PLATFORM_WIN32)
if (wnd->type != VOUT_WINDOW_TYPE_HWND)
goto error;
-# if USE_DEFAULT_PLATFORM
+ window = &wnd->handle.hwnd;
+# if defined (_WIN32) || defined (__VC32__) \
+ && !defined (__CYGWIN__) && !defined (__SCITECH_SNAP__)
sys->display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- window.native = wnd->handle.hwnd;
# endif
#elif defined (USE_PLATFORM_ANDROID)
if (wnd->type != VOUT_WINDOW_TYPE_ANDROID_NATIVE)
goto error;
-# if USE_DEFAULT_PLATFORM
+ window = &wnd->handle.anativewindow;
+# if defined (__ANDROID__) || defined (ANDROID)
sys->display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- window.native = wnd->handle.anativewindow;
# endif
#endif
@@ -260,15 +267,7 @@ static int Open (vlc_object_t *obj, const struct gl_api *api)
}
/* Create a drawing surface */
-#ifdef EGL_EXT_platform_base
- if (createSurface != NULL)
- sys->surface = createSurface(sys->display, cfgv[0],
- window.ext_platform, NULL);
- else
-#endif
- sys->surface = eglCreateWindowSurface(sys->display, cfgv[0],
- window.native, NULL);
-
+ sys->surface = createSurface(sys->display, cfgv[0], window, NULL);
if (sys->surface == EGL_NO_SURFACE)
{
msg_Err (obj, "cannot create EGL window surface");
More information about the vlc-commits
mailing list