swscale: split out ppc _template.c files from main swscale.c.
authorRonald S. Bultje <rsbultje@gmail.com>
Fri, 3 Jun 2011 03:04:04 +0000 (20:04 -0700)
committerRonald S. Bultje <rsbultje@gmail.com>
Fri, 3 Jun 2011 16:52:09 +0000 (09:52 -0700)
libswscale/Makefile
libswscale/ppc/swscale_altivec.c [moved from libswscale/ppc/swscale_altivec_template.c with 96% similarity]
libswscale/ppc/yuv2rgb_altivec.c
libswscale/ppc/yuv2rgb_altivec.h [new file with mode: 0644]
libswscale/swscale.c
libswscale/swscale_internal.h

index 8ecce99..7a0d129 100644 (file)
@@ -11,7 +11,8 @@ OBJS-$(ARCH_BFIN)          +=  bfin/internal_bfin.o     \
                                bfin/swscale_bfin.o      \
                                bfin/yuv2rgb_bfin.o
 OBJS-$(CONFIG_MLIB)        +=  mlib/yuv2rgb_mlib.o
-OBJS-$(HAVE_ALTIVEC)       +=  ppc/yuv2rgb_altivec.o    \
+OBJS-$(HAVE_ALTIVEC)       +=  ppc/swscale_altivec.o    \
+                               ppc/yuv2rgb_altivec.o    \
                                ppc/yuv2yuv_altivec.o
 OBJS-$(HAVE_MMX)           +=  x86/rgb2rgb.o            \
                                x86/yuv2rgb_mmx.o
similarity index 96%
rename from libswscale/ppc/swscale_altivec_template.c
rename to libswscale/ppc/swscale_altivec.c
index 3c31c3e..acfdc94 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include <inttypes.h>
+#include "config.h"
+#include "libswscale/swscale.h"
+#include "libswscale/swscale_internal.h"
+#include "libavutil/cpu.h"
+#include "yuv2rgb_altivec.h"
+
 #define vzero vec_splat_s32(0)
 
 static inline void
@@ -214,10 +221,10 @@ yuv2yuvX_altivec_real(SwsContext *c,
     }
 }
 
-static inline void hScale_altivec_real(int16_t *dst, int dstW,
-                                       const uint8_t *src, int srcW,
-                                       int xInc, const int16_t *filter,
-                                       const int16_t *filterPos, int filterSize)
+static void hScale_altivec_real(int16_t *dst, int dstW,
+                                const uint8_t *src, int srcW,
+                                int xInc, const int16_t *filter,
+                                const int16_t *filterPos, int filterSize)
 {
     register int i;
     DECLARE_ALIGNED(16, int, tempo)[4];
@@ -394,8 +401,11 @@ static inline void hScale_altivec_real(int16_t *dst, int dstW,
     }
 }
 
-static void RENAME(sws_init_swScale)(SwsContext *c)
+void ff_sws_init_swScale_altivec(SwsContext *c)
 {
+    if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
+        return;
+
     c->yuv2yuvX     = yuv2yuvX_altivec_real;
 
     /* The following list of supported dstFormat values should
index 4b2bdaf..476db22 100644 (file)
@@ -95,6 +95,7 @@ adjustment.
 #include "libswscale/swscale.h"
 #include "libswscale/swscale_internal.h"
 #include "libavutil/cpu.h"
+#include "yuv2rgb_altivec.h"
 
 #undef PROFILE_THE_BEAST
 #undef INC_SCALING
diff --git a/libswscale/ppc/yuv2rgb_altivec.h b/libswscale/ppc/yuv2rgb_altivec.h
new file mode 100644 (file)
index 0000000..b54a856
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * AltiVec-enhanced yuv2yuvX
+ *
+ * Copyright (C) 2004 Romain Dolbeau <romain@dolbeau.org>
+ * based on the equivalent C code in swscale.c
+ *
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef PPC_YUV2RGB_ALTIVEC_H
+#define PPC_YUV2RGB_ALTIVEC_H 1
+
+void ff_yuv2packedX_altivec(SwsContext *c, const int16_t *lumFilter,
+                            const int16_t **lumSrc, int lumFilterSize,
+                            const int16_t *chrFilter, const int16_t **chrUSrc,
+                            const int16_t **chrVSrc, int chrFilterSize,
+                            const int16_t **alpSrc, uint8_t *dest,
+                            int dstW, int dstY);
+
+#endif /* PPC_YUV2RGB_ALTIVEC_H */
index f15495d..1fc3155 100644 (file)
@@ -1189,12 +1189,6 @@ static inline void monoblack2Y(uint8_t *dst, const uint8_t *src, int width, uint
 
 #include "swscale_template.c"
 
-#if HAVE_ALTIVEC
-#undef RENAME
-#define RENAME(a) a ## _altivec
-#include "ppc/swscale_altivec_template.c"
-#endif
-
 //MMX versions
 #if HAVE_MMX
 #undef RENAME
@@ -1227,10 +1221,8 @@ SwsFunc ff_getSwsFunc(SwsContext *c)
     if (cpu_flags & AV_CPU_FLAG_MMX2)
         sws_init_swScale_MMX2(c);
 #endif
-#if HAVE_ALTIVEC
-    if (cpu_flags & AV_CPU_FLAG_ALTIVEC)
-        sws_init_swScale_altivec(c);
-#endif
+    if (HAVE_ALTIVEC)
+        ff_sws_init_swScale_altivec(c);
 
     return swScale_c;
 }
index 09d1224..15643ae 100644 (file)
@@ -335,11 +335,6 @@ SwsFunc ff_yuv2rgb_init_mlib(SwsContext *c);
 SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c);
 SwsFunc ff_yuv2rgb_get_func_ptr_bfin(SwsContext *c);
 void ff_bfin_get_unscaled_swscale(SwsContext *c);
-void ff_yuv2packedX_altivec(SwsContext *c, const int16_t *lumFilter,
-                            const int16_t **lumSrc, int lumFilterSize,
-                            const int16_t *chrFilter, const int16_t **chrUSrc,
-                            const int16_t **chrVSrc, int chrFilterSize,
-                            uint8_t *dest, int dstW, int dstY);
 
 const char *sws_format_name(enum PixelFormat format);
 
@@ -487,4 +482,6 @@ void ff_swscale_get_unscaled_altivec(SwsContext *c);
  */
 SwsFunc ff_getSwsFunc(SwsContext *c);
 
+void ff_sws_init_swScale_altivec(SwsContext *c);
+
 #endif /* SWSCALE_SWSCALE_INTERNAL_H */