diff options
| author | Tim Redfern <tim@eclectronics.org> | 2013-12-29 12:19:38 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2013-12-29 12:19:38 +0000 |
| commit | f7813a5324be39d13ab536c245d15dfc602a7849 (patch) | |
| tree | fad99148b88823d34a5df2f0a25881a002eb291b /ffmpeg/libswscale/ppc/yuv2rgb_altivec.c | |
| parent | b7a5a477b8ff4d4e3028b9dfb9a9df0a41463f92 (diff) | |
basic type mechanism working
Diffstat (limited to 'ffmpeg/libswscale/ppc/yuv2rgb_altivec.c')
| -rw-r--r-- | ffmpeg/libswscale/ppc/yuv2rgb_altivec.c | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/ffmpeg/libswscale/ppc/yuv2rgb_altivec.c b/ffmpeg/libswscale/ppc/yuv2rgb_altivec.c index a8501d9..25282bf 100644 --- a/ffmpeg/libswscale/ppc/yuv2rgb_altivec.c +++ b/ffmpeg/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 @@ -246,8 +248,6 @@ static const vector unsigned char (vector unsigned short) \ vec_max(y, ((vector signed short) { 0 }))) -//#define out_pixels(a, b, c, ptr) vec_mstrgb32(__typeof__(a), ((__typeof__(a)) { 255 }), a, a, a, ptr) - static inline void cvtyuvtoRGB(SwsContext *c, vector signed short Y, vector signed short U, vector signed short V, vector signed short *R, vector signed short *G, @@ -526,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; @@ -589,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 @@ -618,20 +627,23 @@ 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 */ } -static av_always_inline 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, - enum AVPixelFormat target) +#if HAVE_ALTIVEC + +static av_always_inline void 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, + enum AVPixelFormat target) { int i, j; vector signed short X, X0, X1, Y0, U0, V0, Y1, U1, V1, U, V; @@ -840,10 +852,10 @@ void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, \ const int16_t **alpSrc, \ uint8_t *dest, int dstW, int dstY) \ { \ - ff_yuv2packedX_altivec(c, lumFilter, lumSrc, lumFilterSize, \ - chrFilter, chrUSrc, chrVSrc, \ - chrFilterSize, alpSrc, \ - dest, dstW, dstY, pixfmt); \ + yuv2packedX_altivec(c, lumFilter, lumSrc, lumFilterSize, \ + chrFilter, chrUSrc, chrVSrc, \ + chrFilterSize, alpSrc, \ + dest, dstW, dstY, pixfmt); \ } YUV2PACKEDX_WRAPPER(abgr, AV_PIX_FMT_ABGR); @@ -852,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 */ |
