Also give consistent names to init functions.tags/n2.1
@@ -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 \ |
@@ -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 */ | |||
} |
@@ -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 */ |
@@ -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 */ | |||
} |
@@ -772,10 +772,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; | |||
} |
@@ -564,15 +564,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); | |||
@@ -736,7 +736,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 | |||
@@ -753,7 +753,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); | |||
#endif /* SWSCALE_SWSCALE_INTERNAL_H */ |
@@ -1091,8 +1091,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); | |||
} | |||
static void reset_ptr(const uint8_t *src[], int format) | |||
@@ -806,9 +806,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); | |||
return 0; | |||
} | |||
@@ -564,10 +564,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; | |||