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