aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-08-29 15:10:09 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-08-29 15:10:09 +0200
commit5ff1b588eb4e639f0b3cfeff2118aadb2b43584a (patch)
tree3a23e041ee9ffa0e5c1f9e73f7c75e4dfae5f623
parent4399e727237316c6491d800b7053dd44322c0ee7 (diff)
parentc2503d9c8ab42ea55922e9f5a10c8bfbbbfeaf19 (diff)
downloadffmpeg-5ff1b588eb4e639f0b3cfeff2118aadb2b43584a.tar.gz
Merge commit 'c2503d9c8ab42ea55922e9f5a10c8bfbbbfeaf19'
* commit 'c2503d9c8ab42ea55922e9f5a10c8bfbbbfeaf19': swscale: ppc: Hide arch-specific initialization details Conflicts: libswscale/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libswscale/ppc/Makefile6
-rw-r--r--libswscale/ppc/swscale_altivec.c6
-rw-r--r--libswscale/ppc/yuv2rgb_altivec.c28
-rw-r--r--libswscale/ppc/yuv2yuv_altivec.c8
-rw-r--r--libswscale/swscale.c4
-rw-r--r--libswscale/swscale_internal.h10
-rw-r--r--libswscale/swscale_unscaled.c4
-rw-r--r--libswscale/utils.c6
-rw-r--r--libswscale/yuv2rgb.c4
9 files changed, 51 insertions, 25 deletions
diff --git a/libswscale/ppc/Makefile b/libswscale/ppc/Makefile
index 018955b122..d1b596eb3f 100644
--- a/libswscale/ppc/Makefile
+++ b/libswscale/ppc/Makefile
@@ -1,3 +1,3 @@
-ALTIVEC-OBJS += ppc/swscale_altivec.o \
- ppc/yuv2rgb_altivec.o \
- ppc/yuv2yuv_altivec.o \
+OBJS += ppc/swscale_altivec.o \
+ ppc/yuv2rgb_altivec.o \
+ ppc/yuv2yuv_altivec.o \
diff --git a/libswscale/ppc/swscale_altivec.c b/libswscale/ppc/swscale_altivec.c
index 9ca2868cc8..86f40ab84f 100644
--- a/libswscale/ppc/swscale_altivec.c
+++ b/libswscale/ppc/swscale_altivec.c
@@ -30,6 +30,7 @@
#include "libavutil/cpu.h"
#include "yuv2rgb_altivec.h"
+#if HAVE_ALTIVEC
#define vzero vec_splat_s32(0)
#define yuv2planeX_8(d1, d2, l1, src, x, perm, filter) do { \
@@ -284,9 +285,11 @@ static void hScale_altivec_real(SwsContext *c, int16_t *dst, int dstW,
}
}
}
+#endif /* HAVE_ALTIVEC */
-av_cold void ff_sws_init_swScale_altivec(SwsContext *c)
+av_cold void ff_sws_init_swscale_ppc(SwsContext *c)
{
+#if HAVE_ALTIVEC
enum AVPixelFormat dstFormat = c->dstFormat;
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
@@ -325,4 +328,5 @@ av_cold void ff_sws_init_swScale_altivec(SwsContext *c)
break;
}
}
+#endif /* HAVE_ALTIVEC */
}
diff --git a/libswscale/ppc/yuv2rgb_altivec.c b/libswscale/ppc/yuv2rgb_altivec.c
index b0661f8a56..25282bf100 100644
--- a/libswscale/ppc/yuv2rgb_altivec.c
+++ b/libswscale/ppc/yuv2rgb_altivec.c
@@ -100,6 +100,8 @@
#include "libavutil/pixdesc.h"
#include "yuv2rgb_altivec.h"
+#if HAVE_ALTIVEC
+
#undef PROFILE_THE_BEAST
#undef INC_SCALING
@@ -524,14 +526,17 @@ static int altivec_uyvy_rgb32(SwsContext *c, const unsigned char **in,
return srcSliceH;
}
+#endif /* HAVE_ALTIVEC */
+
/* Ok currently the acceleration routine only supports
* inputs of widths a multiple of 16
* and heights a multiple 2
*
* So we just fall back to the C codes for this.
*/
-av_cold SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c)
+av_cold SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c)
{
+#if HAVE_ALTIVEC
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
return NULL;
@@ -587,20 +592,26 @@ av_cold SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c)
}
break;
}
+#endif /* HAVE_ALTIVEC */
+
return NULL;
}
-av_cold void ff_yuv2rgb_init_tables_altivec(SwsContext *c,
- const int inv_table[4],
- int brightness,
- int contrast,
- int saturation)
+av_cold void ff_yuv2rgb_init_tables_ppc(SwsContext *c,
+ const int inv_table[4],
+ int brightness,
+ int contrast,
+ int saturation)
{
+#if HAVE_ALTIVEC
union {
DECLARE_ALIGNED(16, signed short, tmp)[8];
vector signed short vec;
} buf;
+ if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
+ return;
+
buf.tmp[0] = ((0xffffLL) * contrast >> 8) >> 9; // cy
buf.tmp[1] = -256 * brightness; // oy
buf.tmp[2] = (inv_table[0] >> 3) * (contrast >> 16) * (saturation >> 16); // crv
@@ -616,8 +627,11 @@ av_cold void ff_yuv2rgb_init_tables_altivec(SwsContext *c,
c->CGU = vec_splat((vector signed short) buf.vec, 4);
c->CGV = vec_splat((vector signed short) buf.vec, 5);
return;
+#endif /* HAVE_ALTIVEC */
}
+#if HAVE_ALTIVEC
+
static av_always_inline void yuv2packedX_altivec(SwsContext *c,
const int16_t *lumFilter,
const int16_t **lumSrc,
@@ -850,3 +864,5 @@ YUV2PACKEDX_WRAPPER(argb, AV_PIX_FMT_ARGB);
YUV2PACKEDX_WRAPPER(rgba, AV_PIX_FMT_RGBA);
YUV2PACKEDX_WRAPPER(rgb24, AV_PIX_FMT_RGB24);
YUV2PACKEDX_WRAPPER(bgr24, AV_PIX_FMT_BGR24);
+
+#endif /* HAVE_ALTIVEC */
diff --git a/libswscale/ppc/yuv2yuv_altivec.c b/libswscale/ppc/yuv2yuv_altivec.c
index 792deb9ee7..2036f2b637 100644
--- a/libswscale/ppc/yuv2yuv_altivec.c
+++ b/libswscale/ppc/yuv2yuv_altivec.c
@@ -28,6 +28,8 @@
#include "libswscale/swscale_internal.h"
#include "libavutil/cpu.h"
+#if HAVE_ALTIVEC
+
static int yv12toyuy2_unscaled_altivec(SwsContext *c, const uint8_t *src[],
int srcStride[], int srcSliceY,
int srcSliceH, uint8_t *dstParam[],
@@ -179,8 +181,11 @@ static int yv12touyvy_unscaled_altivec(SwsContext *c, const uint8_t *src[],
return srcSliceH;
}
-void ff_swscale_get_unscaled_altivec(SwsContext *c)
+#endif /* HAVE_ALTIVEC */
+
+void ff_swscale_get_unscaled_ppc(SwsContext *c)
{
+#if HAVE_ALTIVEC
if ((av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC) && !(c->srcW & 15) &&
!(c->flags & SWS_BITEXACT) && c->srcFormat == AV_PIX_FMT_YUV420P) {
enum AVPixelFormat dstFormat = c->dstFormat;
@@ -191,4 +196,5 @@ void ff_swscale_get_unscaled_altivec(SwsContext *c)
else if (dstFormat == AV_PIX_FMT_UYVY422)
c->swScale = yv12touyvy_unscaled_altivec;
}
+#endif /* HAVE_ALTIVEC */
}
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 62916676db..7037c5b541 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -759,10 +759,10 @@ SwsFunc ff_getSwsFunc(SwsContext *c)
{
sws_init_swScale_c(c);
+ if (ARCH_PPC)
+ ff_sws_init_swscale_ppc(c);
if (ARCH_X86)
ff_sws_init_swscale_x86(c);
- if (HAVE_ALTIVEC)
- ff_sws_init_swScale_altivec(c);
return swScale;
}
diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h
index ef72f9fd70..3ff31ceacc 100644
--- a/libswscale/swscale_internal.h
+++ b/libswscale/swscale_internal.h
@@ -610,15 +610,15 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c);
int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4],
int fullRange, int brightness,
int contrast, int saturation);
+void ff_yuv2rgb_init_tables_ppc(SwsContext *c, const int inv_table[4],
+ int brightness, int contrast, int saturation);
-void ff_yuv2rgb_init_tables_altivec(SwsContext *c, const int inv_table[4],
- int brightness, int contrast, int saturation);
void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufIndex,
int lastInLumBuf, int lastInChrBuf);
SwsFunc ff_yuv2rgb_init_x86(SwsContext *c);
SwsFunc ff_yuv2rgb_init_vis(SwsContext *c);
-SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c);
+SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c);
SwsFunc ff_yuv2rgb_get_func_ptr_bfin(SwsContext *c);
void ff_bfin_get_unscaled_swscale(SwsContext *c);
@@ -833,7 +833,7 @@ extern const AVClass sws_context_class;
*/
void ff_get_unscaled_swscale(SwsContext *c);
-void ff_swscale_get_unscaled_altivec(SwsContext *c);
+void ff_swscale_get_unscaled_ppc(SwsContext *c);
/**
* Return function pointer to fastest main scaler path function depending
@@ -850,7 +850,7 @@ void ff_sws_init_output_funcs(SwsContext *c,
yuv2packed2_fn *yuv2packed2,
yuv2packedX_fn *yuv2packedX,
yuv2anyX_fn *yuv2anyX);
-void ff_sws_init_swScale_altivec(SwsContext *c);
+void ff_sws_init_swscale_ppc(SwsContext *c);
void ff_sws_init_swscale_x86(SwsContext *c);
static inline void fillPlane16(uint8_t *plane, int stride, int width, int height, int y,
diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c
index b2b792fefd..ed7abddc61 100644
--- a/libswscale/swscale_unscaled.c
+++ b/libswscale/swscale_unscaled.c
@@ -1320,8 +1320,8 @@ void ff_get_unscaled_swscale(SwsContext *c)
if (ARCH_BFIN)
ff_bfin_get_unscaled_swscale(c);
- if (HAVE_ALTIVEC)
- ff_swscale_get_unscaled_altivec(c);
+ if (ARCH_PPC)
+ ff_swscale_get_unscaled_ppc(c);
}
/* Convert the palette to the same packed 32-bit format as the palette */
diff --git a/libswscale/utils.c b/libswscale/utils.c
index 4c9b4abe68..fa3f38ee40 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -991,9 +991,9 @@ int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
contrast, saturation);
// FIXME factorize
- if (PPC_ALTIVEC(av_get_cpu_flags()))
- ff_yuv2rgb_init_tables_altivec(c, inv_table, brightness,
- contrast, saturation);
+ if (ARCH_PPC)
+ ff_yuv2rgb_init_tables_ppc(c, inv_table, brightness,
+ contrast, saturation);
}
fill_rgb2yuv_table(c, table, dstRange);
diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c
index ff6f4c13e0..bb33505e5a 100644
--- a/libswscale/yuv2rgb.c
+++ b/libswscale/yuv2rgb.c
@@ -605,10 +605,10 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c)
t = ff_yuv2rgb_init_x86(c);
else if (HAVE_VIS)
t = ff_yuv2rgb_init_vis(c);
- else if (HAVE_ALTIVEC)
- t = ff_yuv2rgb_init_altivec(c);
else if (ARCH_BFIN)
t = ff_yuv2rgb_get_func_ptr_bfin(c);
+ else if (ARCH_PPC)
+ t = ff_yuv2rgb_init_ppc(c);
if (t)
return t;