summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-08-31 19:46:02 +0200
committerwm4 <wm4@nowhere>2015-08-31 19:46:02 +0200
commite6fd6d6e4914ff27ed6e935315f436ea15cf48ad (patch)
tree0cac7cb23476d61134fd20632a204ff2f510a737
parentfb94744595aabfa665e0799e9b386e77633c1818 (diff)
downloadmpv-e6fd6d6e4914ff27ed6e935315f436ea15cf48ad.tar.bz2
mpv-e6fd6d6e4914ff27ed6e935315f436ea15cf48ad.tar.xz
vo_rpi, vo_opengl: do not globally terminate EGL on VO uninit
eglTerminate() affects the EGLDisplay in all threads. Since the RPI firmware apparently only ever uses EGL_DEFAULT_DISPLAY, this means it will trash all other contexts on other threads in the same process. Thus we don't call eglTerminate() at all, at least on RPI. Call eglReleaseThread() instead (which may or may not be a NOP).
-rw-r--r--video/out/gl_rpi.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/video/out/gl_rpi.c b/video/out/gl_rpi.c
index 0f308ae291..9109662ef2 100644
--- a/video/out/gl_rpi.c
+++ b/video/out/gl_rpi.c
@@ -140,8 +140,7 @@ void mp_egl_rpi_destroy(struct mp_egl_rpi *p)
if (p->egl_context)
eglDestroyContext(p->egl_display, p->egl_context);
p->egl_context = EGL_NO_CONTEXT;
- if (p->egl_display)
- eglTerminate(p->egl_display);
+ eglReleaseThread();
p->egl_display = EGL_NO_DISPLAY;
talloc_free(p->gl);
p->gl = NULL;