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, &current_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 }