[MPlayer-cvslog] r22275 - trunk/libvo/vo_xvmc.c
iive
subversion at mplayerhq.hu
Mon Feb 19 12:38:19 CET 2007
Author: iive
Date: Mon Feb 19 12:38:19 2007
New Revision: 22275
Modified:
trunk/libvo/vo_xvmc.c
Log:
Don't free and then allocate surfaces when config() is called again with same resolution and format.
In this case properly clean surfaces from locking flags and empty the queue.
Modified: trunk/libvo/vo_xvmc.c
==============================================================================
--- trunk/libvo/vo_xvmc.c (original)
+++ trunk/libvo/vo_xvmc.c Mon Feb 19 12:38:19 2007
@@ -55,6 +55,7 @@
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 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 @@
// 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 @@
image_height = height;
image_width = width;
+skip_surface_allocation:
+
vo_mouse_autohide = 1;
#ifdef HAVE_XF86VM
@@ -752,6 +760,7 @@
first_frame = 1;
vo_directrendering = 1;//ugly hack, coz xvmc works only with direct rendering
+ image_format=format;
return 0;
}
@@ -1326,6 +1335,23 @@
return NULL;
}
+static void xvmc_clean_surfaces(void){
+int i;
+
+ for(i=0; i<number_of_surfaces; i++){
+
+ surface_render[i].state&=!( MP_XVMC_STATE_DISPLAY_PENDING |
+ MP_XVMC_STATE_OSD_SOURCE |
+ 0);
+ surface_render[i].p_osd_target_surface_render=NULL;
+ if(surface_render[i].state != 0){
+ mp_msg(MSGT_VO,MSGL_WARN,"vo_xvmc: surface[%d].state=%d\n",
+ i,surface_render[i].state);
+ }
+ }
+ free_element=0;//clean up the queue
+}
+
static uint32_t get_image(mp_image_t *mpi){
xvmc_render_state_t * rndr;
More information about the MPlayer-cvslog
mailing list