[MPlayer-cvslog] CVS: main/postproc yuv2rgb_altivec.c,1.13,1.14

Alan Curry CVS syncmail at mplayerhq.hu
Thu Apr 27 23:42:44 CEST 2006


CVS change done by Alan Curry CVS

Update of /cvsroot/mplayer/main/postproc
In directory mail:/var2/tmp/cvs-serv6924/postproc

Modified Files:
	yuv2rgb_altivec.c 
Log Message:
Fix some bugs handling input that is not aligned at 16 bytes or has
stride!=width.


Index: yuv2rgb_altivec.c
===================================================================
RCS file: /cvsroot/mplayer/main/postproc/yuv2rgb_altivec.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- yuv2rgb_altivec.c	13 Mar 2006 03:46:25 -0000	1.13
+++ yuv2rgb_altivec.c	27 Apr 2006 21:42:41 -0000	1.14
@@ -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);	   \
 									   \




More information about the MPlayer-cvslog mailing list