OSDN Git Service

fixing black stripe at right if width%8!=0 && stride%8==0 reported by kabi
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 8 Apr 2002 14:43:18 +0000 (14:43 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 8 Apr 2002 14:43:18 +0000 (14:43 +0000)
Originally committed as revision 5534 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc

postproc/yuv2rgb_template.c

index 4a8a545..f254388 100644 (file)
@@ -136,6 +136,10 @@ static inline void RENAME(yuv420_rgb16) (uint8_t * image, uint8_t * py,
        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 @@ static inline void RENAME(yuv420_rgb16) (uint8_t * image, uint8_t * py,
 
                 : : "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 @@ static inline void RENAME(yuv420_rgb15) (uint8_t * image, uint8_t * py,
        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 @@ static inline void RENAME(yuv420_rgb15) (uint8_t * image, uint8_t * py,
 
                 : : "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 @@ static inline void RENAME(yuv420_rgb24) (uint8_t * image, uint8_t * py,
        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 @@ static inline void RENAME(yuv420_rgb24) (uint8_t * image, uint8_t * py,
 
                 : : "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 @@ static inline void RENAME(yuv420_argb32) (uint8_t * image, uint8_t * py,
        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 @@ static inline void RENAME(yuv420_argb32) (uint8_t * image, uint8_t * py,
             : : "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__ (