diff options
author | Diego Biurrun <diego@biurrun.de> | 2014-01-24 11:55:16 +0100 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2014-06-30 07:58:46 -0700 |
commit | e3fcb14347466095839c2a3c47ebecff02da891e (patch) | |
tree | 38fbcef2c592faae3610887dbda3ab333181d1dc /libavcodec/ppc | |
parent | adcb8392c9b185fd8a91a95fa256d15ab1432a30 (diff) | |
download | ffmpeg-e3fcb14347466095839c2a3c47ebecff02da891e.tar.gz |
dsputil: Split off IDCT bits into their own context
Diffstat (limited to 'libavcodec/ppc')
-rw-r--r-- | libavcodec/ppc/Makefile | 2 | ||||
-rw-r--r-- | libavcodec/ppc/dsputil_altivec.h | 3 | ||||
-rw-r--r-- | libavcodec/ppc/dsputil_ppc.c | 6 | ||||
-rw-r--r-- | libavcodec/ppc/idctdsp.c (renamed from libavcodec/ppc/idct_altivec.c) | 30 |
4 files changed, 28 insertions, 13 deletions
diff --git a/libavcodec/ppc/Makefile b/libavcodec/ppc/Makefile index c6c0bcb241..ee0c18c09e 100644 --- a/libavcodec/ppc/Makefile +++ b/libavcodec/ppc/Makefile @@ -9,6 +9,7 @@ OBJS-$(CONFIG_H264DSP) += ppc/h264dsp.o OBJS-$(CONFIG_H264QPEL) += ppc/h264qpel.o OBJS-$(CONFIG_HPELDSP) += ppc/hpeldsp_altivec.o OBJS-$(CONFIG_HUFFYUVDSP) += ppc/huffyuvdsp_altivec.o +OBJS-$(CONFIG_IDCTDSP) += ppc/idctdsp.o OBJS-$(CONFIG_MPEGAUDIODSP) += ppc/mpegaudiodsp_altivec.o OBJS-$(CONFIG_MPEGVIDEO) += ppc/mpegvideo_altivec.o \ ppc/mpegvideodsp.o @@ -24,7 +25,6 @@ OBJS-$(CONFIG_VP8_DECODER) += ppc/vp8dsp_altivec.o ALTIVEC-OBJS-$(CONFIG_DSPUTIL) += ppc/dsputil_altivec.o \ ppc/fdct_altivec.o \ - ppc/idct_altivec.o \ FFT-OBJS-$(HAVE_GNU_AS) += ppc/fft_altivec_s.o ALTIVEC-OBJS-$(CONFIG_FFT) += $(FFT-OBJS-yes) diff --git a/libavcodec/ppc/dsputil_altivec.h b/libavcodec/ppc/dsputil_altivec.h index 42da933dfa..be5fd58669 100644 --- a/libavcodec/ppc/dsputil_altivec.h +++ b/libavcodec/ppc/dsputil_altivec.h @@ -29,9 +29,6 @@ void ff_fdct_altivec(int16_t *block); -void ff_idct_put_altivec(uint8_t *dest, int line_size, int16_t *block); -void ff_idct_add_altivec(uint8_t *dest, int line_size, int16_t *block); - void ff_dsputil_init_altivec(DSPContext *c, AVCodecContext *avctx, unsigned high_bit_depth); diff --git a/libavcodec/ppc/dsputil_ppc.c b/libavcodec/ppc/dsputil_ppc.c index 778d3e1247..b54111310e 100644 --- a/libavcodec/ppc/dsputil_ppc.c +++ b/libavcodec/ppc/dsputil_ppc.c @@ -42,12 +42,6 @@ av_cold void ff_dsputil_init_ppc(DSPContext *c, AVCodecContext *avctx, c->fdct = ff_fdct_altivec; } #endif //CONFIG_ENCODERS - if ((avctx->idct_algo == FF_IDCT_AUTO) || - (avctx->idct_algo == FF_IDCT_ALTIVEC)) { - c->idct_put = ff_idct_put_altivec; - c->idct_add = ff_idct_add_altivec; - c->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM; - } } } } diff --git a/libavcodec/ppc/idct_altivec.c b/libavcodec/ppc/idctdsp.c index 82fd9296f0..8a1d2903d8 100644 --- a/libavcodec/ppc/idct_altivec.c +++ b/libavcodec/ppc/idctdsp.c @@ -37,8 +37,13 @@ #include <altivec.h> #endif +#include "libavutil/attributes.h" +#include "libavutil/cpu.h" +#include "libavutil/ppc/cpu.h" #include "libavutil/ppc/types_altivec.h" -#include "dsputil_altivec.h" +#include "libavcodec/idctdsp.h" + +#if HAVE_ALTIVEC #define IDCT_HALF \ /* 1st stage */ \ @@ -148,7 +153,7 @@ static const vec_s16 constants[5] = { { 19266, 26722, 25172, 22654, 19266, 22654, 25172, 26722 } }; -void ff_idct_put_altivec(uint8_t *dest, int stride, int16_t *blk) +static void idct_put_altivec(uint8_t *dest, int stride, int16_t *blk) { vec_s16 *block = (vec_s16 *) blk; vec_u8 tmp; @@ -177,7 +182,7 @@ void ff_idct_put_altivec(uint8_t *dest, int stride, int16_t *blk) COPY(dest, vx7); } -void ff_idct_add_altivec(uint8_t *dest, int stride, int16_t *blk) +static void idct_add_altivec(uint8_t *dest, int stride, int16_t *blk) { vec_s16 *block = (vec_s16 *) blk; vec_u8 tmp; @@ -219,3 +224,22 @@ void ff_idct_add_altivec(uint8_t *dest, int stride, int16_t *blk) dest += stride; ADD(dest, vx7, perm1); } + +#endif /* HAVE_ALTIVEC */ + +av_cold void ff_idctdsp_init_ppc(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth) +{ +#if HAVE_ALTIVEC + if (PPC_ALTIVEC(av_get_cpu_flags())) { + if (!high_bit_depth) { + if ((avctx->idct_algo == FF_IDCT_AUTO) || + (avctx->idct_algo == FF_IDCT_ALTIVEC)) { + c->idct_add = idct_add_altivec; + c->idct_put = idct_put_altivec; + c->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM; + } + } + } +#endif /* HAVE_ALTIVEC */ +} |