[MPlayer-dev-eng] [PATCH] Xinerama full screen bug fix

Georgi Chorbadzhiyski gf at unixsol.org
Thu Jul 24 13:48:09 CEST 2008


Around 07/23/08 01:52, Georgi Chorbadzhiyski scribbled:
> The following patch fixes a problem with full screen geometry when
> mplayer is started with the X11 -xineramascreen option.
> 
> Without this patch the following produces wrong results:
>   1. Start mplayer -xineramascreen 1 file
>   2. Hit 'f' to put mplayer in full screen mode (or use -fs option)
>      - Everything works as expected
>   3. Hit 'f' again to stop full screen mode
>   4. Move mplayer window to another screen (with different resolution)
>   5. Hit 'f' to put mplayer into full screen mode again
>     - Expected - mplayer in full screen mode
>     - Result   - mplayer in full screen mode but the video have
>                  the dimensions of the first screen, not the current
>                  screen
> 
> The problem is in libvo/x11_common.c: update_xinerama_info(void)
> This function is used in two cases:
>   1. To position the mplayer window
>   2. To position full screen
> 
> The function auto detects current screen and acts accordingly
> when no -xineramascreen option is used, but fails to detect current
> screen when -xinramascreen is used.
> 
> The proposed fix is simple, allow vo_x11_fullscreen() to ignore
> xinerama_screen option and always force auto detection in case when
> full screen is requested.
> 
> Signed-off-by: Georgi Chorbadzhiyski <georgi at unixsol.org>
> 
> --- libvo/x11_common.c	(revision 27338)
> +++ libvo/x11_common.c	(working copy)
> @@ -366,8 +366,7 @@
>      XA_INIT(WM_DELETE_WINDOW);
>  }
> 
> -void update_xinerama_info(void) {
> -    int screen = xinerama_screen;
> +void get_xinerama_info(int screen) {
>      xinerama_x = xinerama_y = 0;
>  #ifdef HAVE_XINERAMA
>      if (screen >= -1 && XineramaIsActive(mDisplay))
> @@ -403,6 +402,10 @@
>      aspect_save_screenres(vo_screenwidth, vo_screenheight);
>  }
> 
> +void inline update_xinerama_info(void) {
> +    get_xinerama_info(xinerama_screen);
> +}
> +
>  int vo_init(void)
>  {
>  // int       mScreen;
> @@ -1539,7 +1542,7 @@
>              vo_old_width = vo_dwidth;
>              vo_old_height = vo_dheight;
>          }
> -            update_xinerama_info();
> +            get_xinerama_info(-1); // get current screen dimensions
>              x = xinerama_x;
>              y = xinerama_y;
>              w = vo_screenwidth;

Guys any comment on this? Is it crap or everybody is at
the beach drinking cocktails with funny straws? ;)

-- 
Georgi Chorbadzhiyski
http://georgi.unixsol.org/



More information about the MPlayer-dev-eng mailing list