mirror of https://github.com/mpv-player/mpv
vo_opengl: x11egl: retrieve framebuffer depth
This is used for dithering, although I'm not aware of anyone who got higher than 8 bit depth support to work on Linux. Also put this into egl_helpers.c. Since EGL is pseudo-portable at best I have no hope that the EGL context creation code in all the backends can be fully shared. But some self-contained functionality can definitely be shared.
This commit is contained in:
parent
3394d37b4e
commit
32cd85bc7e
|
@ -70,7 +70,8 @@ SOURCES-$(ENCODING) += video/out/vo_lavc.c audio/out/ao_lavc.c \
|
|||
common/encode_lavc.c
|
||||
|
||||
SOURCES-$(GL_X11) += video/out/x11_common.c video/out/opengl/x11.c
|
||||
SOURCES-$(EGL_X11) += video/out/x11_common.c video/out/opengl/x11egl.c
|
||||
SOURCES-$(EGL_X11) += video/out/x11_common.c video/out/opengl/x11egl.c \
|
||||
video/out/opengl/egl_helpers.c
|
||||
SOURCES-$(GL_WAYLAND) += video/out/wayland_common.c \
|
||||
video/out/opengl/wayland.c
|
||||
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* This file is part of mpv.
|
||||
*
|
||||
* mpv is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* mpv is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with mpv. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* You can alternatively redistribute this file and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "egl_helpers.h"
|
||||
#include "common.h"
|
||||
|
||||
void mp_egl_get_depth(struct GL *gl, EGLConfig fbc)
|
||||
{
|
||||
EGLint tokens[] = {EGL_RED_SIZE, EGL_GREEN_SIZE, EGL_BLUE_SIZE};
|
||||
int *ptrs[] = {&gl->fb_r, &gl->fb_g, &gl->fb_b};
|
||||
for (int n = 0; n < MP_ARRAY_SIZE(tokens); n++) {
|
||||
EGLint depth = 0;
|
||||
if (eglGetConfigAttrib(eglGetCurrentDisplay(), fbc, tokens[n], &depth))
|
||||
*ptrs[n] = depth;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef MP_GL_EGL_HELPERS_H
|
||||
#define MP_GL_EGL_HELPERS_H
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
|
||||
struct GL;
|
||||
void mp_egl_get_depth(struct GL *gl, EGLConfig fbc);
|
||||
|
||||
#endif
|
|
@ -29,6 +29,7 @@
|
|||
#include "common/common.h"
|
||||
#include "video/out/x11_common.h"
|
||||
#include "common.h"
|
||||
#include "egl_helpers.h"
|
||||
|
||||
struct priv {
|
||||
EGLDisplay egl_display;
|
||||
|
@ -156,6 +157,7 @@ static int mpegl_init(struct MPGLContext *ctx, int flags)
|
|||
|
||||
void *(*gpa)(const GLubyte*) = (void *(*)(const GLubyte*))eglGetProcAddress;
|
||||
mpgl_load_functions(ctx->gl, gpa, egl_exts, vo->log);
|
||||
mp_egl_get_depth(ctx->gl, config);
|
||||
|
||||
ctx->native_display_type = "x11";
|
||||
ctx->native_display = vo->x11->display;
|
||||
|
|
7
wscript
7
wscript
|
@ -760,7 +760,12 @@ video_output_features = [
|
|||
} , {
|
||||
'name': '--gl',
|
||||
'desc': 'OpenGL video outputs',
|
||||
'deps_any': [ 'gl-cocoa', 'gl-x11', 'egl-drm', 'gl-win32', 'gl-wayland', 'rpi' ],
|
||||
'deps_any': [ 'gl-cocoa', 'gl-x11', 'egl-x11', 'egl-drm', 'gl-win32', 'gl-wayland', 'rpi' ],
|
||||
'func': check_true
|
||||
}, {
|
||||
'name': 'egl-helpers',
|
||||
'desc': 'EGL helper functions',
|
||||
'deps_any': [ 'egl-x11' ],
|
||||
'func': check_true
|
||||
}
|
||||
]
|
||||
|
|
|
@ -313,6 +313,7 @@ def build(ctx):
|
|||
( "video/out/filter_kernels.c" ),
|
||||
( "video/out/opengl/cocoa.c", "gl-cocoa" ),
|
||||
( "video/out/opengl/common.c", "gl" ),
|
||||
( "video/out/opengl/egl_helpers.c", "egl-helpers" ),
|
||||
( "video/out/opengl/rpi.c", "rpi" ),
|
||||
( "video/out/opengl/hwdec.c", "gl" ),
|
||||
( "video/out/opengl/hwdec_dxva2.c", "gl-win32" ),
|
||||
|
|
Loading…
Reference in New Issue