c optimizations (array is faster than pointer) (16bpp variants tested and 2% faster)
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 30 Oct 2001 21:33:01 +0000 (21:33 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 30 Oct 2001 21:33:01 +0000 (21:33 +0000)
Originally committed as revision 2573 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc

postproc/swscale.c
postproc/swscale_template.c

index 0139a9c..9749f66 100644 (file)
@@ -506,18 +506,15 @@ static inline void yuv2yuv(uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, uin
 
        for(i=0;i<dstw;i++)
        {
-               ((uint8_t*)dest)[0] = (buf0[i]*yalpha1+buf1[i]*yalpha)>>19;
-               dest++;
+               ((uint8_t*)dest)[i] = (buf0[i]*yalpha1+buf1[i]*yalpha)>>19;
        }
 
        if(uvalpha != -1)
        {
                for(i=0; i<dstw/2; i++)
                {
-                       ((uint8_t*)uDest)[0] = (uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19;
-                       ((uint8_t*)vDest)[0] = (uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19;
-                       uDest++;
-                       vDest++;
+                       ((uint8_t*)uDest)[i] = (uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19;
+                       ((uint8_t*)vDest)[i] = (uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19;
                }
        }
 }
@@ -704,11 +701,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19);
                                int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800);
-                               dest+=2;
                        }
                }
                else if(dstbpp==15)
@@ -719,11 +715,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19);
                                int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00);
-                               dest+=2;
                        }
                }
 #endif
@@ -814,11 +809,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                                int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800);
-                               dest+=2;
                        }
                }
                else if(dstbpp==15)
@@ -829,11 +823,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                                int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00);
-                               dest+=2;
                        }
                }
 #endif
@@ -993,11 +986,10 @@ static inline void yuv2rgb1(uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, ui
                        int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                        int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                       ((uint16_t*)dest)[0] =
+                       ((uint16_t*)dest)[i] =
                                (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) |
                                ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800);
-                       dest+=2;
                }
        }
        else if(dstbpp==15)
@@ -1008,11 +1000,10 @@ static inline void yuv2rgb1(uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, ui
                        int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                        int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                       ((uint16_t*)dest)[0] =
+                       ((uint16_t*)dest)[i] =
                                (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) |
                                ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00);
-                       dest+=2;
                }
        }
 #endif
index 0139a9c..9749f66 100644 (file)
@@ -506,18 +506,15 @@ static inline void yuv2yuv(uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, uin
 
        for(i=0;i<dstw;i++)
        {
-               ((uint8_t*)dest)[0] = (buf0[i]*yalpha1+buf1[i]*yalpha)>>19;
-               dest++;
+               ((uint8_t*)dest)[i] = (buf0[i]*yalpha1+buf1[i]*yalpha)>>19;
        }
 
        if(uvalpha != -1)
        {
                for(i=0; i<dstw/2; i++)
                {
-                       ((uint8_t*)uDest)[0] = (uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19;
-                       ((uint8_t*)vDest)[0] = (uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19;
-                       uDest++;
-                       vDest++;
+                       ((uint8_t*)uDest)[i] = (uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19;
+                       ((uint8_t*)vDest)[i] = (uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19;
                }
        }
 }
@@ -704,11 +701,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19);
                                int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800);
-                               dest+=2;
                        }
                }
                else if(dstbpp==15)
@@ -719,11 +715,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i]*uvalpha1+uvbuf1[i]*uvalpha)>>19);
                                int V=((uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00);
-                               dest+=2;
                        }
                }
 #endif
@@ -814,11 +809,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                                int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800);
-                               dest+=2;
                        }
                }
                else if(dstbpp==15)
@@ -829,11 +823,10 @@ FULL_YSCALEYUV2RGB
                                int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                                int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                               ((uint16_t*)dest)[0] =
+                               ((uint16_t*)dest)[i] =
                                        (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                        ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) |
                                        ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00);
-                               dest+=2;
                        }
                }
 #endif
@@ -993,11 +986,10 @@ static inline void yuv2rgb1(uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, ui
                        int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                        int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                       ((uint16_t*)dest)[0] =
+                       ((uint16_t*)dest)[i] =
                                (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<3)&0x07E0) |
                                ((clip_table[(Y + yuvtab_3343[V]) >>13]<<8)&0xF800);
-                       dest+=2;
                }
        }
        else if(dstbpp==15)
@@ -1008,11 +1000,10 @@ static inline void yuv2rgb1(uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, ui
                        int U=((uvbuf0[i/2]*uvalpha1+uvbuf1[i/2]*uvalpha)>>19);
                        int V=((uvbuf0[i/2+2048]*uvalpha1+uvbuf1[i/2+2048]*uvalpha)>>19);
 
-                       ((uint16_t*)dest)[0] =
+                       ((uint16_t*)dest)[i] =
                                (clip_table[(Y + yuvtab_40cf[U]) >>13]>>3) |
                                ((clip_table[(Y + yuvtab_1a1e[V] + yuvtab_0c92[U]) >>13]<<2)&0x03E0) |
                                ((clip_table[(Y + yuvtab_3343[V]) >>13]<<7)&0x7C00);
-                       dest+=2;
                }
        }
 #endif