diff options
author | iive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-04-07 16:59:34 +0000 |
---|---|---|
committer | iive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-04-07 16:59:34 +0000 |
commit | 62d06e57365c3ed0ff303327a90e327621401d36 (patch) | |
tree | ece9dfcc002989f03ae9f25e993f49e77fe6847c /libvo | |
parent | 862264a4fbca9413ac30f77f09814b3e74a35bc1 (diff) | |
download | mpv-62d06e57365c3ed0ff303327a90e327621401d36.tar.bz2 mpv-62d06e57365c3ed0ff303327a90e327621401d36.tar.xz |
fix blackscreen when changing panscan.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15061 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/vo_xvmc.c | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/libvo/vo_xvmc.c b/libvo/vo_xvmc.c index 99c0ec4a31..c373ced236 100644 --- a/libvo/vo_xvmc.c +++ b/libvo/vo_xvmc.c @@ -996,16 +996,33 @@ int status,rez; XvMCSyncSurface(mDisplay, srf); } -static void flip_page(void){ +static void put_xvmc_image(xvmc_render_state_t * p_render_surface){ int rez; int clipX,clipY,clipW,clipH; -int i,cfs; + + if(p_render_surface == NULL) + return; clipX = drwX-(vo_panscan_x>>1); clipY = drwY-(vo_panscan_y>>1); clipW = vo_dwidth+vo_panscan_x; clipH = vo_dheight+vo_panscan_y; + rez = XvMCPutSurface(mDisplay, p_render_surface->p_surface, + vo_window, + 0, 0, image_width, image_height, + clipX, clipY, clipW, clipH, + 3);//p_render_surface_to_show->display_flags); + if(rez != Success){ + printf("vo_xvmc: PutSurface failer, critical error!\n"); + assert(0); + } +} + +static void flip_page(void){ +int i,cfs; + + if( verbose > 3 ) printf("vo_xvmc: flip_page show(rndr=%p)\n\n",p_render_surface_to_show); @@ -1044,15 +1061,7 @@ int i,cfs; //show it, displaying is always vsynced, so skip it for benchmark if(!benchmark){ - rez = XvMCPutSurface(mDisplay, p_render_surface_to_show->p_surface, - vo_window, - 0, 0, image_width, image_height, - clipX, clipY, clipW, clipH, - 3);//p_render_surface_to_show->display_flags); - if(rez != Success){ - printf("vo_xvmc: PutSurface failer, critical error!\n"); - assert(0); - } + put_xvmc_image(p_render_surface_to_show); } p_render_surface_visible = p_render_surface_to_show; @@ -1089,11 +1098,7 @@ int e=vo_x11_check_events(mDisplay); if ( e & VO_EVENT_EXPOSE ) { vo_xv_draw_colorkey(drwX,drwY,vo_dwidth,vo_dheight); - if(p_render_surface_visible != NULL) - XvMCPutSurface(mDisplay, p_render_surface_visible->p_surface,vo_window, - 0, 0, image_width, image_height, - drwX,drwY,vo_dwidth,vo_dheight, - 3);//,p_render_surface_visible->display_flags);!! + put_xvmc_image(p_render_surface_visible); } } @@ -1365,8 +1370,11 @@ static uint32_t control(uint32_t request, void *data, ... ) if(old_y != vo_panscan_y) { - XClearWindow(mDisplay, vo_window); - XFlush(mDisplay); + vo_x11_clearwindow_part(mDisplay, vo_window, + vo_dwidth + vo_panscan_x - 1, + vo_dheight + vo_panscan_y - 1, + 1); + put_xvmc_image(p_render_surface_visible); } } return VO_TRUE; |