summaryrefslogtreecommitdiff
path: root/libavcodec/ppc
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-07-01 14:38:57 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-07-01 15:22:11 +0200
commit581b5f0b9b93969712e73e0ae6324bbd03e85d4e (patch)
treed1319dc7744ac67e6ebd3379f11ff6e4a8178dc1 /libavcodec/ppc
parent909f53f2b285bc7dbe77d4690a03f3d114417297 (diff)
parente3fcb14347466095839c2a3c47ebecff02da891e (diff)
Merge commit 'e3fcb14347466095839c2a3c47ebecff02da891e'
* commit 'e3fcb14347466095839c2a3c47ebecff02da891e': dsputil: Split off IDCT bits into their own context Conflicts: configure libavcodec/aic.c libavcodec/arm/Makefile libavcodec/arm/dsputil_init_arm.c libavcodec/arm/dsputil_init_armv6.c libavcodec/asvdec.c libavcodec/dnxhdenc.c libavcodec/dsputil.c libavcodec/dvdec.c libavcodec/dxva2_mpeg2.c libavcodec/intrax8.c libavcodec/mdec.c libavcodec/mjpegdec.c libavcodec/mjpegenc_common.h libavcodec/mpegvideo.c libavcodec/ppc/dsputil_altivec.h libavcodec/ppc/dsputil_ppc.c libavcodec/ppc/idctdsp.c libavcodec/x86/Makefile libavcodec/x86/dsputil_init.c libavcodec/x86/dsputil_mmx.c libavcodec/x86/dsputil_x86.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/ppc')
-rw-r--r--libavcodec/ppc/Makefile2
-rw-r--r--libavcodec/ppc/dsputil_altivec.h4
-rw-r--r--libavcodec/ppc/dsputil_ppc.c9
-rw-r--r--libavcodec/ppc/idctdsp.c (renamed from libavcodec/ppc/idct_altivec.c)33
4 files changed, 30 insertions, 18 deletions
diff --git a/libavcodec/ppc/Makefile b/libavcodec/ppc/Makefile
index aa5bd5d011..88aaf2644a 100644
--- a/libavcodec/ppc/Makefile
+++ b/libavcodec/ppc/Makefile
@@ -9,6 +9,7 @@ OBJS-$(CONFIG_H264DSP) += ppc/h264dsp.o ppc/hpeldsp_altivec.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
FFT-OBJS-$(HAVE_VSX) += ppc/fft_vsx.o
diff --git a/libavcodec/ppc/dsputil_altivec.h b/libavcodec/ppc/dsputil_altivec.h
index e4f8770663..aa90d348b6 100644
--- a/libavcodec/ppc/dsputil_altivec.h
+++ b/libavcodec/ppc/dsputil_altivec.h
@@ -29,10 +29,6 @@
void ff_fdct_altivec(int16_t *block);
-void ff_idct_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 48b3b4a6bb..e0db9d484d 100644
--- a/libavcodec/ppc/dsputil_ppc.c
+++ b/libavcodec/ppc/dsputil_ppc.c
@@ -43,15 +43,6 @@ av_cold void ff_dsputil_init_ppc(DSPContext *c, AVCodecContext *avctx,
c->fdct = ff_fdct_altivec;
}
#endif //CONFIG_ENCODERS
- if (avctx->lowres == 0) {
- if ((avctx->idct_algo == FF_IDCT_AUTO) ||
- (avctx->idct_algo == FF_IDCT_ALTIVEC)) {
- c->idct = 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 10620b22d0..a09c2b7b9d 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_altivec(int16_t *blk)
+static void idct_altivec(int16_t *blk)
{
vec_s16 *block = (vec_s16 *) blk;
@@ -164,7 +169,7 @@ void ff_idct_altivec(int16_t *blk)
block[7] = vx7;
}
-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;
@@ -193,7 +198,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;
@@ -235,3 +240,23 @@ 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 && avctx->lowres == 0) {
+ if ((avctx->idct_algo == FF_IDCT_AUTO) ||
+ (avctx->idct_algo == FF_IDCT_ALTIVEC)) {
+ c->idct = 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 */
+}