mirror of
https://github.com/mpv-player/mpv
synced 2025-02-17 21:27:08 +00:00
vo_opengl: add KMS/DRM VAAPI hardware decoding interop
Just requires glueing it together with Bloat Super Glue (tm).
This commit is contained in:
parent
ca00e347fc
commit
68366b05f2
@ -353,6 +353,9 @@ static int drm_egl_init(struct MPGLContext *ctx, int flags)
|
||||
void *(*gpa)(const GLubyte*) = (void *(*)(const GLubyte*))eglGetProcAddress;
|
||||
mpgl_load_functions(ctx->gl, gpa, egl_exts, ctx->vo->log);
|
||||
|
||||
ctx->native_display_type = "drm";
|
||||
ctx->native_display = (void *)(intptr_t)p->kms->fd;
|
||||
|
||||
// required by gbm_surface_lock_front_buffer
|
||||
eglSwapBuffers(p->egl.display, p->egl.surface);
|
||||
|
||||
|
@ -65,6 +65,19 @@ static VADisplay *create_wayland_va_display(GL *gl)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAVE_VAAPI_DRM
|
||||
#include <va/va_drm.h>
|
||||
|
||||
static VADisplay *create_drm_va_display(GL *gl)
|
||||
{
|
||||
int drm_fd = (intptr_t)gl->MPGetNativeDisplay("drm");
|
||||
// Note: yes, drm_fd==0 could be valid - but it's rare and doesn't fit with
|
||||
// our slightly crappy way of passing it through, so consider 0 not
|
||||
// valid.
|
||||
return drm_fd ? vaGetDisplayDRM(drm_fd) : NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static VADisplay *create_native_va_display(GL *gl)
|
||||
{
|
||||
if (!gl->MPGetNativeDisplay)
|
||||
@ -79,6 +92,11 @@ static VADisplay *create_native_va_display(GL *gl)
|
||||
display = create_wayland_va_display(gl);
|
||||
if (display)
|
||||
return display;
|
||||
#endif
|
||||
#if HAVE_VAAPI_DRM
|
||||
display = create_drm_va_display(gl);
|
||||
if (display)
|
||||
return display;
|
||||
#endif
|
||||
return display;
|
||||
}
|
||||
|
6
wscript
6
wscript
@ -705,7 +705,11 @@ video_output_features = [
|
||||
'desc': 'VAAPI (Wayland support)',
|
||||
'deps': [ 'vaapi', 'gl-wayland' ],
|
||||
'func': check_pkg_config('libva-wayland', '>= 0.36.0'),
|
||||
|
||||
}, {
|
||||
'name': '--vaapi-drm',
|
||||
'desc': 'VAAPI (DRM/EGL support)',
|
||||
'deps': [ 'vaapi', 'egl-drm' ],
|
||||
'func': check_pkg_config('libva-drm', '>= 0.36.0'),
|
||||
}, {
|
||||
'name': '--vaapi-glx',
|
||||
'desc': 'VAAPI GLX',
|
||||
|
Loading…
Reference in New Issue
Block a user