diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-08-29 15:10:09 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-08-29 15:10:09 +0200 |
commit | 5ff1b588eb4e639f0b3cfeff2118aadb2b43584a (patch) | |
tree | 3a23e041ee9ffa0e5c1f9e73f7c75e4dfae5f623 | |
parent | 4399e727237316c6491d800b7053dd44322c0ee7 (diff) | |
parent | c2503d9c8ab42ea55922e9f5a10c8bfbbbfeaf19 (diff) | |
download | ffmpeg-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/Makefile | 6 | ||||
-rw-r--r-- | libswscale/ppc/swscale_altivec.c | 6 | ||||
-rw-r--r-- | libswscale/ppc/yuv2rgb_altivec.c | 28 | ||||
-rw-r--r-- | libswscale/ppc/yuv2yuv_altivec.c | 8 | ||||
-rw-r--r-- | libswscale/swscale.c | 4 | ||||
-rw-r--r-- | libswscale/swscale_internal.h | 10 | ||||
-rw-r--r-- | libswscale/swscale_unscaled.c | 4 | ||||
-rw-r--r-- | libswscale/utils.c | 6 | ||||
-rw-r--r-- | libswscale/yuv2rgb.c | 4 |
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; |