Mercurial > mplayer.hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
17852:0c1c2f921546 | 17853:33ec9a9f4eef |
---|---|
77 static GUID selected_guid; | 77 static GUID selected_guid; |
78 static GUID *selected_guid_ptr = NULL; | 78 static GUID *selected_guid_ptr = NULL; |
79 static RECT monitor_rect; //monitor coordinates | 79 static RECT monitor_rect; //monitor coordinates |
80 static float window_aspect; | 80 static float window_aspect; |
81 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL; | 81 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL; |
82 static RECT last_rect = {0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE}; | |
82 | 83 |
83 extern void mplayer_put_key(int code); //let mplayer handel the keyevents | 84 extern void mplayer_put_key(int code); //let mplayer handel the keyevents |
84 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)); | 85 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)); |
85 extern int vidmode; | 86 extern int vidmode; |
86 | 87 |
433 { | 434 { |
434 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed loading ddraw.dll\n" ); | 435 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed loading ddraw.dll\n" ); |
435 return 1; | 436 return 1; |
436 } | 437 } |
437 | 438 |
439 last_rect.left = 0xDEADC0DE; // reset window position cache | |
440 | |
438 if(vo_adapter_num){ //display other than default | 441 if(vo_adapter_num){ //display other than default |
439 OurDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX) GetProcAddress(hddraw_dll,"DirectDrawEnumerateExA"); | 442 OurDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX) GetProcAddress(hddraw_dll,"DirectDrawEnumerateExA"); |
440 if (!OurDirectDrawEnumerateEx){ | 443 if (!OurDirectDrawEnumerateEx){ |
441 FreeLibrary( hddraw_dll ); | 444 FreeLibrary( hddraw_dll ); |
442 hddraw_dll = NULL; | 445 hddraw_dll = NULL; |
530 DDCAPS capsDrv; | 533 DDCAPS capsDrv; |
531 DDOVERLAYFX ovfx; | 534 DDOVERLAYFX ovfx; |
532 DWORD dwUpdateFlags=0; | 535 DWORD dwUpdateFlags=0; |
533 int width,height; | 536 int width,height; |
534 | 537 |
538 if(!vidmode && !vo_fs && WinID!=-1) { | |
539 RECT current_rect = {0, 0, 0, 0}; | |
540 GetWindowRect(hWnd, ¤t_rect); | |
541 if ((current_rect.left == last_rect.left) | |
542 && (current_rect.top == last_rect.top) | |
543 && (current_rect.right == last_rect.right) | |
544 && (current_rect.bottom == last_rect.bottom)) | |
545 return 0; | |
546 last_rect = current_rect; | |
547 } | |
548 | |
535 if(vo_fs || vidmode){ | 549 if(vo_fs || vidmode){ |
536 aspect(&width,&height,A_ZOOM); | 550 aspect(&width,&height,A_ZOOM); |
537 rd.left=(vo_screenwidth-width)/2; | 551 rd.left=(vo_screenwidth-width)/2; |
538 rd.top=(vo_screenheight-height)/2; | 552 rd.top=(vo_screenheight-height)/2; |
539 if (WinID == -1) | 553 if (WinID == -1) |
1478 switch (request) { | 1492 switch (request) { |
1479 | 1493 |
1480 case VOCTRL_GET_IMAGE: | 1494 case VOCTRL_GET_IMAGE: |
1481 return get_image(data); | 1495 return get_image(data); |
1482 case VOCTRL_QUERY_FORMAT: | 1496 case VOCTRL_QUERY_FORMAT: |
1497 last_rect.left = 0xDEADC0DE; // reset window position cache | |
1483 return query_format(*((uint32_t*)data)); | 1498 return query_format(*((uint32_t*)data)); |
1484 case VOCTRL_DRAW_IMAGE: | 1499 case VOCTRL_DRAW_IMAGE: |
1485 return put_image(data); | 1500 return put_image(data); |
1486 case VOCTRL_BORDER: | 1501 case VOCTRL_BORDER: |
1487 if(WinID != -1) return VO_TRUE; | 1502 if(WinID != -1) return VO_TRUE; |
1575 va_start(ap, data); | 1590 va_start(ap, data); |
1576 value = va_arg(ap, int*); | 1591 value = va_arg(ap, int*); |
1577 va_end(ap); | 1592 va_end(ap); |
1578 return color_ctrl_get(data, value); | 1593 return color_ctrl_get(data, value); |
1579 } | 1594 } |
1595 case VOCTRL_RESET: | |
1596 last_rect.left = 0xDEADC0DE; // reset window position cache | |
1597 // fall-through intended | |
1580 }; | 1598 }; |
1581 return VO_NOTIMPL; | 1599 return VO_NOTIMPL; |
1582 } | 1600 } |