From: Sam Hocevar Date: Fri, 15 Nov 2002 12:22:58 +0000 (+0000) Subject: * ./src/video_output/video_output.c: backport of a fix in MAIN for X-Git-Tag: 0.4.6.1~21 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;ds=sidebyside;h=4b62642846215598211b6bf15a60261d73a96de7;p=vlc * ./src/video_output/video_output.c: backport of a fix in MAIN for spoiled FPU registers. --- diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 6d313c4ce9..891b636c81 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -5,7 +5,7 @@ * thread, and destroy a previously oppened video output thread. ***************************************************************************** * Copyright (C) 2000-2001 VideoLAN - * $Id: video_output.c,v 1.180.2.1 2002/06/02 02:23:34 sam Exp $ + * $Id: video_output.c,v 1.180.2.2 2002/11/15 12:22:58 sam Exp $ * * Authors: Vincent Seguin * @@ -978,44 +978,48 @@ static void InitWindowSize( vout_thread_t *p_vout, int *pi_width, int *pi_height ) { int i_width, i_height; - double f_zoom; + uint64_t ll_zoom; + +#define FP_FACTOR 1000 /* our fixed point factor */ i_width = config_GetIntVariable( "width" ); i_height = config_GetIntVariable( "height" ); - f_zoom = config_GetFloatVariable( "zoom" ); + ll_zoom = (u64)( FP_FACTOR * config_GetFloatVariable( "zoom" ) ); if( (i_width >= 0) && (i_height >= 0)) { - *pi_width = i_width * f_zoom; - *pi_height = i_height * f_zoom; + *pi_width = (int)( i_width * ll_zoom / FP_FACTOR ); + *pi_height = (int)( i_height * ll_zoom / FP_FACTOR ); return; } else if( i_width >= 0 ) { - *pi_width = i_width * f_zoom; - *pi_height = i_width * f_zoom * VOUT_ASPECT_FACTOR / - p_vout->render.i_aspect; + *pi_width = (int)( i_width * ll_zoom / FP_FACTOR ); + *pi_height = (int)( i_width * ll_zoom * VOUT_ASPECT_FACTOR / + p_vout->render.i_aspect / FP_FACTOR ); return; } else if( i_height >= 0 ) { - *pi_height = i_height * f_zoom; - *pi_width = i_height * f_zoom * p_vout->render.i_aspect / - VOUT_ASPECT_FACTOR; + *pi_height = (int)( i_height * ll_zoom / FP_FACTOR ); + *pi_width = (int)( i_height * ll_zoom * p_vout->render.i_aspect / + VOUT_ASPECT_FACTOR / FP_FACTOR ); return; } if( p_vout->render.i_height * p_vout->render.i_aspect >= p_vout->render.i_width * VOUT_ASPECT_FACTOR ) { - *pi_width = p_vout->render.i_height * f_zoom - * p_vout->render.i_aspect / VOUT_ASPECT_FACTOR; - *pi_height = p_vout->render.i_height * f_zoom; + *pi_width = (int)( p_vout->render.i_height * ll_zoom + * p_vout->render.i_aspect / VOUT_ASPECT_FACTOR / FP_FACTOR ); + *pi_height = (int)( p_vout->render.i_height * ll_zoom / FP_FACTOR ); } else { - *pi_width = p_vout->render.i_width * f_zoom; - *pi_height = p_vout->render.i_width * f_zoom - * VOUT_ASPECT_FACTOR / p_vout->render.i_aspect; + *pi_width = (int)( p_vout->render.i_width * ll_zoom / FP_FACTOR ); + *pi_height = (int)( p_vout->render.i_width * ll_zoom + * VOUT_ASPECT_FACTOR / p_vout->render.i_aspect / FP_FACTOR ); } + +#undef FP_FACTOR }