]> git.sesse.net Git - vlc/commitdiff
* ./src/video_output/video_output.c: backport of a fix in MAIN for
authorSam Hocevar <sam@videolan.org>
Fri, 15 Nov 2002 12:22:58 +0000 (12:22 +0000)
committerSam Hocevar <sam@videolan.org>
Fri, 15 Nov 2002 12:22:58 +0000 (12:22 +0000)
    spoiled FPU registers.

src/video_output/video_output.c

index 6d313c4ce9999466daf5f27e3e895ca09b6b9751..891b636c81c09ab33022e4ea0d1b7eb8f4ee934a 100644 (file)
@@ -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 <seguin@via.ecp.fr>
  *
@@ -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
 }