]> git.sesse.net Git - vlc/blobdiff - plugins/yuv/video_yuvmmx.c
* Various little fixes
[vlc] / plugins / yuv / video_yuvmmx.c
index 4070be87f1962104f62c329cf9ec7ab13f8726a0..cbaf45947304e2fc93284335ef93d9d80aed3be2 100644 (file)
@@ -3,8 +3,9 @@
  * Provides functions to perform the YUV conversion.
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: video_yuvmmx.c,v 1.10 2001/06/03 12:47:21 sam Exp $
  *
- * Authors:
+ * Authors: Samuel Hocevar <sam@zoy.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -41,8 +42,6 @@
 #include "mtime.h"
 #include "tests.h"
 
-#include "modules.h"
-
 #include "video.h"
 #include "video_output.h"
 
@@ -50,6 +49,9 @@
 
 #include "intf_msg.h"
 
+#include "modules.h"
+#include "modules_export.h"
+
 static int     yuv_Probe      ( probedata_t *p_data );
 static int     yuv_Init       ( vout_thread_t *p_vout );
 static int     yuv_Reset      ( vout_thread_t *p_vout );
@@ -78,21 +80,17 @@ void _M( yuv_getfunctions )( function_list_t * p_function_list )
 static int yuv_Probe( probedata_t *p_data )
 {
     /* Test for MMX support in the CPU */
-    if( TestCPU( CPU_CAPABILITY_MMX ) )
+    if( !TestCPU( CPU_CAPABILITY_MMX ) )
     {
-        if( TestMethod( YUV_METHOD_VAR, "yuvmmx" ) )
-        {
-            return( 999 );
-        }
-        else
-        {
-            return( 100 );
-        }
+        return( 0 );
     }
-    else
+
+    if( TestMethod( YUV_METHOD_VAR, "yuvmmx" ) )
     {
-        return( 0 );
+        return( 999 );
     }
+
+    return( 100 );
 }
 
 /*****************************************************************************
@@ -328,29 +326,31 @@ static void SetYUV( vout_thread_t *p_vout )
     {
         switch( p_vout->i_bytes_per_pixel)
         {
+#define _X( foo ) (vout_yuv_convert_t *) _M( foo )
         case 1:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420YCbr8;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422YCbr8;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444YCbr8;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420YCbr8 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422YCbr8 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444YCbr8 );
             break;
         
         case 2:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420YCbr16;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422YCbr16;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444YCbr16;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420YCbr16 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422YCbr16 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444YCbr16 );
             break;
         
         case 3:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420YCbr24;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422YCbr24;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444YCbr24;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420YCbr24 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422YCbr24 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444YCbr24 );
             break;
         
         case 4:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420YCbr32;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422YCbr32;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444YCbr32;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420YCbr32 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422YCbr32 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444YCbr32 );
             break;
+#undef _X
         }
     }    
     else if( p_vout->b_grayscale )
@@ -358,26 +358,28 @@ static void SetYUV( vout_thread_t *p_vout )
         /* Grayscale */
         switch( p_vout->i_bytes_per_pixel )
         {
+#define _X( foo ) (vout_yuv_convert_t *) _M( foo )
         case 1:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertY4Gray8;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertY4Gray8;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertY4Gray8;
+            p_vout->yuv.pf_yuv420 = _X( ConvertY4Gray8 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertY4Gray8 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertY4Gray8 );
             break;
         case 2:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertY4Gray16;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertY4Gray16;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertY4Gray16;
+            p_vout->yuv.pf_yuv420 = _X( ConvertY4Gray16 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertY4Gray16 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertY4Gray16 );
             break;
         case 3:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420RGB24;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertY4Gray24;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertY4Gray24;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420RGB24 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertY4Gray24 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertY4Gray24 );
             break;
         case 4:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420RGB32;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertY4Gray32;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertY4Gray32;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420RGB32 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertY4Gray32 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertY4Gray32 );
             break;
+#undef _X
         }
     }
     else
@@ -385,26 +387,28 @@ static void SetYUV( vout_thread_t *p_vout )
         /* Color */
         switch( p_vout->i_bytes_per_pixel )
         {
+#define _X( foo ) (vout_yuv_convert_t *) _M( foo )
         case 1:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420RGB8;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422RGB8;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444RGB8;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420RGB8 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422RGB8 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444RGB8 );
             break;
         case 2:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420RGB16;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422RGB16;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444RGB16;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420RGB16 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422RGB16 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444RGB16 );
             break;
         case 3:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420RGB24;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422RGB24;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444RGB24;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420RGB24 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422RGB24 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444RGB24 );
             break;
         case 4:
-            p_vout->yuv.pf_yuv420 = (vout_yuv_convert_t *) ConvertYUV420RGB32;
-            p_vout->yuv.pf_yuv422 = (vout_yuv_convert_t *) ConvertYUV422RGB32;
-            p_vout->yuv.pf_yuv444 = (vout_yuv_convert_t *) ConvertYUV444RGB32;
+            p_vout->yuv.pf_yuv420 = _X( ConvertYUV420RGB32 );
+            p_vout->yuv.pf_yuv422 = _X( ConvertYUV422RGB32 );
+            p_vout->yuv.pf_yuv444 = _X( ConvertYUV444RGB32 );
             break;
+#undef _X
         }
     }
 }
@@ -416,9 +420,9 @@ static void SetYUV( vout_thread_t *p_vout )
  * It will also set horizontal and vertical scaling indicators. If b_double
  * is set, the p_offset structure has interleaved Y and U/V offsets.
  *****************************************************************************/
-void SetOffset( int i_width, int i_height, int i_pic_width, int i_pic_height,
-                boolean_t *pb_h_scaling, int *pi_v_scaling,
-                int *p_offset, boolean_t b_double )
+void _M( SetOffset )( int i_width, int i_height, int i_pic_width,
+                      int i_pic_height, boolean_t *pb_h_scaling,
+                      int *pi_v_scaling, int *p_offset, boolean_t b_double )
 {
     int i_x;                                    /* x position in destination */
     int i_scale_count;                                     /* modulo counter */