[FFmpeg-cvslog] swscale: split out ppc _template.c files from main swscale.c.

Ronald S. Bultje git at videolan.org
Sat Jun 4 06:40:00 CEST 2011


ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Thu Jun  2 20:04:04 2011 -0700| [67d80a54217f93a50b7a52449fad12215b43c9e8] | committer: Ronald S. Bultje

swscale: split out ppc _template.c files from main swscale.c.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=67d80a54217f93a50b7a52449fad12215b43c9e8
---

 libswscale/Makefile                                |    3 +-
 ...wscale_altivec_template.c => swscale_altivec.c} |   20 +++++++++---
 libswscale/ppc/yuv2rgb_altivec.c                   |    1 +
 libswscale/ppc/yuv2rgb_altivec.h                   |   34 ++++++++++++++++++++
 libswscale/swscale.c                               |   12 +------
 libswscale/swscale_internal.h                      |    7 +---
 6 files changed, 56 insertions(+), 21 deletions(-)

diff --git a/libswscale/Makefile b/libswscale/Makefile
index 8ecce99..7a0d129 100644
--- a/libswscale/Makefile
+++ b/libswscale/Makefile
@@ -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
diff --git a/libswscale/ppc/swscale_altivec_template.c b/libswscale/ppc/swscale_altivec.c
similarity index 96%
rename from libswscale/ppc/swscale_altivec_template.c
rename to libswscale/ppc/swscale_altivec.c
index 3c31c3e..acfdc94 100644
--- a/libswscale/ppc/swscale_altivec_template.c
+++ b/libswscale/ppc/swscale_altivec.c
@@ -21,6 +21,13 @@
  * 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
diff --git a/libswscale/ppc/yuv2rgb_altivec.c b/libswscale/ppc/yuv2rgb_altivec.c
index 4b2bdaf..476db22 100644
--- a/libswscale/ppc/yuv2rgb_altivec.c
+++ b/libswscale/ppc/yuv2rgb_altivec.c
@@ -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
index 0000000..b54a856
--- /dev/null
+++ b/libswscale/ppc/yuv2rgb_altivec.h
@@ -0,0 +1,34 @@
+/*
+ * AltiVec-enhanced yuv2yuvX
+ *
+ * Copyright (C) 2004 Romain Dolbeau <romain at 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 */
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index f15495d..1fc3155 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -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;
 }
diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h
index 09d1224..15643ae 100644
--- a/libswscale/swscale_internal.h
+++ b/libswscale/swscale_internal.h
@@ -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 */



More information about the ffmpeg-cvslog mailing list