Mercurial > mplayer.hg
changeset 18322:62cdcca26777
Fix some bugs handling input that is not aligned at 16 bytes or has
stride!=width.
author | pacman |
---|---|
date | Thu, 27 Apr 2006 21:42:41 +0000 |
parents | 22be226a5cf5 |
children | d0180ac33e32 |
files | postproc/yuv2rgb_altivec.c |
diffstat | 1 files changed, 11 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/postproc/yuv2rgb_altivec.c Thu Apr 27 19:42:36 2006 +0000 +++ b/postproc/yuv2rgb_altivec.c Thu Apr 27 21:42:41 2006 +0000 @@ -278,7 +278,7 @@ vector signed short R1,G1,B1; \ vector unsigned char R,G,B; \ \ - vector unsigned char *uivP, *vivP; \ + vector unsigned char *y1ivP, *y2ivP, *uivP, *vivP; \ vector unsigned char align_perm; \ \ vector signed short \ @@ -292,7 +292,7 @@ vector unsigned short lCSHIFT = c->CSHIFT; \ \ ubyte *y1i = in[0]; \ - ubyte *y2i = in[0]+w; \ + ubyte *y2i = in[0]+instrides[0]; \ ubyte *ui = in[1]; \ ubyte *vi = in[2]; \ \ @@ -304,7 +304,7 @@ (oplanes[0]+srcSliceY*outstrides[0]+outstrides[0]); \ \ \ - instrides_scl[0] = instrides[0]; \ + instrides_scl[0] = instrides[0]*2-w; /* the loop moves y{1,2}i by w */ \ instrides_scl[1] = instrides[1]-w/2; /* the loop moves ui by w/2 */ \ instrides_scl[2] = instrides[2]-w/2; /* the loop moves vi by w/2 */ \ \ @@ -315,11 +315,17 @@ \ for (j=0;j<w/16;j++) { \ \ - y0 = vec_ldl (0,y1i); \ - y1 = vec_ldl (0,y2i); \ + y1ivP = (vector unsigned char *)y1i; \ + y2ivP = (vector unsigned char *)y2i; \ uivP = (vector unsigned char *)ui; \ vivP = (vector unsigned char *)vi; \ \ + align_perm = vec_lvsl (0, y1i); \ + y0 = (vector unsigned char)vec_perm (y1ivP[0], y1ivP[1], align_perm);\ + \ + align_perm = vec_lvsl (0, y2i); \ + y1 = (vector unsigned char)vec_perm (y2ivP[0], y2ivP[1], align_perm);\ + \ align_perm = vec_lvsl (0, ui); \ u = (vector signed char)vec_perm (uivP[0], uivP[1], align_perm); \ \