Mercurial > mplayer.hg
comparison libswscale/swscale_altivec_template.c @ 25750:06bf0eb70a55
Cosmetics: whitespaces
author | benoit |
---|---|
date | Thu, 17 Jan 2008 10:24:14 +0000 |
parents | 8d082a234a6d |
children | 147deb141e07 |
comparison
equal
deleted
inserted
replaced
25749:8d082a234a6d | 25750:06bf0eb70a55 |
---|---|
25 | 25 |
26 static inline void | 26 static inline void |
27 altivec_packIntArrayToCharArray(int *val, uint8_t* dest, int dstW) { | 27 altivec_packIntArrayToCharArray(int *val, uint8_t* dest, int dstW) { |
28 register int i; | 28 register int i; |
29 vector unsigned int altivec_vectorShiftInt19 = | 29 vector unsigned int altivec_vectorShiftInt19 = |
30 vec_add(vec_splat_u32(10),vec_splat_u32(9)); | 30 vec_add(vec_splat_u32(10), vec_splat_u32(9)); |
31 if ((unsigned long)dest % 16) { | 31 if ((unsigned long)dest % 16) { |
32 /* badly aligned store, we force store alignment */ | 32 /* badly aligned store, we force store alignment */ |
33 /* and will handle load misalignment on val w/ vec_perm */ | 33 /* and will handle load misalignment on val w/ vec_perm */ |
34 vector unsigned char perm1; | 34 vector unsigned char perm1; |
35 vector signed int v1; | 35 vector signed int v1; |
44 int offset = i << 2; | 44 int offset = i << 2; |
45 vector signed int v2 = vec_ld(offset + 16, val); | 45 vector signed int v2 = vec_ld(offset + 16, val); |
46 vector signed int v3 = vec_ld(offset + 32, val); | 46 vector signed int v3 = vec_ld(offset + 32, val); |
47 vector signed int v4 = vec_ld(offset + 48, val); | 47 vector signed int v4 = vec_ld(offset + 48, val); |
48 vector signed int v5 = vec_ld(offset + 64, val); | 48 vector signed int v5 = vec_ld(offset + 64, val); |
49 vector signed int v12 = vec_perm(v1,v2,perm1); | 49 vector signed int v12 = vec_perm(v1, v2, perm1); |
50 vector signed int v23 = vec_perm(v2,v3,perm1); | 50 vector signed int v23 = vec_perm(v2, v3, perm1); |
51 vector signed int v34 = vec_perm(v3,v4,perm1); | 51 vector signed int v34 = vec_perm(v3, v4, perm1); |
52 vector signed int v45 = vec_perm(v4,v5,perm1); | 52 vector signed int v45 = vec_perm(v4, v5, perm1); |
53 | 53 |
54 vector signed int vA = vec_sra(v12, altivec_vectorShiftInt19); | 54 vector signed int vA = vec_sra(v12, altivec_vectorShiftInt19); |
55 vector signed int vB = vec_sra(v23, altivec_vectorShiftInt19); | 55 vector signed int vB = vec_sra(v23, altivec_vectorShiftInt19); |
56 vector signed int vC = vec_sra(v34, altivec_vectorShiftInt19); | 56 vector signed int vC = vec_sra(v34, altivec_vectorShiftInt19); |
57 vector signed int vD = vec_sra(v45, altivec_vectorShiftInt19); | 57 vector signed int vD = vec_sra(v45, altivec_vectorShiftInt19); |
135 } | 135 } |
136 for ( ; i < dstW; i++) { | 136 for ( ; i < dstW; i++) { |
137 val[i] += lumSrc[j][i] * lumFilter[j]; | 137 val[i] += lumSrc[j][i] * lumFilter[j]; |
138 } | 138 } |
139 } | 139 } |
140 altivec_packIntArrayToCharArray(val,dest,dstW); | 140 altivec_packIntArrayToCharArray(val, dest, dstW); |
141 } | 141 } |
142 if (uDest != 0) { | 142 if (uDest != 0) { |
143 int __attribute__ ((aligned (16))) u[chrDstW]; | 143 int __attribute__ ((aligned (16))) u[chrDstW]; |
144 int __attribute__ ((aligned (16))) v[chrDstW]; | 144 int __attribute__ ((aligned (16))) v[chrDstW]; |
145 | 145 |
201 for ( ; i < chrDstW; i++) { | 201 for ( ; i < chrDstW; i++) { |
202 u[i] += chrSrc[j][i] * chrFilter[j]; | 202 u[i] += chrSrc[j][i] * chrFilter[j]; |
203 v[i] += chrSrc[j][i + 2048] * chrFilter[j]; | 203 v[i] += chrSrc[j][i + 2048] * chrFilter[j]; |
204 } | 204 } |
205 } | 205 } |
206 altivec_packIntArrayToCharArray(u,uDest,chrDstW); | 206 altivec_packIntArrayToCharArray(u, uDest, chrDstW); |
207 altivec_packIntArrayToCharArray(v,vDest,chrDstW); | 207 altivec_packIntArrayToCharArray(v, vDest, chrDstW); |
208 } | 208 } |
209 } | 209 } |
210 | 210 |
211 static inline void hScale_altivec_real(int16_t *dst, int dstW, uint8_t *src, int srcW, int xInc, int16_t *filter, int16_t *filterPos, int filterSize) { | 211 static inline void hScale_altivec_real(int16_t *dst, int dstW, uint8_t *src, int srcW, int xInc, int16_t *filter, int16_t *filterPos, int filterSize) { |
212 register int i; | 212 register int i; |
250 // the neat trick : we only care for half the elements, | 250 // the neat trick : we only care for half the elements, |
251 // high or low depending on (i<<3)%16 (it's 0 or 8 here), | 251 // high or low depending on (i<<3)%16 (it's 0 or 8 here), |
252 // and we're going to use vec_mule, so we chose | 252 // and we're going to use vec_mule, so we chose |
253 // carefully how to "unpack" the elements into the even slots | 253 // carefully how to "unpack" the elements into the even slots |
254 if ((i << 3) % 16) | 254 if ((i << 3) % 16) |
255 filter_v = vec_mergel(filter_v,(vector signed short)vzero); | 255 filter_v = vec_mergel(filter_v, (vector signed short)vzero); |
256 else | 256 else |
257 filter_v = vec_mergeh(filter_v,(vector signed short)vzero); | 257 filter_v = vec_mergeh(filter_v, (vector signed short)vzero); |
258 | 258 |
259 val_vEven = vec_mule(src_v, filter_v); | 259 val_vEven = vec_mule(src_v, filter_v); |
260 val_s = vec_sums(val_vEven, vzero); | 260 val_s = vec_sums(val_vEven, vzero); |
261 vec_st(val_s, 0, tempo); | 261 vec_st(val_s, 0, tempo); |
262 dst[i] = av_clip(tempo[3]>>7, 0, (1<<15)-1); | 262 dst[i] = av_clip(tempo[3]>>7, 0, (1<<15)-1); |
385 } | 385 } |
386 | 386 |
387 static inline int yv12toyuy2_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, | 387 static inline int yv12toyuy2_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
388 int srcSliceH, uint8_t* dstParam[], int dstStride_a[]) { | 388 int srcSliceH, uint8_t* dstParam[], int dstStride_a[]) { |
389 uint8_t *dst=dstParam[0] + dstStride_a[0]*srcSliceY; | 389 uint8_t *dst=dstParam[0] + dstStride_a[0]*srcSliceY; |
390 // yv12toyuy2(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]); | 390 // yv12toyuy2(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]); |
391 uint8_t *ysrc = src[0]; | 391 uint8_t *ysrc = src[0]; |
392 uint8_t *usrc = src[1]; | 392 uint8_t *usrc = src[1]; |
393 uint8_t *vsrc = src[2]; | 393 uint8_t *vsrc = src[2]; |
394 const int width = c->srcW; | 394 const int width = c->srcW; |
395 const int height = srcSliceH; | 395 const int height = srcSliceH; |
399 const vector unsigned char yperm = vec_lvsl(0, ysrc); | 399 const vector unsigned char yperm = vec_lvsl(0, ysrc); |
400 const int vertLumPerChroma = 2; | 400 const int vertLumPerChroma = 2; |
401 register unsigned int y; | 401 register unsigned int y; |
402 | 402 |
403 if (width&15) { | 403 if (width&15) { |
404 yv12toyuy2(ysrc, usrc, vsrc, dst,c->srcW,srcSliceH, lumStride, chromStride, dstStride); | 404 yv12toyuy2(ysrc, usrc, vsrc, dst, c->srcW, srcSliceH, lumStride, chromStride, dstStride); |
405 return srcSliceH; | 405 return srcSliceH; |
406 } | 406 } |
407 | 407 |
408 /* this code assume: | 408 /* this code assume: |
409 | 409 |
462 } | 462 } |
463 | 463 |
464 static inline int yv12touyvy_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, | 464 static inline int yv12touyvy_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
465 int srcSliceH, uint8_t* dstParam[], int dstStride_a[]) { | 465 int srcSliceH, uint8_t* dstParam[], int dstStride_a[]) { |
466 uint8_t *dst=dstParam[0] + dstStride_a[0]*srcSliceY; | 466 uint8_t *dst=dstParam[0] + dstStride_a[0]*srcSliceY; |
467 // yv12toyuy2(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]); | 467 // yv12toyuy2(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]); |
468 uint8_t *ysrc = src[0]; | 468 uint8_t *ysrc = src[0]; |
469 uint8_t *usrc = src[1]; | 469 uint8_t *usrc = src[1]; |
470 uint8_t *vsrc = src[2]; | 470 uint8_t *vsrc = src[2]; |
471 const int width = c->srcW; | 471 const int width = c->srcW; |
472 const int height = srcSliceH; | 472 const int height = srcSliceH; |
476 const int vertLumPerChroma = 2; | 476 const int vertLumPerChroma = 2; |
477 const vector unsigned char yperm = vec_lvsl(0, ysrc); | 477 const vector unsigned char yperm = vec_lvsl(0, ysrc); |
478 register unsigned int y; | 478 register unsigned int y; |
479 | 479 |
480 if (width&15) { | 480 if (width&15) { |
481 yv12touyvy(ysrc, usrc, vsrc, dst,c->srcW,srcSliceH, lumStride, chromStride, dstStride); | 481 yv12touyvy(ysrc, usrc, vsrc, dst, c->srcW, srcSliceH, lumStride, chromStride, dstStride); |
482 return srcSliceH; | 482 return srcSliceH; |
483 } | 483 } |
484 | 484 |
485 /* this code assume: | 485 /* this code assume: |
486 | 486 |