# HG changeset patch # User reimar # Date 1188809076 0 # Node ID 20359547f3c30941da8fa45309e1c39c8ac80a1d # Parent 2624fefeee1a72ffaa563da2a2acd26af57071aa Remove global vo_hdc, since it is recommended to release a DC as soon as possible. diff -r 2624fefeee1a -r 20359547f3c3 libvo/gl_common.c --- a/libvo/gl_common.c Mon Sep 03 08:36:27 2007 +0000 +++ b/libvo/gl_common.c Mon Sep 03 08:44:36 2007 +0000 @@ -1341,6 +1341,7 @@ HDC windc = GetDC(win); HGLRC new_context = 0; int keep_context = 0; + int res = SET_WINDOW_FAILED; // should only be needed when keeping context, but not doing glFinish // can cause flickering even when we do not keep it. @@ -1356,7 +1357,7 @@ new_context = wglCreateContext(windc); if (!new_context) { mp_msg(MSGT_VO, MSGL_FATAL, "[gl] Could not create GL context!\n"); - return SET_WINDOW_FAILED; + goto out; } } @@ -1366,12 +1367,11 @@ if (!keep_context) { wglDeleteContext(new_context); } - return SET_WINDOW_FAILED; + goto out; } // set new values vo_w32_window = win; - vo_hdc = windc; { RECT rect; GetClientRect(win, &rect); @@ -1386,9 +1386,13 @@ getFunctions(w32gpa, NULL); // and inform that reinit is neccessary - return SET_WINDOW_REINIT; - } - return SET_WINDOW_OK; + res = SET_WINDOW_REINIT; + } else + res = SET_WINDOW_OK; + +out: + ReleaseDC(windc); + return res; } void releaseGlContext(int *vinfo, HGLRC *context) { @@ -1401,7 +1405,9 @@ } void swapGlBuffers() { + HDC vo_hdc = GetDC(vo_w32_window); SwapBuffers(vo_hdc); + ReleaseDC(vo_hdc); } #else #ifdef HAVE_LIBDL diff -r 2624fefeee1a -r 20359547f3c3 libvo/w32_common.c --- a/libvo/w32_common.c Mon Sep 03 08:36:27 2007 +0000 +++ b/libvo/w32_common.c Mon Sep 03 08:44:36 2007 +0000 @@ -20,7 +20,6 @@ static const char* classname = "MPlayer - Media player for Win32"; int vo_vm = 0; -HDC vo_hdc = 0; // last non-fullscreen extends int prev_width; @@ -250,6 +249,7 @@ static int createRenderingContext(void) { HWND layer = HWND_NOTOPMOST; PIXELFORMATDESCRIPTOR pfd; + HDC vo_hdc = GetDC(vo_window); RECT r; int pf; if (WinID < 0) { @@ -308,6 +308,7 @@ pf = ChoosePixelFormat(vo_hdc, &pfd); if (!pf) { mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to select a valid pixel format!\n"); + ReleaseDC(vo_hdc); return 0; } @@ -315,6 +316,7 @@ mp_msg(MSGT_VO, MSGL_V, "vo: win32: running at %dx%d with depth %d\n", vo_screenwidth, vo_screenheight, vo_depthonscreen); + ReleaseDC(vo_hdc); return 1; } @@ -369,8 +371,6 @@ } } - vo_hdc = GetDC(vo_window); - myMonitorFromWindow = NULL; myGetMonitorInfo = NULL; myEnumDisplayMonitors = NULL;