diff options
author | Mike Melanson <mike@multimedia.cx> | 2004-02-01 05:31:16 +0000 |
---|---|---|
committer | Mike Melanson <mike@multimedia.cx> | 2004-02-01 05:31:16 +0000 |
commit | 61d793ef13ac2ef8f9c2b41b71430f21fac80337 (patch) | |
tree | 69a1b20b01993b4d61fe1c8c2be33dd2e362a40c /src/libffmpeg/libavcodec/ppc | |
parent | f707774ac5d48c02c6a36327304d88629b0e38f9 (diff) | |
download | xine-lib-61d793ef13ac2ef8f9c2b41b71430f21fac80337.tar.gz xine-lib-61d793ef13ac2ef8f9c2b41b71430f21fac80337.tar.bz2 |
sync to ffmpeg build 4699
CVS patchset: 6090
CVS date: 2004/02/01 05:31:16
Diffstat (limited to 'src/libffmpeg/libavcodec/ppc')
-rw-r--r-- | src/libffmpeg/libavcodec/ppc/dsputil_altivec.c | 40 | ||||
-rw-r--r-- | src/libffmpeg/libavcodec/ppc/dsputil_altivec.h | 16 | ||||
-rw-r--r-- | src/libffmpeg/libavcodec/ppc/dsputil_ppc.c | 24 | ||||
-rw-r--r-- | src/libffmpeg/libavcodec/ppc/dsputil_ppc.h | 1 | ||||
-rw-r--r-- | src/libffmpeg/libavcodec/ppc/mpegvideo_ppc.c | 3 |
5 files changed, 43 insertions, 41 deletions
diff --git a/src/libffmpeg/libavcodec/ppc/dsputil_altivec.c b/src/libffmpeg/libavcodec/ppc/dsputil_altivec.c index 635480784..d1a294365 100644 --- a/src/libffmpeg/libavcodec/ppc/dsputil_altivec.c +++ b/src/libffmpeg/libavcodec/ppc/dsputil_altivec.c @@ -45,7 +45,7 @@ static void sigill_handler (int sig) } #endif /* CONFIG_DARWIN */ -int pix_abs16x16_x2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) +int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) { int i; int s __attribute__((aligned(16))); @@ -57,7 +57,7 @@ int pix_abs16x16_x2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) s = 0; sad = (vector unsigned int)vec_splat_u32(0); - for(i=0;i<16;i++) { + for(i=0;i<h;i++) { /* Read unaligned pixels into our vectors. The vectors are as follows: pix1v: pix1[0]-pix1[15] @@ -92,7 +92,7 @@ int pix_abs16x16_x2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) return s; } -int pix_abs16x16_y2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) +int sad16_y2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) { int i; int s __attribute__((aligned(16))); @@ -118,7 +118,7 @@ int pix_abs16x16_y2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) tv = (vector unsigned char *) &pix2[0]; pix2v = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix2[0])); - for(i=0;i<16;i++) { + for(i=0;i<h;i++) { /* Read unaligned pixels into our vectors. The vectors are as follows: pix1v: pix1[0]-pix1[15] @@ -152,7 +152,7 @@ int pix_abs16x16_y2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) return s; } -int pix_abs16x16_xy2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) +int sad16_xy2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) { int i; int s __attribute__((aligned(16))); @@ -194,7 +194,7 @@ int pix_abs16x16_xy2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) t1 = vec_add(pix2hv, pix2ihv); t2 = vec_add(pix2lv, pix2ilv); - for(i=0;i<16;i++) { + for(i=0;i<h;i++) { /* Read unaligned pixels into our vectors. The vectors are as follows: pix1v: pix1[0]-pix1[15] @@ -253,7 +253,7 @@ int pix_abs16x16_xy2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) return s; } -int pix_abs16x16_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) +int sad16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) { int i; int s __attribute__((aligned(16))); @@ -266,7 +266,7 @@ int pix_abs16x16_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) sad = (vector unsigned int)vec_splat_u32(0); - for(i=0;i<16;i++) { + for(i=0;i<h;i++) { /* Read potentially unaligned pixels into t1 and t2 */ perm1 = vec_lvsl(0, pix1); pix1v = (vector unsigned char *) pix1; @@ -295,7 +295,7 @@ int pix_abs16x16_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) return s; } -int pix_abs8x8_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) +int sad8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) { int i; int s __attribute__((aligned(16))); @@ -309,7 +309,7 @@ int pix_abs8x8_altivec(uint8_t *pix1, uint8_t *pix2, int line_size) permclear = (vector unsigned char)AVV(255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0); - for(i=0;i<8;i++) { + for(i=0;i<h;i++) { /* Read potentially unaligned pixels into t1 and t2 Since we're reading 16 pixels, and actually only want 8, mask out the last 8 pixels. The 0s don't change the sum. */ @@ -374,9 +374,9 @@ int pix_norm1_altivec(uint8_t *pix, int line_size) /** * Sum of Squared Errors for a 8x8 block. * AltiVec-enhanced. - * It's the pix_abs8x8_altivec code above w/ squaring added. + * It's the sad8_altivec code above w/ squaring added. */ -int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size) +int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) { int i; int s __attribute__((aligned(16))); @@ -391,7 +391,7 @@ int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size) permclear = (vector unsigned char)AVV(255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0); - for(i=0;i<8;i++) { + for(i=0;i<h;i++) { /* Read potentially unaligned pixels into t1 and t2 Since we're reading 16 pixels, and actually only want 8, mask out the last 8 pixels. The 0s don't change the sum. */ @@ -430,9 +430,9 @@ int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size) /** * Sum of Squared Errors for a 16x16 block. * AltiVec-enhanced. - * It's the pix_abs16x16_altivec code above w/ squaring added. + * It's the sad16_altivec code above w/ squaring added. */ -int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size) +int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) { int i; int s __attribute__((aligned(16))); @@ -444,7 +444,7 @@ int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size) sum = (vector unsigned int)vec_splat_u32(0); - for(i=0;i<16;i++) { + for(i=0;i<h;i++) { /* Read potentially unaligned pixels into t1 and t2 */ perm1 = vec_lvsl(0, pix1); pix1v = (vector unsigned char *) pix1; @@ -609,14 +609,6 @@ void diff_pixels_altivec(DCTELEM *restrict block, const uint8_t *s1, } } -int sad16x16_altivec(void *s, uint8_t *a, uint8_t *b, int stride) { - return pix_abs16x16_altivec(a,b,stride); -} - -int sad8x8_altivec(void *s, uint8_t *a, uint8_t *b, int stride) { - return pix_abs8x8_altivec(a,b,stride); -} - void add_bytes_altivec(uint8_t *dst, uint8_t *src, int w) { #ifdef ALTIVEC_USE_REFERENCE_C_CODE int i; diff --git a/src/libffmpeg/libavcodec/ppc/dsputil_altivec.h b/src/libffmpeg/libavcodec/ppc/dsputil_altivec.h index f04496d62..93448a1ad 100644 --- a/src/libffmpeg/libavcodec/ppc/dsputil_altivec.h +++ b/src/libffmpeg/libavcodec/ppc/dsputil_altivec.h @@ -24,16 +24,14 @@ #ifdef HAVE_ALTIVEC -extern int pix_abs16x16_x2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size); -extern int pix_abs16x16_y2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size); -extern int pix_abs16x16_xy2_altivec(uint8_t *pix1, uint8_t *pix2, int line_size); -extern int pix_abs16x16_altivec(uint8_t *pix1, uint8_t *pix2, int line_size); -extern int pix_abs8x8_altivec(uint8_t *pix1, uint8_t *pix2, int line_size); -extern int sad16x16_altivec(void *s, uint8_t *a, uint8_t *b, int stride); -extern int sad8x8_altivec(void *s, uint8_t *a, uint8_t *b, int stride); +extern int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h); +extern int sad16_y2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h); +extern int sad16_xy2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h); +extern int sad16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h); +extern int sad8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h); extern int pix_norm1_altivec(uint8_t *pix, int line_size); -extern int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size); -extern int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size); +extern int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h); +extern int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h); extern int pix_sum_altivec(uint8_t * pix, int line_size); extern void diff_pixels_altivec(DCTELEM* block, const uint8_t* s1, const uint8_t* s2, int stride); extern void get_pixels_altivec(DCTELEM* block, const uint8_t * pixels, int line_size); diff --git a/src/libffmpeg/libavcodec/ppc/dsputil_ppc.c b/src/libffmpeg/libavcodec/ppc/dsputil_ppc.c index 7af2aa002..9882e401f 100644 --- a/src/libffmpeg/libavcodec/ppc/dsputil_ppc.c +++ b/src/libffmpeg/libavcodec/ppc/dsputil_ppc.c @@ -25,6 +25,7 @@ #include "dsputil_altivec.h" #endif +extern void fdct_altivec(int16_t *block); extern void idct_put_altivec(uint8_t *dest, int line_size, int16_t *block); extern void idct_add_altivec(uint8_t *dest, int line_size, int16_t *block); @@ -48,6 +49,7 @@ static unsigned char* perfname[] = { "fft_calc_altivec", "gmc1_altivec", "dct_unquantize_h263_altivec", + "fdct_altivec", "idct_add_altivec", "idct_put_altivec", "put_pixels16_altivec", @@ -238,13 +240,13 @@ void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx) mm_flags |= MM_ALTIVEC; // Altivec specific optimisations - c->pix_abs16x16_x2 = pix_abs16x16_x2_altivec; - c->pix_abs16x16_y2 = pix_abs16x16_y2_altivec; - c->pix_abs16x16_xy2 = pix_abs16x16_xy2_altivec; - c->pix_abs16x16 = pix_abs16x16_altivec; - c->pix_abs8x8 = pix_abs8x8_altivec; - c->sad[0]= sad16x16_altivec; - c->sad[1]= sad8x8_altivec; + c->pix_abs[0][1] = sad16_x2_altivec; + c->pix_abs[0][2] = sad16_y2_altivec; + c->pix_abs[0][3] = sad16_xy2_altivec; + c->pix_abs[0][0] = sad16_altivec; + c->pix_abs[1][0] = sad8_altivec; + c->sad[0]= sad16_altivec; + c->sad[1]= sad8_altivec; c->pix_norm1 = pix_norm1_altivec; c->sse[1]= sse8_altivec; c->sse[0]= sse16_altivec; @@ -270,6 +272,14 @@ void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx) c->gmc1 = gmc1_altivec; +#ifdef CONFIG_ENCODERS + if (avctx->dct_algo == FF_DCT_AUTO || + avctx->dct_algo == FF_DCT_ALTIVEC) + { + c->fdct = fdct_altivec; + } +#endif //CONFIG_ENCODERS + if ((avctx->idct_algo == FF_IDCT_AUTO) || (avctx->idct_algo == FF_IDCT_ALTIVEC)) { diff --git a/src/libffmpeg/libavcodec/ppc/dsputil_ppc.h b/src/libffmpeg/libavcodec/ppc/dsputil_ppc.h index 4cb299dd9..d672edfcb 100644 --- a/src/libffmpeg/libavcodec/ppc/dsputil_ppc.h +++ b/src/libffmpeg/libavcodec/ppc/dsputil_ppc.h @@ -40,6 +40,7 @@ enum powerpc_perf_index { altivec_fft_num = 0, altivec_gmc1_num, altivec_dct_unquantize_h263_num, + altivec_fdct, altivec_idct_add_num, altivec_idct_put_num, altivec_put_pixels16_num, diff --git a/src/libffmpeg/libavcodec/ppc/mpegvideo_ppc.c b/src/libffmpeg/libavcodec/ppc/mpegvideo_ppc.c index 18e86dce9..a83a0aa5c 100644 --- a/src/libffmpeg/libavcodec/ppc/mpegvideo_ppc.c +++ b/src/libffmpeg/libavcodec/ppc/mpegvideo_ppc.c @@ -72,7 +72,8 @@ void MPV_common_init_ppc(MpegEncContext *s) (s->avctx->dct_algo == FF_DCT_ALTIVEC))
{
s->dct_quantize = dct_quantize_altivec;
- s->dct_unquantize_h263 = dct_unquantize_h263_altivec; + s->dct_unquantize_h263_intra = dct_unquantize_h263_altivec; + s->dct_unquantize_h263_inter = dct_unquantize_h263_altivec; }
} else
#endif
|