changeset 24314:20359547f3c3

Remove global vo_hdc, since it is recommended to release a DC as soon as possible.
author reimar
date Mon, 03 Sep 2007 08:44:36 +0000
parents 2624fefeee1a
children 12f2487fb845
files libvo/gl_common.c libvo/w32_common.c
diffstat 2 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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;