mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
vo_mga: switch to newer screen dimension handling API
Switch (x)mga vo to new libvo API to reduce code duplication and improve consistency between vos. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32453 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
deba9f3d2b
commit
107845e9db
@ -37,10 +37,7 @@ static uint8_t *vid_data, *frames[4];
|
||||
static int f = -1;
|
||||
|
||||
static uint32_t drwX,drwY,drwWidth,drwHeight;
|
||||
#ifdef VO_XMGA
|
||||
static uint32_t drwBorderWidth,drwDepth;
|
||||
#endif
|
||||
static uint32_t drwcX,drwcY,dwidth,dheight;
|
||||
static uint32_t drwcX,drwcY;
|
||||
|
||||
static struct SwsContext *sws_ctx;
|
||||
|
||||
@ -342,6 +339,13 @@ static int control(uint32_t request, void *data)
|
||||
set_window();
|
||||
}
|
||||
return VO_TRUE;
|
||||
case VOCTRL_UPDATE_SCREENINFO:
|
||||
#ifdef VO_XMGA
|
||||
update_xinerama_info();
|
||||
#else
|
||||
aspect_save_screenres(vo_screenwidth, vo_screenheight);
|
||||
#endif
|
||||
return VO_TRUE;
|
||||
}
|
||||
return VO_NOTIMPL;
|
||||
}
|
||||
@ -496,33 +500,21 @@ static int preinit(const char *vo_subdevice)
|
||||
|
||||
static void set_window( void ){
|
||||
|
||||
#ifdef VO_XMGA
|
||||
if ( WinID )
|
||||
{
|
||||
XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&drwWidth,&drwHeight,&drwBorderWidth,&drwDepth );
|
||||
mp_msg(MSGT_VO,MSGL_V,"[xmga] x: %d y: %d w: %d h: %d\n",drwX,drwY,drwWidth,drwHeight );
|
||||
drwX=0; drwY=0;
|
||||
XTranslateCoordinates( mDisplay,vo_window,mRoot,0,0,&drwcX,&drwcY,&mRoot );
|
||||
mp_msg(MSGT_VO,MSGL_V,"[xmga] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
|
||||
drwcX = vo_dx;
|
||||
drwcY = vo_dy;
|
||||
drwWidth = vo_dwidth;
|
||||
drwHeight = vo_dheight;
|
||||
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{ drwX=drwcX=vo_dx; drwY=drwcY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; }
|
||||
|
||||
aspect(&dwidth,&dheight,A_NOZOOM);
|
||||
if ( vo_fs )
|
||||
{
|
||||
aspect(&dwidth,&dheight,A_ZOOM);
|
||||
drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
|
||||
drwcX+=drwX;
|
||||
drwY=( vo_screenheight - (dheight > vo_screenheight?vo_screenheight:dheight) ) / 2;
|
||||
drwcY+=drwY;
|
||||
drwWidth=(dwidth > vo_screenwidth?vo_screenwidth:dwidth);
|
||||
drwHeight=(dheight > vo_screenheight?vo_screenheight:dheight);
|
||||
mp_msg(MSGT_VO,MSGL_V,"[xmga-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
|
||||
}
|
||||
vo_dwidth=drwWidth; vo_dheight=drwHeight;
|
||||
aspect(&drwWidth, &drwHeight, A_WINZOOM);
|
||||
panscan_calc_windowed();
|
||||
drwWidth += vo_panscan_x;
|
||||
drwHeight += vo_panscan_y;
|
||||
drwWidth = FFMIN(drwWidth, vo_screenwidth);
|
||||
drwHeight = FFMIN(drwHeight, vo_screenheight);
|
||||
drwX = (vo_dwidth - drwWidth ) / 2;
|
||||
drwY = (vo_dheight - drwHeight) / 2;
|
||||
drwcX += drwX;
|
||||
drwcY += drwY;
|
||||
|
||||
#ifdef VO_XMGA
|
||||
#ifdef CONFIG_XINERAMA
|
||||
@ -582,20 +574,5 @@ static void set_window( void ){
|
||||
mga_vid_config.y_org=drwcY;
|
||||
mga_vid_config.dest_width=drwWidth;
|
||||
mga_vid_config.dest_height=drwHeight;
|
||||
if ( vo_panscan > 0.0f && vo_fs )
|
||||
{
|
||||
drwX-=vo_panscan_x>>1;
|
||||
drwY-=vo_panscan_y>>1;
|
||||
drwWidth+=vo_panscan_x;
|
||||
drwHeight+=vo_panscan_y;
|
||||
|
||||
mga_vid_config.x_org-=vo_panscan_x>>1;
|
||||
mga_vid_config.y_org-=vo_panscan_y>>1;
|
||||
mga_vid_config.dest_width=drwWidth;
|
||||
mga_vid_config.dest_height=drwHeight;
|
||||
#ifdef VO_XMGA
|
||||
mDrawColorKey();
|
||||
#endif
|
||||
}
|
||||
if ( ioctl( f,MGA_VID_CONFIG,&mga_vid_config ) ) mp_msg(MSGT_VO,MSGL_WARN,"Error in mga_vid_config ioctl (wrong mga_vid.o version?)" );
|
||||
}
|
||||
|
@ -71,8 +71,6 @@ static int colorkey;
|
||||
static uint32_t mvHeight;
|
||||
static uint32_t mvWidth;
|
||||
|
||||
static Window mRoot;
|
||||
|
||||
static XSetWindowAttributes xWAttribs;
|
||||
|
||||
static int initialized = 0;
|
||||
@ -131,25 +129,9 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
||||
if (mga_init(width, height, format))
|
||||
return -1; // ioctl errors?
|
||||
|
||||
aspect_save_orig(width, height);
|
||||
aspect_save_prescale(d_width, d_height);
|
||||
update_xinerama_info();
|
||||
|
||||
mvWidth = width;
|
||||
mvHeight = height;
|
||||
|
||||
vo_panscan_x = vo_panscan_y = vo_panscan_amount = 0;
|
||||
|
||||
aspect(&d_width, &d_height, A_NOZOOM);
|
||||
vo_dx = (vo_screenwidth - d_width) / 2;
|
||||
vo_dy = (vo_screenheight - d_height) / 2;
|
||||
geometry(&vo_dx, &vo_dy, &d_width, &d_height, vo_screenwidth,
|
||||
vo_screenheight);
|
||||
vo_dx += xinerama_x;
|
||||
vo_dy += xinerama_y;
|
||||
vo_dwidth = d_width;
|
||||
vo_dheight = d_height;
|
||||
|
||||
r = (vo_colorkey & 0x00ff0000) >> 16;
|
||||
g = (vo_colorkey & 0x0000ff00) >> 8;
|
||||
b = vo_colorkey & 0x000000ff;
|
||||
@ -177,10 +159,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
||||
|
||||
initialized = 1;
|
||||
|
||||
{
|
||||
if (flags & VOFLAG_FULLSCREEN)
|
||||
aspect(&dwidth, &dheight, A_ZOOM);
|
||||
|
||||
XGetWindowAttributes(mDisplay, mRootWin, &attribs);
|
||||
mDepth = attribs.depth;
|
||||
if (mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32)
|
||||
@ -196,17 +174,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
||||
flags, xWAttribs.colormap, "xmga", title);
|
||||
XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xWAttribs);
|
||||
|
||||
}
|
||||
|
||||
if ((flags & VOFLAG_FULLSCREEN) && (!WinID))
|
||||
{
|
||||
vo_dx = 0;
|
||||
vo_dy = 0;
|
||||
vo_dwidth = vo_screenwidth;
|
||||
vo_dheight = vo_screenheight;
|
||||
vo_fs = 1;
|
||||
}
|
||||
|
||||
panscan_calc();
|
||||
|
||||
mga_vid_config.colkey_on = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user