Mercurial > mplayer.hg
changeset 32367:4a890f542e69
Switch (x)mga vo to new libvo API to reduce code duplication and improve
consistency between vos.
Also fixes using it with the GUI, the vo_window would not be set before.
author | reimar |
---|---|
date | Sat, 09 Oct 2010 11:12:53 +0000 |
parents | 3a6a61ffbb34 |
children | ff2204a57cd3 |
files | libvo/mga_template.c libvo/vo_xmga.c |
diffstat | 2 files changed, 22 insertions(+), 87 deletions(-) [+] |
line wrap: on
line diff
--- a/libvo/mga_template.c Sat Oct 09 01:31:52 2010 +0000 +++ b/libvo/mga_template.c Sat Oct 09 11:12:53 2010 +0000 @@ -37,10 +37,7 @@ 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; @@ -352,6 +349,13 @@ 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; } @@ -506,33 +510,21 @@ 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 ); - - } - else -#endif - { drwX=drwcX=vo_dx; drwY=drwcY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; } + drwcX = vo_dx; + 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 @@ -592,20 +584,5 @@ 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?)" ); }
--- a/libvo/vo_xmga.c Sat Oct 09 01:31:52 2010 +0000 +++ b/libvo/vo_xmga.c Sat Oct 09 11:12:53 2010 +0000 @@ -55,10 +55,6 @@ static unsigned int timerd = 0; #endif -#ifdef CONFIG_GUI -#include "gui/interface.h" -#endif - static const vo_info_t info = { "Matrox G200/G4x0/G550 overlay in X11 window (using /dev/mga_vid)", "xmga", @@ -75,8 +71,6 @@ static uint32_t mvHeight; static uint32_t mvWidth; -static Window mRoot; - static XSetWindowAttributes xWAttribs; static int initialized = 0; @@ -135,25 +129,9 @@ 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; @@ -181,15 +159,6 @@ initialized = 1; -#ifdef CONFIG_GUI - if (use_gui) - guiGetEvent(guiSetShVideo, 0); // the GUI will set up / resize the window - else -#endif - { - 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) @@ -205,17 +174,6 @@ flags, xWAttribs.colormap, "xmga", title); XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xWAttribs); - } // !GUI - - 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;