mirror of
https://github.com/mpv-player/mpv.git
synced 2024-09-20 12:02:23 +02:00
using the common -vm code, patch by Santi Béjar <tiarda@yahoo.es>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4427 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
b583968115
commit
04b96abd16
@ -59,10 +59,6 @@ int XShmGetEventBase( Display* );
|
||||
/* local data */
|
||||
static unsigned char *ImageData;
|
||||
|
||||
#ifdef HAVE_XF86VM
|
||||
XF86VidModeModeInfo **vidmodes=NULL;
|
||||
#endif
|
||||
|
||||
/* X11 related variables */
|
||||
//static Display *mDisplay;
|
||||
static Window mywindow;
|
||||
@ -256,7 +252,11 @@ static uint32_t init( uint32_t width,uint32_t height,uint32_t d_width,uint32_t d
|
||||
Colormap theCmap;
|
||||
XSetWindowAttributes xswa;
|
||||
unsigned long xswamask;
|
||||
#ifdef HAVE_XF86VM
|
||||
unsigned int modeline_width, modeline_height;
|
||||
static uint32_t vm_width;
|
||||
static uint32_t vm_height;
|
||||
#endif
|
||||
|
||||
image_height=height;
|
||||
image_width=width;
|
||||
@ -298,61 +298,19 @@ static uint32_t init( uint32_t width,uint32_t height,uint32_t d_width,uint32_t d
|
||||
hint.width=image_width;
|
||||
hint.height=image_height;
|
||||
|
||||
|
||||
#ifdef HAVE_XF86VM
|
||||
if (vm) {
|
||||
unsigned int vm_event, vm_error;
|
||||
unsigned int vm_ver, vm_rev;
|
||||
int i,j,have_vm=0,X,Y;
|
||||
|
||||
int modecount;
|
||||
|
||||
if (XF86VidModeQueryExtension(mDisplay, &vm_event, &vm_error)) {
|
||||
XF86VidModeQueryVersion(mDisplay, &vm_ver, &vm_rev);
|
||||
printf("XF86VidMode Extension v%i.%i\n", vm_ver, vm_rev);
|
||||
have_vm=1;
|
||||
} else
|
||||
printf("XF86VidMode Extension not available.\n");
|
||||
|
||||
if (have_vm) {
|
||||
if (vidmodes==NULL)
|
||||
XF86VidModeGetAllModeLines(mDisplay,mScreen,&modecount,&vidmodes);
|
||||
j=0;
|
||||
modeline_width=vidmodes[0]->hdisplay;
|
||||
modeline_height=vidmodes[0]->vdisplay;
|
||||
if ((d_width==0) && (d_height==0))
|
||||
{ X=image_width; Y=image_height; }
|
||||
else
|
||||
{ X=d_width; Y=d_height; }
|
||||
|
||||
for (i=1; i<modecount; i++)
|
||||
if ((vidmodes[i]->hdisplay >= X) && (vidmodes[i]->vdisplay >= Y))
|
||||
if ( (vidmodes[i]->hdisplay < modeline_width ) && (vidmodes[i]->vdisplay < modeline_height) )
|
||||
{
|
||||
modeline_width=vidmodes[i]->hdisplay;
|
||||
modeline_height=vidmodes[i]->vdisplay;
|
||||
j=i;
|
||||
}
|
||||
|
||||
printf("XF86VM: Selected video mode %dx%d for image size %dx%d.\n",modeline_width, modeline_height, image_width, image_height);
|
||||
XF86VidModeLockModeSwitch(mDisplay,mScreen,0);
|
||||
XF86VidModeSwitchToMode(mDisplay,mScreen,vidmodes[j]);
|
||||
XF86VidModeSwitchToMode(mDisplay,mScreen,vidmodes[j]);
|
||||
X=(vo_screenwidth-modeline_width)/2;
|
||||
Y=(vo_screenheight-modeline_height)/2;
|
||||
XF86VidModeSetViewPort(mDisplay,mScreen,X,Y);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_XF86VM
|
||||
if ( vm )
|
||||
{
|
||||
hint.x=(vo_screenwidth-modeline_width)/2;
|
||||
hint.y=(vo_screenheight-modeline_height)/2;
|
||||
hint.width=modeline_width;
|
||||
hint.height=modeline_height;
|
||||
}
|
||||
{
|
||||
if ((d_width==0) && (d_height==0))
|
||||
{ vm_width=image_width; vm_height=image_height; }
|
||||
else
|
||||
{ vm_width=d_width; vm_height=d_height; }
|
||||
vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height);
|
||||
hint.x=(vo_screenwidth-modeline_width)/2;
|
||||
hint.y=(vo_screenheight-modeline_height)/2;
|
||||
hint.width=modeline_width;
|
||||
hint.height=modeline_height;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if ( fullscreen )
|
||||
@ -642,19 +600,11 @@ uninit(void)
|
||||
{
|
||||
XDestroyWindow( mDisplay,mywindow );
|
||||
}
|
||||
|
||||
#ifdef HAVE_XF86VM
|
||||
#ifdef HAVE_NEW_GUI
|
||||
if ((vidmodes!=NULL)&&( vo_window == None ) )
|
||||
#else
|
||||
if (vidmodes!=NULL)
|
||||
#endif
|
||||
{
|
||||
int screen; screen=DefaultScreen( mDisplay );
|
||||
XF86VidModeSwitchToMode(mDisplay,screen,vidmodes[0]);
|
||||
XF86VidModeSwitchToMode(mDisplay,screen,vidmodes[0]);
|
||||
free(vidmodes);
|
||||
}
|
||||
vo_vm_close(mDisplay);
|
||||
#endif
|
||||
|
||||
printf("vo: uninit!\n");
|
||||
}
|
||||
|
||||
|
@ -322,6 +322,12 @@ static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t
|
||||
XGCValues xgcv;
|
||||
XSetWindowAttributes xswa;
|
||||
unsigned long xswamask;
|
||||
#ifdef HAVE_XF86VM
|
||||
int vm=0;
|
||||
unsigned int modeline_width, modeline_height;
|
||||
static uint32_t vm_width;
|
||||
static uint32_t vm_height;
|
||||
#endif
|
||||
|
||||
aspect_save_orig(width,height);
|
||||
aspect_save_prescale(d_width,d_height);
|
||||
@ -336,6 +342,7 @@ static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t
|
||||
#endif
|
||||
|
||||
mFullscreen=flags&1;
|
||||
if( flags&0x02 ) vm = 1;
|
||||
num_buffers=vo_doublebuffering?NUM_BUFFERS:1;
|
||||
|
||||
if (!vo_init()) return -1;
|
||||
@ -351,7 +358,21 @@ static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t
|
||||
hint.width = d_width;
|
||||
hint.height = d_height;
|
||||
aspect(&d_width,&d_height,A_NOZOOM);
|
||||
|
||||
#ifdef HAVE_XF86VM
|
||||
if ( vm )
|
||||
{
|
||||
if ((d_width==0) && (d_height==0))
|
||||
{ vm_width=image_width; vm_height=image_height; }
|
||||
else
|
||||
{ vm_width=d_width; vm_height=d_height; }
|
||||
vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height);
|
||||
hint.x=(vo_screenwidth-modeline_width)/2;
|
||||
hint.y=(vo_screenheight-modeline_height)/2;
|
||||
hint.width=modeline_width;
|
||||
hint.height=modeline_height;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if ( mFullscreen )
|
||||
{
|
||||
hint.width=vo_screenwidth;
|
||||
@ -402,6 +423,17 @@ static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t
|
||||
mygc = XCreateGC(mDisplay, mywindow, 0L, &xgcv);
|
||||
XFlush(mDisplay);
|
||||
XSync(mDisplay, False);
|
||||
#ifdef HAVE_XF86VM
|
||||
if ( vm )
|
||||
{
|
||||
/* Grab the mouse pointer in our window */
|
||||
XGrabPointer(mDisplay, mywindow, True, 0,
|
||||
GrabModeAsync, GrabModeAsync,
|
||||
mywindow, None, CurrentTime);
|
||||
XSetInputFocus(mDisplay, mywindow, RevertToNone, CurrentTime);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NEW_GUI
|
||||
}
|
||||
else
|
||||
@ -721,6 +753,10 @@ static void uninit(void)
|
||||
XDestroyWindow( mDisplay,mywindow );
|
||||
}
|
||||
for( i=0;i<num_buffers;i++ ) deallocate_xvimage( i );
|
||||
#ifdef HAVE_XF86VM
|
||||
vo_vm_close(mDisplay);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
static uint32_t preinit(const char *arg)
|
||||
|
Loading…
Reference in New Issue
Block a user