Mercurial > mplayer.hg
diff libvo/vo_directx.c @ 17853:33ec9a9f4eef
fix for MPlayer taking 100% CPU with -wid on some systems, patch by Martin Fiedler <martin.fiedler at gmx.net>
author | faust3 |
---|---|
date | Mon, 13 Mar 2006 16:52:01 +0000 |
parents | 13cdba48ff98 |
children | d5971cc55b39 |
line wrap: on
line diff
--- a/libvo/vo_directx.c Mon Mar 13 16:36:18 2006 +0000 +++ b/libvo/vo_directx.c Mon Mar 13 16:52:01 2006 +0000 @@ -79,6 +79,7 @@ static RECT monitor_rect; //monitor coordinates static float window_aspect; static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL; +static RECT last_rect = {0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE}; extern void mplayer_put_key(int code); //let mplayer handel the keyevents extern void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)); @@ -435,6 +436,8 @@ return 1; } + last_rect.left = 0xDEADC0DE; // reset window position cache + if(vo_adapter_num){ //display other than default OurDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX) GetProcAddress(hddraw_dll,"DirectDrawEnumerateExA"); if (!OurDirectDrawEnumerateEx){ @@ -532,6 +535,17 @@ DWORD dwUpdateFlags=0; int width,height; + if(!vidmode && !vo_fs && WinID!=-1) { + RECT current_rect = {0, 0, 0, 0}; + GetWindowRect(hWnd, ¤t_rect); + if ((current_rect.left == last_rect.left) + && (current_rect.top == last_rect.top) + && (current_rect.right == last_rect.right) + && (current_rect.bottom == last_rect.bottom)) + return 0; + last_rect = current_rect; + } + if(vo_fs || vidmode){ aspect(&width,&height,A_ZOOM); rd.left=(vo_screenwidth-width)/2; @@ -1480,6 +1494,7 @@ case VOCTRL_GET_IMAGE: return get_image(data); case VOCTRL_QUERY_FORMAT: + last_rect.left = 0xDEADC0DE; // reset window position cache return query_format(*((uint32_t*)data)); case VOCTRL_DRAW_IMAGE: return put_image(data); @@ -1577,6 +1592,9 @@ va_end(ap); return color_ctrl_get(data, value); } + case VOCTRL_RESET: + last_rect.left = 0xDEADC0DE; // reset window position cache + // fall-through intended }; return VO_NOTIMPL; }