diff postproc/yuv2rgb_template.c @ 5533:dd78203ea703

fixing black stripe at right if width%8!=0 && stride%8==0 reported by kabi
author michael
date Mon, 08 Apr 2002 14:43:18 +0000
parents 20806e535b96
children e7635c03910f
line wrap: on
line diff
--- a/postproc/yuv2rgb_template.c	Mon Apr 08 01:56:55 2002 +0000
+++ b/postproc/yuv2rgb_template.c	Mon Apr 08 14:43:18 2002 +0000
@@ -136,6 +136,10 @@
 	uint8_t *_py = py;
 	uint8_t *_pu = pu;
 	uint8_t *_pv = pv;
+	int internal_h_size= h_size;
+	int aligned_h_size= (h_size+7)&~7;
+
+	if(rgb_stride >= aligned_h_size*2) internal_h_size= aligned_h_size;
 
 	b5Dither= dither8[y&1];
 	g6Dither= dither4[y&1];
@@ -150,7 +154,7 @@
 
 		 : : "r" (_py), "r" (_pu), "r" (_pv));
 
-	for (x = h_size >> 3; --x >= 0; ) {
+	for (x = internal_h_size >> 3; --x >= 0; ) {
 	    /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
 	       pixels in each iteration */
 
@@ -237,6 +241,10 @@
 	uint8_t *_py = py;
 	uint8_t *_pu = pu;
 	uint8_t *_pv = pv;
+	int internal_h_size= h_size;
+	int aligned_h_size= (h_size+7)&~7;
+
+	if(rgb_stride >= aligned_h_size*2) internal_h_size= aligned_h_size;
 
 	b5Dither= dither8[y&1];
 	g6Dither= dither4[y&1];
@@ -251,7 +259,7 @@
 
 		 : : "r" (_py), "r" (_pu), "r" (_pv));
 
-	for (x = h_size >> 3; --x >= 0; ) {
+	for (x = internal_h_size >> 3; --x >= 0; ) {
 	    /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
 	       pixels in each iteration */
 
@@ -334,6 +342,10 @@
 	uint8_t *_py = py;
 	uint8_t *_pu = pu;
 	uint8_t *_pv = pv;
+	int internal_h_size= h_size;
+	int aligned_h_size= (h_size+7)&~7;
+
+	if(rgb_stride >= aligned_h_size*3) internal_h_size= aligned_h_size;
 
 	/* load data for start of next scan line */
 	__asm__ __volatile__ (
@@ -343,7 +355,7 @@
 
 		 : : "r" (_py), "r" (_pu), "r" (_pv));
 
-	for (x = h_size >> 3; --x >= 0; ) {
+	for (x = internal_h_size >> 3; --x >= 0; ) {
 	    /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
 	       pixels in each iteration */
 
@@ -489,6 +501,10 @@
 	uint8_t *_py = py;
 	uint8_t *_pu = pu;
 	uint8_t *_pv = pv;
+	int internal_h_size= h_size;
+	int aligned_h_size= (h_size+7)&~7;
+
+	if(rgb_stride >= aligned_h_size*4) internal_h_size= aligned_h_size;
 
 	/* load data for start of next scan line */
 	__asm__ __volatile__ 
@@ -499,7 +515,7 @@
 	     : : "r" (_py), "r" (_pu), "r" (_pv)
 	     );
 
-	for (x = h_size >> 3; --x >= 0; ) {
+	for (x = internal_h_size >> 3; --x >= 0; ) {
 	    /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
 	       pixels in each iteration */
 	    __asm__ __volatile__ (