diff --git a/libvo/vo_xvmc.c b/libvo/vo_xvmc.c index 6fc415cb24..bb19e898f6 100644 --- a/libvo/vo_xvmc.c +++ b/libvo/vo_xvmc.c @@ -55,6 +55,7 @@ static int bob_deinterlace; static int top_field_first; static int image_width,image_height; +static int image_format; static uint32_t drwX,drwY; #define NO_SUBPICTURE 0 @@ -108,6 +109,7 @@ static const struct{ }; static void xvmc_free(void); +static void xvmc_clean_surfaces(void); static int count_free_surfaces(); static xvmc_render_state_t * find_free_surface(); @@ -450,6 +452,10 @@ static uint32_t vm_height; // Find free port that supports MC, by querying adaptors if( xv_port != 0 || number_of_surfaces != 0 ){ + if( height==image_height && width==image_width && image_format==format){ + xvmc_clean_surfaces(); + goto skip_surface_allocation; + } xvmc_free(); }; numblocks=((width+15)/16)*((height+15)/16); @@ -604,6 +610,8 @@ found_subpic: image_height = height; image_width = width; +skip_surface_allocation: + vo_mouse_autohide = 1; #ifdef HAVE_XF86VM @@ -752,6 +760,7 @@ found_subpic: first_frame = 1; vo_directrendering = 1;//ugly hack, coz xvmc works only with direct rendering + image_format=format; return 0; } @@ -1326,6 +1335,23 @@ xvmc_render_state_t * visible_rndr; return NULL; } +static void xvmc_clean_surfaces(void){ +int i; + + for(i=0; i