Commit 72baa591 authored by Stéphane Borel's avatar Stéphane Borel

Maybe corrected aspect ratio issue in fullscreen xvideo.

parent b0f6c87b
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_xvideo.c: Xvideo video output display method * vout_xvideo.c: Xvideo video output display method
***************************************************************************** *****************************************************************************
* Copyright (C) 1998, 1999, 2000, 2001 VideoLAN * Copyright (C) 1998, 1999, 2000, 2001 VideoLAN
* $Id: vout_xvideo.c,v 1.28 2001/09/30 01:05:37 stef Exp $ * $Id: vout_xvideo.c,v 1.29 2001/11/06 16:59:06 stef Exp $
* *
* Authors: Shane Harper <shanegh@optusnet.com.au> * Authors: Shane Harper <shanegh@optusnet.com.au>
* Vincent Seguin <seguin@via.ecp.fr> * Vincent Seguin <seguin@via.ecp.fr>
...@@ -1114,38 +1114,6 @@ static void XVideoOutputCoords( const picture_t *p_pic, const boolean_t scale, ...@@ -1114,38 +1114,6 @@ static void XVideoOutputCoords( const picture_t *p_pic, const boolean_t scale,
const int win_w, const int win_h, const int win_w, const int win_h,
int *dx, int *dy, int *w, int *h ) int *dx, int *dy, int *w, int *h )
{ {
if( !scale )
{
*w = p_pic->i_width;
*h = p_pic->i_height;
}
else
{
*h = win_h;
switch( p_pic->i_aspect_ratio )
{
case AR_3_4_PICTURE:
*w = win_h * 4 / 3;
break;
case AR_16_9_PICTURE:
*w = win_h * 16 / 9;
break;
case AR_221_1_PICTURE:
*w = win_h * 221 / 100;
break;
case AR_SQUARE_PICTURE:
default:
*w = win_h * p_pic->i_width / p_pic->i_height;
break;
}
}
/* Set picture position */
*dx = (win_w - *w) / 2;
*dy = (win_h - *h) / 2;
} }
...@@ -1322,19 +1290,70 @@ static int XVideoGetPort( Display *dpy ) ...@@ -1322,19 +1290,70 @@ static int XVideoGetPort( Display *dpy )
*****************************************************************************/ *****************************************************************************/
static void XVideoDisplay( vout_thread_t *p_vout ) static void XVideoDisplay( vout_thread_t *p_vout )
{ {
int i_dest_width, i_dest_height, i_dest_x, i_dest_y; int i_dest_width, i_dest_height;
if( !p_vout->p_sys->p_xvimage ) if( !p_vout->p_sys->p_xvimage )
{ {
return; return;
} }
XVideoOutputCoords( p_vout->p_rendered_pic, p_vout->b_scale, i_dest_height = p_vout->p_sys->i_window_height > p_vout->p_rendered_pic->i_height ? p_vout->p_sys->i_window_height : p_vout->p_rendered_pic->i_height;
p_vout->p_sys->i_window_width, i_dest_width = p_vout->p_sys->i_window_width > p_vout->p_rendered_pic->i_width ? p_vout->p_sys->i_window_width : p_vout->p_rendered_pic->i_width;
p_vout->p_sys->i_window_height,
&i_dest_x, &i_dest_y, if( p_vout->b_scale )
&i_dest_width, &i_dest_height); {
int i_ratio = 900 * i_dest_width / i_dest_height;
switch( p_vout->p_rendered_pic->i_aspect_ratio )
{
case AR_3_4_PICTURE:
if( i_ratio < 1200 )
{
i_dest_width = i_dest_height * 4 / 3;
}
else
{
i_dest_height = i_dest_width * 3 / 4;
}
break;
case AR_16_9_PICTURE:
if( i_ratio < 1600 )
{
i_dest_width = i_dest_height * 16 / 9;
}
else
{
i_dest_height = i_dest_width * 9 / 16;
}
break;
case AR_221_1_PICTURE:
if( i_ratio < 1989 )
{
i_dest_width = i_dest_height * 221 / 100;
}
else
{
i_dest_height = i_dest_width * 100 / 221;
}
break;
case AR_SQUARE_PICTURE:
default:
if( i_ratio < 900 )
{
i_dest_width = i_dest_height * p_vout->p_rendered_pic->i_width / p_vout->p_rendered_pic->i_height;
}
else
{
i_dest_height = i_dest_width * p_vout->p_rendered_pic->i_height / p_vout->p_rendered_pic->i_width;
}
break;
}
}
XvShmPutImage( p_vout->p_sys->p_display, p_vout->p_sys->xv_port, XvShmPutImage( p_vout->p_sys->p_display, p_vout->p_sys->xv_port,
p_vout->p_sys->yuv_window, p_vout->p_sys->gc, p_vout->p_sys->yuv_window, p_vout->p_sys->gc,
...@@ -1344,12 +1363,10 @@ static void XVideoDisplay( vout_thread_t *p_vout ) ...@@ -1344,12 +1363,10 @@ static void XVideoDisplay( vout_thread_t *p_vout )
p_vout->p_rendered_pic->i_height, p_vout->p_rendered_pic->i_height,
0 /*dest_x*/, 0 /*dest_y*/, i_dest_width, i_dest_height, 0 /*dest_x*/, 0 /*dest_y*/, i_dest_width, i_dest_height,
False ); False );
/* YUV window */ /* YUV window */
XResizeWindow( p_vout->p_sys->p_display, p_vout->p_sys->yuv_window, XResizeWindow( p_vout->p_sys->p_display, p_vout->p_sys->yuv_window,
i_dest_width, i_dest_height ); i_dest_width, i_dest_height );
XMoveWindow( p_vout->p_sys->p_display, p_vout->p_sys->yuv_window,
i_dest_x, i_dest_y );
/* Root window */ /* Root window */
if( ( ( i_dest_width != p_vout->p_sys->i_window_width ) || if( ( ( i_dest_width != p_vout->p_sys->i_window_width ) ||
...@@ -1362,7 +1379,14 @@ static void XVideoDisplay( vout_thread_t *p_vout ) ...@@ -1362,7 +1379,14 @@ static void XVideoDisplay( vout_thread_t *p_vout )
XResizeWindow( p_vout->p_sys->p_display, p_vout->p_sys->window, XResizeWindow( p_vout->p_sys->p_display, p_vout->p_sys->window,
i_dest_width, i_dest_height ); i_dest_width, i_dest_height );
} }
#if 0
/* Set picture position */
i_dest_x = (p_vout->p_sys->i_window_width - i_dest_width) / 2;
i_dest_y = (p_vout->p_sys->i_window_height - i_dest_height) / 2;
XMoveWindow( p_vout->p_sys->p_display, p_vout->p_sys->yuv_window,
i_dest_x, i_dest_y );
#endif
/* Send the order to the X server */ /* Send the order to the X server */
XSync( p_vout->p_sys->p_display, False ); XSync( p_vout->p_sys->p_display, False );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment