mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 00:02:13 +00:00
Avoid parts of xvmc reinit when source format does not change
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22255 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
6f797ffeab
commit
e77a7954de
@ -327,6 +327,8 @@ vo_functions_t* init_best_video_out(char** vo_list){
|
||||
int config_video_out(vo_functions_t *vo, uint32_t width, uint32_t height,
|
||||
uint32_t d_width, uint32_t d_height, uint32_t flags,
|
||||
char *title, uint32_t format) {
|
||||
static uint32_t old_width, old_height, old_format;
|
||||
int res;
|
||||
panscan_init();
|
||||
aspect_save_orig(width,height);
|
||||
aspect_save_prescale(d_width,d_height);
|
||||
@ -342,7 +344,14 @@ int config_video_out(vo_functions_t *vo, uint32_t width, uint32_t height,
|
||||
vo_dwidth = d_width;
|
||||
vo_dheight = d_height;
|
||||
|
||||
return vo->config(width, height, d_width, d_height, flags, title, format);
|
||||
if (vo_config_count && width == old_width && height == old_height &&
|
||||
format == old_format)
|
||||
flags |= VOFLAG_SAME_INPUT;
|
||||
res = vo->config(width, height, d_width, d_height, flags, title, format);
|
||||
if (!res) {
|
||||
old_width = width; old_height = height; old_format = format;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
#if defined(HAVE_FBDEV)||defined(HAVE_VESA)
|
||||
|
@ -95,6 +95,7 @@ typedef struct {
|
||||
#define VOFLAG_MODESWITCHING 0x02
|
||||
#define VOFLAG_SWSCALE 0x04
|
||||
#define VOFLAG_FLIPPING 0x08
|
||||
#define VOFLAG_SAME_INPUT 0x10
|
||||
#define VOFLAG_XOVERLAY_SUB_VO 0x10000
|
||||
|
||||
typedef struct vo_info_s
|
||||
|
@ -419,33 +419,14 @@ opt_t subopts [] =
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int config(uint32_t width, uint32_t height,
|
||||
uint32_t d_width, uint32_t d_height,
|
||||
uint32_t flags, char *title, uint32_t format){
|
||||
static int init_xvmc(int width, int height, unsigned format) {
|
||||
int i,mode_id,rez;
|
||||
int numblocks,blocks_per_macroblock;//bpmb we have 6,8,12
|
||||
|
||||
//from vo_xv
|
||||
char *hello = (title == NULL) ? "XvMC render" : title;
|
||||
XSizeHints hint;
|
||||
XVisualInfo vinfo;
|
||||
XGCValues xgcv;
|
||||
XSetWindowAttributes xswa;
|
||||
XWindowAttributes attribs;
|
||||
unsigned long xswamask;
|
||||
int depth;
|
||||
#ifdef HAVE_XF86VM
|
||||
int vm=0;
|
||||
unsigned int modeline_width, modeline_height;
|
||||
static uint32_t vm_width;
|
||||
static uint32_t vm_height;
|
||||
#endif
|
||||
//end of vo_xv
|
||||
|
||||
if( !IMGFMT_IS_XVMC(format) )
|
||||
{
|
||||
assert(0);//should never happen, abort on debug or
|
||||
return 1;//return error on relese
|
||||
return -1;//return error on relese
|
||||
}
|
||||
|
||||
// Find free port that supports MC, by querying adaptors
|
||||
@ -600,6 +581,38 @@ found_subpic:
|
||||
|
||||
vo_xv_enable_vsync();//it won't break anything
|
||||
|
||||
/* store image dimesions for displaying */
|
||||
p_render_surface_visible = NULL;
|
||||
p_render_surface_to_show = NULL;
|
||||
|
||||
free_element = 0;
|
||||
first_frame = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int config(uint32_t width, uint32_t height,
|
||||
uint32_t d_width, uint32_t d_height,
|
||||
uint32_t flags, char *title, uint32_t format){
|
||||
//from vo_xv
|
||||
char *hello = (title == NULL) ? "XvMC render" : title;
|
||||
XSizeHints hint;
|
||||
XVisualInfo vinfo;
|
||||
XGCValues xgcv;
|
||||
XSetWindowAttributes xswa;
|
||||
XWindowAttributes attribs;
|
||||
unsigned long xswamask;
|
||||
int depth;
|
||||
#ifdef HAVE_XF86VM
|
||||
int vm=0;
|
||||
unsigned int modeline_width, modeline_height;
|
||||
static uint32_t vm_width;
|
||||
static uint32_t vm_height;
|
||||
#endif
|
||||
//end of vo_xv
|
||||
|
||||
if (!(flags & VOFLAG_SAME_INPUT))
|
||||
if (init_xvmc(width, height, format) < 0) return -1;
|
||||
|
||||
//taken from vo_xv
|
||||
image_height = height;
|
||||
image_width = width;
|
||||
@ -744,13 +757,6 @@ found_subpic:
|
||||
|
||||
//end vo_xv
|
||||
|
||||
/* store image dimesions for displaying */
|
||||
p_render_surface_visible = NULL;
|
||||
p_render_surface_to_show = NULL;
|
||||
|
||||
free_element = 0;
|
||||
first_frame = 1;
|
||||
|
||||
vo_directrendering = 1;//ugly hack, coz xvmc works only with direct rendering
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user