summaryrefslogtreecommitdiff
path: root/libswscale/ppc/yuv2rgb_altivec.c
diff options
context:
space:
mode:
authorDiego Biurrun <diego@biurrun.de>2012-10-11 01:06:04 +0200
committerDiego Biurrun <diego@biurrun.de>2013-08-29 10:23:41 +0200
commitc2503d9c8ab42ea55922e9f5a10c8bfbbbfeaf19 (patch)
tree9ee2bc7b2c538a06cc613b0e5f18bc490179461f /libswscale/ppc/yuv2rgb_altivec.c
parent6af2c351b3ae61e4478950ffddd0dfcad06188b8 (diff)
swscale: ppc: Hide arch-specific initialization details
Also give consistent names to init functions.
Diffstat (limited to 'libswscale/ppc/yuv2rgb_altivec.c')
-rw-r--r--libswscale/ppc/yuv2rgb_altivec.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/libswscale/ppc/yuv2rgb_altivec.c b/libswscale/ppc/yuv2rgb_altivec.c
index 846a4dcfa2..74b0f18190 100644
--- a/libswscale/ppc/yuv2rgb_altivec.c
+++ b/libswscale/ppc/yuv2rgb_altivec.c
@@ -99,6 +99,8 @@
#include "libavutil/cpu.h"
#include "yuv2rgb_altivec.h"
+#if HAVE_ALTIVEC
+
#undef PROFILE_THE_BEAST
#undef INC_SCALING
@@ -528,14 +530,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;
@@ -591,20 +596,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
@@ -620,8 +631,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,
@@ -854,3 +868,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 */