From fb855b86593ad2a9db71cce3aa652ace93af38b5 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 9 Dec 2014 17:47:02 +0100 Subject: client API: expose OpenGL renderer This adds API to libmpv that lets host applications use the mpv opengl renderer. This is a more flexible (and possibly more portable) option to foreign window embedding (via --wid). This assumes that methods like context sharing and multithreaded OpenGL rendering are infeasible, and that a way is needed to integrate it with an application that uses a single thread to render everything. Add an example that does this with QtQuick/qml. The example is relatively lazy, but still shows how relatively simple the integration is. The FBO indirection could probably be avoided, but would require more work (and would probably lead to worse QtQuick integration, because it would have to ignore transformations like rotation). Because this makes mpv directly use the host application's OpenGL context, there is no platform specific code involved in mpv, except for hw decoding interop. main.qml is derived from some Qt example. The following things are still missing: - a way to do better video timing - expose GL renderer options, allow changing them at runtime - support for color equalizer controls - support for screenshots --- player/core.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'player/core.h') diff --git a/player/core.h b/player/core.h index 31a2b1eca4..344e55df19 100644 --- a/player/core.h +++ b/player/core.h @@ -339,6 +339,8 @@ typedef struct MPContext { struct mp_nav_state *nav_state; struct mp_ipc_ctx *ipc_ctx; + + struct mpv_opengl_cb_context *gl_cb_ctx; } MPContext; // audio.c -- cgit v1.2.3